개요
interface
와implements
키워드는 추상화와 다형성을 지원하는 대표적 문법임
인터페이스 구성요소
- 인터페이스는
public
추상 메서드 와public
정적 상수만을 가진다.
interface Speakable {
double PI = 3.14159;
final double absoluteZeroPoint = -275.15;
void sayYes();
}
Speakable
인터페이스에서는
- PI , absoluteZeroPoint 가 각각 상수로 인식된다.
- 또한 sayYes() 는 abstract == 추상메서드로 인식된다.
자바에서는 인터페이스 내부의 상수나 메서드에
static
이나abstract
같은 키워드를 명시적으로 쓰지 않아도 된다.이는 설계시에 사용자들을 배려한 처사이다.
인터페이스 구현
class Speaker implements Speakable {
public void sayYes() {
System.out.println("I say NO!!!");
}
}
Speaker
클래스가Speakable
을 구현한다면,Speakeable
에 정의된 모든 메서드를 반드시 오버라이딩 해야함.
예제 비교
interface Speakable {
double PI = 3.14159;
final double absoluteZeroPoint = -275.15;
void sayYes();
}
interface Speakable {
public static final double PI = 3.14159;
public static final double absoluteZeroPoint = -275.15;
public abstract void sayYes();
}
- 두 예제는 사실상 동일한 코드임
- 전자는
- 키워드 생략
- 후자는
- 모든 키워드를 명시함.
명시적 코드의 중요성
- 명시적인게 일반적으로 더 좋다고 생각
- 명확함
- 해당 변수나 메서드의 속성 자체가 명확해지며,
- 인터페이스의 규칙을 모르는 사람도 쉽게 이해할 수 있음
- 코드의 가독성
- 명시적 표현은 코드를 읽는 사람에게 더 명확한 의미를 전달
- 유지보수
- 코드를 수정할 필요가 있는 경우, 명시적인 코드가 더 유지보수하기 쉬움
- 명확함
추상 메서드의 증거
sayYes()
메서드는 몸체가 없는 추상 메서드임.
- 추상 메서드는 구현되지 않은 메서드를 의미하므로,
sayYes()
는 당연히 추상 메서드
정적 상수의 증거
PI
와absoluteZeroPoint
에 새로운 값을 할당하려고 하면 에러가 발생한다.- 이로 인해, 이들 변수는 상수(
final
)임을 알 수 있다.
- 이로 인해, 이들 변수는 상수(
- 클래스명으로 접근할 수 있는 것은 정적(
static
) 변수임을 나타냅니다.
자바 8 에서의 변화
- 빅데이터와 병렬성 지원을 위해 람다 기능이 추가됨.
- 함수를 변수에 할당할 수 있게 되었으며, 인터페이스도 그에 따라 변환함
- 자바 8 이전
- 정적 상수 + 추상 메서드만 가능
- 이후
- 디폴트 메서드와 정적 메서드도 지원
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]super 키워드 (0) | 2023.09.04 |
---|---|
[4단원]Package 키워드 (0) | 2023.08.31 |
[4단원]instanceof 연산자 (0) | 2023.08.29 |
[4단원]클래스 생성 시의 실행 블록, static 블록 (0) | 2023.08.28 |
[4단원]final 키워드 (0) | 2023.08.28 |