일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 데이터베이스실무
- 비전공자 #코딩공부 #혼자공부하는자바 #혼공자 #자바 #정리 #기록
- 정보처리기사실기
- github
- 정처기실기
- 수제비
- 파이썬
- 혼자공부하는자바
- python
- Algorithm
- 정처기
- 기록
- 정리
- 개발자
- java
- 코딩테스트
- GIT
- 정보처리기사
- programmers
- 비전공자 #자바공부 #혼자공부하는자바 #혼공자 #자바 #기록 #정리
- 자바
- 혼공자
- 비전공자 #코딩공부 #혼자공부하는자바 #혼공자 #자바 #기록 #정리
- 자바알고리즘
- 음악
- 비전공자
- javaAlgorithm
- javascript
- 데이터베이스
- 알고리즘
- Today
- Total
This is a blog.
자바 기록 11일차 본문
혼자 공부하는 자바 / 저자: 신용권.
chapter09. 중첩 클래스와 중첩 인터페이스 정리.
중첩 클래스와 중첩 인터페이스
중첩 클래스
클래스 내부에 선언한 클래스.
두 클래스의 멤버들을 서로 쉽게 접근할 수 있다.
외부에는 불필요한 관계 클래스를 감춤으로 코드의 복잡성을 줄일 수 있다.
class ClassName {
class NestedClassName {
}
}
중첩 인터페이스
클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해 인터페이스를 내부에서 선언한다.
class ClassName {
interface NestedInterfaceName{
}
}
중첩 클래스 : 멤버 클래스, 로컬 클래스
멤버 클래스
- 클래스의 멤버로서 선언되는 중첩 클래스.
- 클래스나 객체가 사용 중이라면 언제든지 재사용이 가능.
로컬 클래스
- 생성자 또는 메소드 내부에서 선언되는 중첩 클래스.
- 메소드를 실행할 때만 사용되고 메소드가 종료되면 없어진다.
인터페이스 멤버 클래스
static 키워드 없이 중첩 선언된 클래스.
인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언할 수 없다.
선언 방법
- A 클래스 외부에서 B 객체를 생성하려면 먼저 A 객체를 생성하고 B객체를
생성해야 한다.
ex) A클래스 외부
A a = new A();
A.B b = a.new B():
b.field1 = 3;
b.method();
A클래스 내부
class A {
class B{ ... }
void methodA(){
B b = new B();
b.field = 3;
b.method1();
}
=> 대부분 A 클래스 내부에서 B 객체를 생성해서 사용.
정적 멤버 클래스
static 키워드로 선언된 클래스.
모든 종류의 필드와 메소드를 선언할 수 있다.
인스턴스 멤버 클래스와 달리 A객체를 생성할 필요가 없다.
ex) A.C = new A.C();
c.field1 = 3;
c.method1();
로컬 클래스
접근 제한자(public, private) 및 static을 붙일 수 없다.
=> 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없기 때문.
=>정적 필드와 메소드는 선언할 수 없다.
메소드 내에서 객체를 생성하고 사용해야 한다.
중첩 클래스의 접근 제한
바깥 클래스와 메소드에서 사용 제한
- 인스턴스 멤버 클래스는 바깥 클래스의 인스턴스 필드의 초기값이나
인스턴스 메소드에서 객체를 생성할 수 있다.
- 정적 필드의 초기값이나 정적 메소드에서는 객체를 생성할 수 없다.
- 정적 멤버 클래스는 모든 필드의 초기값이나 모든 메소드에서 객체를 생성할 수 있다.
멤버 클래스에서 사용 제한
- 인스턴스 멤버 클래스 안에서는 바깥 클래스의 모든 필드와 메소드에 접근 가능.
- 정적 멤버 클래스 안에서는 바깥 클래스의 정적 필드와 메소드에만 접근이 가능하고
인스턴스 필드와 메소드에는 접근할 수 없다.
로컬 클래스에서 사용 제한
- 메소드의 매개 변수나 로컬 변수를 로컬 클래스에서 사용할 때 제한이 있다.
=> 매개 변수와 로컬 변수에 final 특성을 갖고 있다.
중첩 클래스에서 바깥 클래스 참조 얻기
- 바깥클래스.this.필드
바깥클래스.this.메소드();
중첩 인터페이스
클래스의 멤버로 선언되 인터페이스.
인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 가능.
인스턴스 멤버 인터페이스 = 바깥 클래스의 객체가 있어야 사용 가능.
정적 멤버 인터페이스 = 바깥 클래스의 객체 없이 바깥 클래스만으로 바로 접근할 수 있음.
-> 주로 UI프로그래밍에서 이벤트를 처리할 목적으로 많이 활용.
익명 객체
이름이 없는 객체.
조건 = 클래스를 상속하거나 인터페이스를 구현해야 한다.
상속의 경우, 부모클래스 변수 = new 부모 클래스(){...}
구현의 경우, 인터페이스 변수 = new 인터페이스(){...}
익명 자식 객체 생성
자식 클래스가 재사용되지 않고, 오로지 특정 위치에서 사용할 경우라면 익명 자식 객체를 생성해서 사용하는 것이 좋은 방법.
부모클래스 [필드|변수] = new 부모클래스(매개값,...){
//필드
//메소드
}
생성자는 선언할 수 없다.
익명 자식 객체에서 새롭게 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용.
외부에서는 접근할 수 없다.
=> 부모 타입 변수에 대입되었기 때문에 부모 타입에 선언된 것만 사용할 수 있기 때문.
필드의 초기값, 로컬 변수의 초기값, 매개 변수에 대입이 가능하다.
익명 구현 객체 생성
- 구현 클래스가 재사용되지 않고, 오로지 특정 위치에서 사용할 경우, 익명 구현 객체를 생성한다.
- 필드의 초기값, 로컬 변수의 초기값, 매개값으로 대입이 가능하다.
- 인터페이스 [필드|변수] = new 인터페이스(){
//인터페이스에 선언된 추상 메소드의 실체 메소드 선언
//필드
//메소드
}
익명 객체의 로컬 변수 사용
메소드의 매개 변수나 로컬 변수를 익명 객체 내부에서 사용할 때 제한이 있다.
매개 변수나 로컬 변수가 수정되어 값이 변경되면 익명 객체에 복사해 둔 값과 달라지므로 매개 변수와 로컬 변수를 final로 선언해야 한다.
'JAVA > Book Summary' 카테고리의 다른 글
자바 기록 13일차 (0) | 2021.06.17 |
---|---|
자바 기록 12일차 (0) | 2021.06.15 |
자바 기록 10일차 (0) | 2021.06.10 |
자바 기록 9일차 (0) | 2021.06.09 |
자바 기록 8일차 (0) | 2021.06.08 |