자바/자바
Java 신 개념 총정리 — char, this, switch, 생성자, 자료형 설계 이유까지 (day2)
불광동 물주먹
2025. 6. 19. 00:47
Java 기초 핵심 개념 총정리 — char, this, switch, 생성자, 자료형 설계 이유까지
자바를 공부하며 한 번쯤 고민하게 되는 질문들, 오늘은 진짜 본질부터 하나씩 정리해보려 한다. 특히 《자바의 신》을 읽으며 느끼는 "왜?"를 해결해주는 깊이 있는 내용 위주로 구성했다.
✅ 1. char는 문자 하나만 저장 가능한가?
✔️ 결론부터 말하면:
char는 문자 하나만 저장할 수 있으며, 내부적으로 유니코드 정수값(2바이트) 으로 처리된다.
🔹 예시:
char c = '가'; // 유효, '가'는 하나의 문자
System.out.println((int)c); // 44032 출력 (유니코드 값)
🔹 잘못된 예시:
char c = '가나다'; // ❌ 오류 - 2글자 이상은 char에 저장 불가
🔍 참고:
- '2'도 문자 하나이므로 char에 저장 가능
- 실제로 '2'는 유니코드 50이기 때문에 char c = 50;도 가능
✅ 2. byte, short, int, long을 왜 굳이 나눠놨을까?
🎯 핵심 이유:
- 메모리 효율: byte는 1바이트, long은 8바이트 → 대용량 배열, 임베디드에선 중요
- 의도 표현: byte는 값이 작다는 것을 코드상 드러냄
- 성능 최적화: CPU는 32비트나 64비트 단위 연산에 최적화되어 있음
- 형변환 안전성 제어: byte → int는 자동, int → byte는 명시적 캐스팅 필요
🔸 예: 메모리 효율
byte[] pixels = new byte[1_000_000]; // 1MB
int[] pixels = new int[1_000_000]; // 4MB
👉 모바일 기기나 네트워크 송수신에서는 byte가 결정적
✅ 3. 실무에서 byte는 언제 쓰일까?
🔧 대표 사례:
분야 | 쓰는 이유 |
파일 I/O | 바이너리 데이터를 읽고 쓸 때 |
네트워크 통신 | 패킷, 메시지는 byte[] 단위 |
이미지/오디오 처리 | 픽셀·샘플 데이터가 작고 단순해서 |
암호화/해시 | 알고리즘 입출력은 byte[] 기반 |
임베디드/IOT | 메모리가 작아 byte가 필수 |
비트 플래그 | 상태값을 8비트로 압축해서 사용 |
예:
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
in.read(buffer); // 네트워크 수신
✅ 4. switch문 vs if문 — 언제 어떤 걸 써야 하나?
상황 | 추천 문법 | 이유 |
범위 비교 (>=, <) | if | switch는 범위 지원 안 됨 |
특정 값 비교 ("START") | switch | 분기 값이 고정이면 가독성 ↑ |
예: 점수로 학점 매기기 → if
if (score >= 90) { ... }
예: 요일에 따라 처리 → switch
switch (day) {
case "MON": ...
}
✅ 5. 생성자가 없는 클래스도 객체를 생성할 수 있을까?
✔️ 답: 그렇다!
- 생성자를 작성하지 않으면, 자바는 자동으로 **기본 생성자(매개변수 없음)**를 만들어준다.
- 단, 생성자를 하나라도 명시하면, 기본 생성자는 자동 생성되지 않는다.
예:
class A { } // 기본 생성자 자동 생성됨
A a = new A(); // 가능
class B {
B(String name) { }
}
// B b = new B(); ❌ 컴파일 에러 — 기본 생성자 없음
✅ 6. this 키워드 — 정확한 의미는?
✔️ 정의:
this는 현재 실행 중인 객체 자신을 가리키는 참조 변수
사용 목적:
- 필드와 지역 변수 이름이 겹칠 때 구분
- 메서드 체이닝
- 자기 자신을 다른 메서드에 전달할 때
class Person {
String name;
Person(String name) {
this.name = name; // 필드와 매개변수 구분
}
}
✅ 자바스크립트의 this는 자바와 같을까?
🔥 전혀 다름!
언어 | this의 의미 | 고정성 |
자바 | 객체 자신 (고정) | ✅ 고정 |
JS | 실행 context에 따라 달라짐 | ❌ 호출 방식 따라 변함 |
예:
const person = {
name: "철수",
sayHello() {
console.log(this.name);
}
};
person.sayHello(); // 철수
const hello = person.sayHello;
hello(); // undefined (this가 window나 undefined 됨)
해결 방법:
const bound = person.sayHello.bind(person);
bound(); // 철수
🧠 마무리 요약
개념 | 핵심 요약 |
char | 유니코드 문자 하나만 저장, 내부는 정수 처리 |
자료형 분리 | 메모리 효율 + 의미 명확성 + 성능 최적화 |
byte 활용처 | I/O, 네트워크, 암호화, 임베디드 등에서 메모리 절약 |
switch vs if | 범위면 if, 값 비교면 switch |
생성자 | 작성 안 하면 기본 생성자 자동 생성 |
this | 자바: 객체 자신 / JS: 호출 방식 따라 바뀜 |