[Java] 9. 중첩 클래스와 중첩 인터페이스
2022. 6. 7. 21:39ㆍJava
9-1) 중첩 클래스와 중첩 인터페이스 소개
- 중첩클래스
- 클래스 내부에 선언한 클래스
- 중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점이 있다.
- 선언되는 위치에 따라 두 가지로 분류된다.
① 멤버 클래스: 클래스의 멤버로서 선언되는 중첩 클래스.
⇒ 코드 파일 형식: 바깥클래스명 $ 멤버클래스명. class
② 로컬 클래스: 생성자 또는 메소드 내부에서 선언되는 중첩 클래스
⇒ 코드 파일 형식: 바깥클래스명 $1 로컬클래스명. class - 인스턴스 멤버 클래스
- static 키워드 없이 중첩 선언된 클래스.
- 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언 불가. - 정적 멤버 클래스
- static 키워드로 선언된 클래스.
- 정적 멤버 클래스는 모든 종류의 필드와 메소드를 선언할 수 있다. - 로컬 클래스
- 메소드 내에서 선언된 중첩 클래스.
- 접근 제한자(public, private) 및 static을 붙일 수 없다.
⇒ 메소드 내부에서만 사용되므로 접근 제한의 필요성이 없음.
- 로컬 클래스 내부에는 인스턴스 필드와 메소드만 선언할 수 있고 정적(static) 필드와 메소드는 선언할 수 없다.
- 로컬 클래스는 메소드가 실행될 때 메소드 내에서 객체를 생성하고 사용해야 한다.
- 중첩 클래스의 접근 제한
- 바깥 필드와 메소드에서 사용 제한
- 인스턴스 멤버 클래스
- 바깥 클래스의 인스턴스 필드의 초기값이나 인스턴스 메소드에서 객체를 생성할 수 있으나 정적 필드의 초기값이나 정적 메소드에서는 객체를 생성할 수 없다. - 정적 멤버 클래스
- 모든 필드의 초기값이나 모든 메소드에서 객체를 생성할 수 있다.
- 인스턴스 멤버 클래스
- 멤버 클래스에서 사용 제한
- 인스턴스 멤버 클래스 내부
- 바깥 클래스의 모든 필드와 모든 메소드에 접근할 수 있음. - 정적 멤버 클래스 내부
- 바깥 클래스의 정적 필드와 메소드에만 접근할 수 있고 인스턴스 필드와 메소드에는 접근할 수 없다.
- 인스턴스 멤버 클래스 내부
- 로컬 클래스에서 사용 제한
- 로컬 스레드 객체를 이용할 때
- 메소드를 실행하는 스레드와 다르므로 메소드가 종료된 후에도 로컬 스레드 객체는 실행 상태로 존재할 수 있다.
- 로컬 스레드 객체를 이용할 때
- 중첨 클래스에서 바깥 클래스 참조 얻기
- 중첩 클래스에서 this 키워드를 사용하면 바깥 클래스의 객체 참조가 아니라 중첩 클래스의 객체 참조가 된다.
- 중첩 클래스 내부에서 바깥 클래스의 객체 참조를 얻으려면 바깥 클래스의 이름을 this 앞에 붙여준다.
⇒ 바깥클래스.this.필드
바깥클래스.this.메소드();
- 바깥 필드와 메소드에서 사용 제한
- 중첩 인터페이스
- 중첩 인터페이스: 클래스의 멤버로 선언된 인터페이스
⇒ 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서 사용. - 인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 가능.
- 인스턴스 멤버 인터페이스
- 바깥 클래스의 객체가 있어야 사용 가능
- 정적 멤버 인터페이스
- 바깥 클래스의 객체 없이 바깥 클래스만으로 바로 접근할 수 있음.
- 주로 UI 프로그래밍에서 이벤트를 처리할 목적으로 많이 활용한다.
- 중첩 인터페이스: 클래스의 멤버로 선언된 인터페이스
9-2) 익명 객체
- 익명 객체 = 이름이 없는 객체
- 조건: 어떤 클래스를 상속하거나 인터페이스를 구현해야 한다.- 익명 자식 객체 생성
- 익명 구현 객체 생성
- 익명 객체의 로컬 변수 사용
오 익명 객체 하나도 모르겠는 걸?
'Java' 카테고리의 다른 글
[Java] 학생의 데이터를 처리하는 프로그램 만들기. (0) | 2022.06.23 |
---|---|
[Java] HashSet을 이용한 로또 판매 프로그램 (0) | 2022.06.23 |
[Java] 8. 인터페이스 (0) | 2022.06.02 |
[Java] 7. 상속 (0) | 2022.06.02 |
[Java] 6. 클래스 (0) | 2022.05.30 |