[자바] 8. Nested Class

개발자 춘식이·2023년 7월 23일
0

Java

목록 보기
8/8
post-thumbnail

도서 자바의신을 참고하였습니다.

1. Nested Class

nested : n. 집합 또는 구간의 순서를 지닌 계열(系列)에서, 각기 그 앞의 것에 포함되고, 또한 집합의 직경이나 구간의 길이가 0으로 수속(收束)하는 것.

Nested Class는 클래스 안의 클래스를 뜻합니다. 자바 기반의 UI를 처리할 때 사용자의 입력이나, 외부의 이벤트에 대한 처리를 하는 곳에서 주로 사용됩니다. 파일 이름은 반드시 public 클래스의 이름이어야 합니다. 그렇지 않으면 컴파일 에러가 발생합니다.
Nested Class를 사용하는 이유는 다음과 같습니다.

  • 한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리할 필요가 있을 때 -> static nested class
  • 캡슐화가 필요할 때. 즉, 내부 구현을 감추고 싶을 때 -> inner class
  • 소스의 가독성과 유지보수성을 높이고 싶을 때

2. Static Nested Class

Nested class는 감싸고 있는 외부 클래스의 어떤 변수든 접근 가능합니다. 단, static nested class는 불가능합니다. static nested class는 클래스를 묶기 위해 사용되며, 겉으로 보기에는 유사하지만 내부적으로 구현이 달라야할 때 사용됩니다.

public class University {
	static class Student {
    }
}

public class School {
	static class Student {
    }
}

위와 같이 University클래스의 Student 클래스와 School의 Student 클래스가 보기에는 유사하지만 내부적으로 구현이 달라야할 때 사용됩니다.

public class OutClass {
	static class StaticNested {
    }
}

이런식으로 되어 있다면 컴파일은 OutClass.classOutClass$StaticNested.class으로 나누어집니다. 접근을 할 때는 OutClass.StaticNested staticNested = new OutClass.StaticNested();로 접근하면 됩니다.


3. Inner Class

Inner Class는 캡슐화를 목적으로 하는 클래스입니다. 하나의 클래스에서 어떤 공통적인 작업을 수행하는 클래스가 필요한데 다른 클래스에서는 그 클래스가 전혀 필요없을 때 Inner class를 만들어 사용합니다. Inner 클래스의 객체를 생성하기 위해서는 먼저 Outer 클래스 객체를 생성해야 하고, 이 객체를 통해서 Inner 객체 생성이 가능합니다. 주로 GUI 프로그램을 만들 때 사용됩니다.


4. Anonymous Class

Anonymous Class는 이름이 없는 일회용 클래스로, 정의와 생성을 동시에 수행합니다.

class MyClass extends ParentClass {
	//...
}
MyClass mc = new MyClass();

보통 객체를 생성할 때 위와 같이 생성하지만 익명 클래스는 다음과 같이 생성합니다.

new ParentClass {
	//...
}

//또는

new 구현인터페이스이름 {
	//...
}

컴파일하고 난 후에는 클래스명이 없기 때문에 클래스명$1.class처럼 숫자로 붙습니다. 클래스를 만들고 클래스를 호출하면 그 정보는 메모리에 올라가게 되고, 클래스를 많이 만들수록 메모리는 많이 필요해지고 애플리케이션을 시작할 때 더 많은 시간이 소요됩니다. 따라서 이런 익명 클래스를 통해서 간단한 방법으로 객체를 생성할 수 있습니다.


지속적으로 수정해나갈 예정입니다.
2023-07-23 V1.0

profile
춘식이를 너무 좋아하는 주니어 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

글 잘 봤습니다.

답글 달기