-
[Java] 내부 클래스란?Java 2022. 1. 11. 00:01728x90
내부 클래스(Inner Class)란?
클래스 안에 또 다른 클래스를 구성하는 것을 말합니다.
class OuterClass { class InstanceInnerClass{ //Inner Member class //static member 선언 불가능 } static class StaticInnerClass{ //static class // instance member와 static member 선언 가능 int data1; static int data2; } void func() { class LocalInnerClass{ //Inner Local class int data; } } } OuterClass A = new OuterClass(); //외부 클래스 생성 A.InstanceInnerClass B = A.new B(); //내부 클래스 생성 OuterClass.StaticInnerClass C = new OuterClass.StaticInnerClass(); //외부 클래스 객체 생성없이 클래스 명으로 내부 클래스 객체 생성 가능 C.data1 = 10; //인스턴스 멤버에 접근 OuterClass.StaticInnerClass.data2 = 20; //정적 멤버에 접근가능(내부 클래스 객체도 생성할 필요 x)
변수의 선언 위치에 따라 인스턴스 변수, 클래스 변수, 지역변수로 구분되는 것처럼 내부 클래스도 선언 위치에 따라 구분됩니다.
Inner Member class
인스턴스 클래스(Instance class), 인스턴스 멤버 클래스(Instance Member class)라고도 하며 static 키워드가 없는 내부 클래스입니다.
클래스 내부에서 멤버 변수처럼 선언된 클래스를 말합니다.
외부 클래스의 멤버이기 때문에 외부 클래스의 객체 먼저 생성한 후 내부 클래스의 객체를 생성하여 사용합니다.
인스턴스 클래스 내부에는 instance 멤버만 선언할 수 있으며 static 멤버는 선언할 수 없습니다.
주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언됩니다.
Inner Static class
외부 클래스의 멤버 변수 선언 위치에 선언되며, 주로 외부 클래스의 static멤버, static메서드에 사용될 목적으로 쓰입니다.
static 키워드가 붙은 내부 클래스입니다.
외부 클래스 멤버이지만, static 키워드가 붙어있기 때문에 외부 클래스의 객체를 생성하지 않고도 내부 클래스의 객체를 생성할 수 있습니다.
Static 클래스 내부에는 instance 멤버와 static 멤버를 모두 선언할 수 있습니다.
Inner Local class
메소드 내부에서 지역 변수처럼 선언된 클래스를 말합니다.
메서드 안에서 선언된 클래스의 속성은 메서드의 밖에서 사용할 수 없습니다.
접근 제한자와 static을 붙일 수 없습니다.
메서드 내부에서만 사용되므로 접근을 제한할 필요가 없고, 메서드 내에는 static 멤버를 선언할 수 없습니다.
내부 클래스를 사용하는 이유는 무엇일까요?
하나의 장소에서만 사용되는 클래스를 한 곳에 모을 수 있기 때문에 가독성이 증가하게 됩니다.
외부에는 불필요한 클래스를 은닉함으로써 코드의 복잡성을 줄이고 캡슐화할 수 있습니다.
외부 클래스와 내부 클래스가 서로 접근하기 쉬워집니다. (private 멤버에 다른 클래스는 원래 접근할 수 없지만 내부 클래스를 사용한다면 접근할 수 있습니다.)
출처
자바의 정석
http://www.tcpschool.com/java/java_usingClass_innerClass
https://doublesprogramming.tistory.com/158
https://shrtorznzl.tistory.com/23
728x90'Java' 카테고리의 다른 글
[Java] 래퍼 클래스(Wrapper Class)란? (0) 2022.01.20 [Java]람다식(Lambda expression)이란? (0) 2022.01.17 [Java] 상속(Inheritance)이란? (0) 2022.01.06 [Java] 오버로딩(Overloading)이란? (0) 2022.01.05 [Java] 자바 Enum이란? (0) 2022.01.01