[Java] 객체지향 프로그래밍 5

iiueon·2023년 7월 8일

내부 클래스(inner class)

클래스 내에 선언된 클래스

내부 클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
  • 외부에 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다(캡슐화).

내부 클래스의 종류와 특징

내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 또한, 선언위치의 변수와 동일한 유효범위(scope)와 접근성(accessibility)을 갖는다.

내부 클래스특징
인스턴스 클래스
(instance class)
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버
처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용
될 목적으로 선언된다.
스태틱 클래스
(static class)
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼
다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목
적으로 선언된다.
지역 클래스
(local class)
외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만
사용될 수 있다.
익명 클래스
(anonymous class)
클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)

내부 클래스도 abstract나 final과 같은 제어자를 사용할 수 있고, private, protected과 접근제어자도 사용이 가능하다.

내부 클래스의 제어자와 접근성

내부 클래스 중에서 스태틱 클래스만 static멤버를 가질수 있다.

지역 클래스는 지역 클래스가 포함된 메서드에 정의된 final이 붙은 지역변수만 접근가능하다.
그 이유는 메서드가 수행을 마쳐서 지역변수가 소멸된 시점에도, 지역 클래스의 인스턴스가 소멸된 지역변수를 참조하려는 경우가 발생할 수 있기 때문이다.
JDK1.8부터 지역 클래스에서 접근하는 지역 변수 앞에 final을 컴파일러가 자동으로 붙여줘 생략할 수 있다.

익명 클래스(anonymous class)

클래스 선언과 객체 생성을 동시에 하는 클래스
단 한번만 사용될 수 있고, 오직 하나의 객체만을 생성할 수 있는 일회용 클래스

익명클래스는 오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있다.



참고 자료

  • 자바의 정석 3판
profile
지연_로딩

0개의 댓글