1. 중첩 클래스란?
클래스 안에 정의된 다른 클래스를 의미한다. 중첩 클래스는 외부 클래스의 멤버로 간주되며,
외부 클래스와 밀접한 관계를 가지고 있는 경우 사용된다.
2. 중첩 클래스의 존재 이유 :
1) 한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리하기 위해
2) 캡슐화를 통해 구현 세부 사항을 숨길 수 있다.
3) 코드의 가독성과 유지보수를 쉽게 만들 수 있다.
2. 중첩 클래스 종류
1) 정적 중첩 클래스 ( Static Nested Class ) :
정적 중첩 클래스는 static을 사용하여 외부 클래스 안에 정의된 클래스다.
겉으로 보기에는 유사하지만, 내부적으로 구현이 달라야 할 때 사용한다.
public class OuterClass { // 외부 클래스 // 외부 클래스 멤버들... public static class StaticNestedClass { // 정적 중첩 클래스 // 중첩 클래스 멤버들... } } 정적 중첩 클래스 사용 예) OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass(); |
2) 내부 클래스 ( Inner Class 또는 Non-Static Nested Class ) :
내부 클래스는 static 없이 외부 클래스 안에 정의된 클래스다.
* static 멤버를 선언할 수 없다.
내부 클래스는 외부 클래스의 인스턴스와 연결되며, 외부 클래스의 모든 멤버에 접근할 수 있다.
* private로 선언된 멤버에도 접근할 수 있다.
내부 클래스는 캡슐화를 위해 사용한다.
하나의 클래스에서 어떤 공통적인 작업을 수행하는 클래스가 필요한데, 다른 클래스에서는 필요 없을 때 사용한다.
public class OuterClass { // 외부 클래스 // 외부 클래스 멤버들... public class InnerClass { // 내부 클래스 (Inner Class) // 내부 클래스 멤버들... } } 내부 클래스 사용 예) OuterClass outerObj = new OuterClass(); OuterClass.InnerClass innerObj = outerObj.new InnerClass(); |
3) 익명 클래스 ( Anonymous Class ) :
클래스 정의를 통해 인스턴스를 생성하는 방법 중 하나이다.
클래스 이름이 없으며, 클래스의 정의와 인스턴스 생성을 동시에 수행할 수 있다.
클래스, 객체 이름이 없기 때문에 다른 클래스나 메소드에서 참조할 수 없다.
사용 목적 : 메모리 사용량과 애플리케이션 소요 시간을 낮추는게 목적이다.
* 클래스를 만들고 호출 시 메모리에 올라간다. 클래스가 많아지면, 메모리와 소요시간이 올라간다.
InterfaceName obj = new InterfaceName() { // 하나의 부모 클래스를 상속받거나 하나의 인터페이스 구현 }; |
4) 지역 클래스 ( Local Class ) :
메서드나 블록 안에서 정의되는 클래스로, 로컬 변수와 마찬가지로 해당 메서드나 블록 내에서만 유효한 클래스다.
로컬 클래스는 익명 클래스와 달리 이름이 있고 해당 메서드나 블록 내부에서만 인스턴스를 생성하고 사용할 수 있다.
사용 목적 : 특정 메서드나 블록에서만 사용될 클래스를 정의하고, 캡슐화하는 목적이다. 로컬 클래스는 해당 메서드의 로컬 변수나 매개변수에 쉽게 접근할 수 있다.
public class OuterClass { public void someMethod() { class LocalClass { // 로컬 클래스 정의 // 로컬 클래스 멤버들... } // 로컬 클래스의 인스턴스 생성 및 사용 LocalClass localObj = new LocalClass(); // ... } } |
'자바' 카테고리의 다른 글
자바 JVM 이란 (0) | 2023.07.18 |
---|---|
자바 Call by value, Call by reference, 기본 자료형, 참조 자료형 (0) | 2023.07.18 |
자바 final (0) | 2023.07.16 |
자바 접근 제어자 (0) | 2023.07.15 |
자바 오버로딩과 오버라이딩 (0) | 2023.07.14 |