📚 김영한의 자바 중급 -1 섹션 8,9 중첩 클래스, 내부 클래스2
난이도: ⭐⭐⭐☆☆
🔑 핵심 개념 요약
이번 학습을 통해 다음 개념을 정리했습니다:
- 중첩 클래스와 내부 클래스의 차이
- 지역 클래스의 특징과 사용법
- **섀도잉(shadowing)**과 캡처(capture) 개념
- 자바 내부 클래스의 사용 상황과 이유
💡 중첩 클래스 & 내부 클래스 정리
자바에서 중첩 클래스와 내부 클래스는 외부 클래스와 긴밀하게 연결된 클래스를 정의할 때 사용합니다. 상황에 따라 다음과 같은 특징과 호출 방식을 가집니다.
중첩 클래스
- static 키워드가 사용된 내부 클래스
- 외부 클래스와는 별도이며 독립적으로 호출 가능
- 유틸리티 역할이 많으며 외부 클래스를 참조하지 않음
- 호출법: 외부클래스.중첩클래스 형태로 호출
- 추천 상황: 외부 클래스 외부에서 자주 사용하거나, 특정 로직을 독립적으로 캡슐화할 때
내부 클래스
- 외부 클래스의 멤버 변수와 메서드에 접근 가능
- 외부 클래스의 참조값을 항상 보관함
- 호출법: new 외부 클래스().new 내부 클래스()로 생성
- 사용 이유:
- 논리적 그룹화
- 특정 클래스를 외부에 노출하지 않고 사용하고 싶을 때
- 외부 클래스와의 캡슐화 강화
🏷 지역 클래스
- 메서드 내에 정의된 클래스
- 메서드가 호출될 때만 사용 가능
- 특징:
- final 키워드로 사실상 값 변경이 불가능한 캡처
- 메서드의 변수와 함께 생명 주기를 가짐
- 메서드 밖에서는 사용 불가
- 장점: 메서드 내의 특정 로직을 캡슐화하여 코드 가독성을 높임
🗒 익명 클래스
- 이름이 없는 클래스이며 인터페이스나 추상 클래스를 구현할 때 사용
- 즉석에서 생성하여 일회성으로 사용 가능
- 선언과 동시에 생성할 수 있어 코드가 간결해짐
- 유연한 다형성을 제공
- 자바 내부에서는 외부 클래스 이름 + $숫자로 정의됩니다.
- 익명 클래스를 더 효율적으로 대체하기 위해 람다 표현식도 자주 사용됩니다.
🔍 섀도잉(Shadowing) 개념
- 내부 클래스와 외부 클래스에서 동일한 이름의 변수를 정의할 때, 내부 클래스에서 정의된 변수가 우선합니다.
- 이로 인해 외부 클래스의 변수가 가려지는 현상을 섀도잉이라 합니다.
- 해결 방법: 외부클래스명.this.변수명 형태로 외부 클래스의 변수에 접근할 수 있습니다.
⚙️ 캡처(Capture) 개념
- 내부 클래스에서 **지역 변수에 접근할 때 해당 변수는 사실상 final**로 동작합니다.
- 메서드가 종료되더라도 내부 클래스가 계속 참조할 수 있도록 값이 복사되며, 값 변경이 금지됩니다.
- 캡처된 값과 내부 클래스의 동작을 동기화하기 위해 변수 값이 변경되지 않도록 보장됩니다.
📚 변수의 생명 주기
자바의 변수는 메모리 영역에 따라 생명 주기가 달라집니다:
- 클래스 변수: static 변수이며, 프로그램 종료 시까지 생존
- 인스턴스 변수: 객체가 힙 영역에서 유지될 때까지 생존
- 지역 변수: 메서드와 함께 스택 영역에서 할당 및 해제
❗ 중첩 클래스와 내부 클래스 주의사항
- 상황에 따라 클래스 종류를 적절히 선택하세요.
- 외부 클래스와 독립적일 경우 중첩 클래스
- 외부 클래스와 강하게 결합되어 있을 경우 내부 클래스
- 메서드 내부에서만 사용될 경우 지역 클래스
- 익명 클래스와 람다 표현식은 상황에 맞게 적절히 사용하세요.
'📚 학습 기록 > Java 기초 & 중급' 카테고리의 다른 글
📅 학습 날짜: 2025.02.21[자바 예외 처리 - 예외 계층 정리] (2) | 2025.02.21 |
---|---|
[25.02.20][Java 기초] 조건문 완벽 이해하기 - if, switch, 삼항 연산자 (1) | 2025.02.20 |
🗓️ 학습 일자: 2025.02.08, 2025.02.18📘 코딩 테스트 프로그래머스 : 가까운 수, 숨어있는 숫자의 덧셈, 한번만 등장한 문자 (1) | 2025.02.18 |
[25.02.16]Java - 입문 개념 정리 및 자기화: 연산자 (1) | 2025.02.16 |
📅 [25.02.16]Java – 입문 개념 정리 및 자기화 – 변수와 패키지 (1) | 2025.02.16 |