카테고리 없음

자바 Nested Class 내부 클래스

728x90

자바에서는 클래스 안에 클래스가 들어갈 수 있다. 이러한 클래스를 Nested Class 라고 부른다

 

존재하는 가장 큰 이유는 코드를 간결하게 쓰기 위함이다

 

UI처리를 할 때 사용자의 입력이나 외부의 이벤트에 대한 처리를 하는 곳에서 가장 많이 사용된다. 이 부분에서 Nested 클래스가 없으면 코드가 매우 복잡해진다

 

 

 

Nested 클래스는 선언한 방법에 따라 Static nested, inner 클래스로 나뉜다

 

Static nested 크래스와 내부 클래스의 차이는 static으로 선언되어 있는가 여부이다.

 

 

내부 클래스는 다시 두가지로 나뉘는데, 이름이 있는 내부 클래스는 로컬 내붘 클래스라고 하고, 이름이 없는 클래ㅑ스를 익명 내부 클래스라고 부른다.

 

 

Nested 클래스를 사용할 때

 

한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리할 필요가 있을 때

캡슐과하 필요할 때, 내부 구현을 감추고 싶을 때

소스 가독성과 유지보수성을 높이고 싶을 때

 

 

 

 

 

Static nested 클래스의 특징

 

내부 클래스는 감싸고 있는 외부 클래스의 어떤 변수도 접근할 수 있다. 심지어 private로 선언된 변수까지도 접근 가능하다. 하지만 Static nested 클래스를 그렇게 사용하는 것은 불가능하다. 왜냐하면 이름 그대로 static 하기 때문이다.

 

 

내부에 있는 netsed 클래스는 별도로 컴파일 할 필요가 없다. 왜냐하면 감싸고 있는 클래스를 컴파일 하면 자동으로 컴파일 되기 때문이다

 

그렇다면 왜 스태틱 네스티드 클래스를 만들까 ? 

 

스태틱 네스티드 클래스를 만드는 이유는 클래스를 묶기 위해서다. 

 

만약 학교를 관리하는 School 이라는 클래스를 만들고 대학을 관리하는 Universirt라는 클래스를 만들었을 때를 생각해보자

 

이때 Student라는 클래스를 만들면 Student의 학생인지, University의 학생인지가 불분명해진다.

 

School 내에 static nested 클래스인 student 클래스를 만들면 이 클래스의 용도는 보다 명확해진다

 

겉보기엔 ㅈ유사하지만 내부적으로 구현이 달라야 할 때 이와같이 static nested 클래스를 만든다.

 

 

 

 

static으로 선언하지 않은 inner 클래스는 Inner 클래스를 감싸는 부모 클래스 객체를 무조건 만들어야 한다.

 

그런데 왜 이렇게 만드는데 복잡함에도 왜 만들었을까 ?

 

 

내부 클래스를 만드는 이유는 캡슐화 때문이다. 하나의 클래스에서 어떤 공통작업을 수행하는 클래스가 필요한데 다른 클래스에서는 그 클래스가 전혀 필요없을 때 이러한 내부 클래스를 만들어 사용한다.

 

 

GUI에서 내부 클래스들이 많이 사용되는 부분은 리스너 라는 것을 처리할 때다. 사용자가 버튼을 클릭하거나 키보드를 입력할 때 모두 이벤트라는 것이 발생한다. 어떤 버튼이 눌렸을 때 해야하는 작업을 정의하기 위해서는 내부 클래스를 만들어 사용하게 된다. 

 

그런데 하나의 앱이 어떤 버튼이 눌렸을 때 수행해야 하는 작업은 대부분 상이하다. 그러니 하나의 별도 클래스를 만들어 사용하는 것보다는 내부 클래스를 만드는 것이 훨씬 편하다. 내부 클래스를 만드는 것보다도 더 간단한 방법은 익명 클래스를 만드는 것이다.