몇번을 봐도 추상적인 개념 그것은 바로 추상화 .. 추상클래스 .. 추상 메서드 ....
이걸 쓰는 와중에도 아직 명확하지 않아서 이걸 쓰는게 맞나(?)라는 생각이 들지만
이렇게 계속 부딪히다 보면 언젠가 추상화에 대해서 알게되지 않을까 .. 하는 생각으로 주제를 정했다.
이번 챕터에서는 추상화(abstract)키워드에대해 내용이 나왔는데 보다보니 인터페이스랑 굉장히 비슷?한 것 같다.
🙋🏻 추상클래스
추상클래스는,
: 클래스 선언부에 abstract를 붙여서 정의함
: 추상 메서드를 가질 수 없음
: 인스턴스(new ~~)를 생성할 수 없음
❓ 추상 클래스는 그러면 어떻게 구현하나요
추상메서드는 추상클래스내에서 정의되는 선언부만 있고, 구현 부분이 없는 메서드로
추상 클래스는 '추상적인 형태'만 제안하고, 실제 구현은 하위 클래스에서 구현을 강제화하여 재정의하도록 한다.
*. 만약 상속받은 하위 클래스에서 추상 메서드를 재정의 하지 않으면, 그 하위 클래스도 추상 클래스가 되어버린다.
❓어짜피 자식 클래스에서 재정의할거면 조상 클래스에서 구현하면 되지 않나요 (다형성)
같은 이름의 메서드여도, 자손 클래스마다 실제 구현은 달라질 수 있고 추상화를 통해 강제성과 다형성에서 이점을 얻을 수 있음!
🧑🏻💻 인터페이스
우리가 알고있는 인터페이스의 특징은,
: 멤버 변수를 가질 수 없음 (상수만 가질 수 있다)
: 다중상속이 가능하다
인터페이스는 추상클래스와 다르게 일반메서드, 멤버 변수를 일체 가질 수 없었으나
JDK 1.8 이후로 일반 메서드, Static 메서드는 가질 수 있게 되었다.
( 자바 8 이전 : 상수, 추상메서드만 가능 / 자바 8이후 : 일반, static, private Method 추가됨)
public interface MyInterface {
// regular interface methods
default void defaultMethod() {
// default method implementation
}
}
//일반 메소드의 가장 일반적인 사용 목적은 구현 클래스에 점진적으로 추가적인 기능을 제공한다는 것에 있고, 기존의 추상 메소드에 기능을 덧붙이는 목적으로 사용
📍 그래서 둘의 차이는 뭔데!
1. 자바8 이전에는 추상 클래스는 일반 메서드를 가질 수 있고, 인터페이스는 일반 메서드를 가질 수 없었으나
8버전 이후로 일반 메서드를 가질 수 있게 됨
2. 추상화 클래스의 상속(extend)은 OCP 원칙에 따라 자손 클래스는 기능을 상속하고, 필요한 기능을 추가로 구현해야하는것이고
인터페이스의 구현(implements)은 상속관계의 영향을 받지 않고, 전혀 연관관계가 없는 클래스여도 동일한 인터페이스를
구현하도록 하여 같은 기능을 가지고 있음을 보장하는 것
( = 인터페이스는 상속에서 지원하지않는 다중 상속을 지원한다기보다, 전혀 연관관계가 없는 클래스여도 동일한 기능을 구현하게 해줄 때 사용!)
'✏️ Java' 카테고리의 다른 글
| | ES | Elasticsearch가 뭔데! (0) | 2023.01.04 |
|---|---|
| | ETC | ISP (인터페이스 분리 원칙) 뭔데! (0) | 2022.12.20 |
| | ETC | 상속과 인터페이스 (0) | 2022.12.13 |
| | 혼공자 | Chapter 8.1 인터페이스 (0) | 2022.12.12 |
| | ETC | 프로세스와 스레드 (0) | 2022.12.10 |