7.7 인터페이스의 장점
-개발 시간을 단축할 수 있다.
-변경에 유리한 유연한 설계가 가능하다.
-표준화가 가능하다.
-서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
7.9 디폴드 메서드와 static메서드
-인터페이스에 디폴트 메서드, static 메서드 추가 가능(JDK1.8부터)
-인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움
해결책-> 디폴트 메서드
-디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
-디폴트 메서드가 기존의 메서드와 충돌할 때 해결책
1. 여러 인터페이스의 디폴트 메서드 간의 충돌
-인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.
2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
- 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
8. 내부 클래스 inner class
8.1 내부 클래스란?
-클래스 안의 클래스의 멤버들을 쉽게 접근할 수 있다.
-코드의 복잡성을 줄일 수 있다. (캡슐화)
class A { //B의 외부 클래스
'''
class B { //A의 내부 클래스
''' //객체 생성 없어도 A의 멤버 접근 가능함
}
'''
}
8.2 내부 클래스의 종류와 특징
-내부 클래스의 종류와 유효범위(scope)는 변수와 동일
iv - instance class
cv- static class
lv - local class 각각 매칭 됨
instance class - 외부클래스의 멤버변수 선언위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다뤄짐
주로 외부클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언됨
static class - 외부 클래스의 멤버변수 선언 위치에 선언, 외부클래스의 static멤버처럼 다뤄짐
주로 외부클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언 됨
local class - 지역변수처럼 선언된 영역 내부에서만 사용가능
*annoymous class (익명클래스) - 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용)
8.3 내부 클래스의 선언
class Outer {
class InstanceInner { }
static class StaticInner { }
void myMethod() {
class LocalInner { } //메서드 영역
}
} //클래스 영역
8.4 내부 클래스의 제어자와 접근성
-내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일 (4개 다 사용가능)
class Ex31 {
class InstanceIneer { //인스턴스 내부클래스
int iv = 100;
static int cv = 100; //에러 - static변수를 선언할 수 없다
final static int CONST = 100; //final static은 상수이므로 허용
}
static class StaticIneer { //static내부클래스
int iv = 200;
static int cv = 200; //static클래스만 static멤버를 정의할 수 있다.(객체생성 없이 사용 가능해야하기 때문)
} //static내부 클래스에서는 외부 클래스의 인스턴스 멤버에 접근할 수 없다.
void myMethod() {
class LocalIneer { //지역내부클래스
int iv = 300;
static int cv = 300; //에러
final static int CONST = 300;
}
}
}
8.5 익명클래스 anonymous class
-이름이 없는 일회용 클래스. 정의와 생성을 동시에
new 조상클래스이름() {
//멤버선언
}
또는
new 구현인터페이스이름() {
//멤버선언
} //자기 이름 없으니까 조상꺼나 인터페이스 이름씀
'JAVA' 카테고리의 다른 글
| JAVA | java.lang 패키지 (0) | 2022.02.14 |
|---|---|
| JAVA | 예외처리 (0) | 2022.02.12 |
| JAVA | 추상클래스, 인터페이스 (0) | 2022.02.10 |
| JAVA | final 상수 (0) | 2022.02.06 |
| JAVA | 재귀호출, 변수의 초기화 (0) | 2022.02.05 |