자바/자바

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을 왜 굳이 나눠놨을까?

🎯 핵심 이유:

  1. 메모리 효율: byte는 1바이트, long은 8바이트 → 대용량 배열, 임베디드에선 중요
  2. 의도 표현: byte는 값이 작다는 것을 코드상 드러냄
  3. 성능 최적화: CPU는 32비트나 64비트 단위 연산에 최적화되어 있음
  4. 형변환 안전성 제어: 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는 현재 실행 중인 객체 자신을 가리키는 참조 변수

사용 목적:

  1. 필드와 지역 변수 이름이 겹칠 때 구분
  2. 메서드 체이닝
  3. 자기 자신을 다른 메서드에 전달할 때
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: 호출 방식 따라 바뀜