1. Abstract
1) 목적 : 다른 class간에 공통적으로 사용하는 기능 효율적으로 재사용하기 위해
2) 형태 : public abstract return_type method_name();
3) abstract class 구성요소
- 일반 variable(instance varible)
- 일반 method(instance method)
- 생성자
- abstract method
* 4가지 다 있어도 되고 없어도 된다.
cf) abstract method를 포함하는 class는 abstract 선언을 해주어야 한다.
4) 특징
- 자식 class에서 반드시 abstract method를 override 해야한다. 이를 통해 자식 class에서 특정 method를 강제하면서 통일성과 일관성을 갖는다.
- abstract class는 인스턴스 생성이 불가능하다.
- 다형성이 적용 가능하다.
// if Cat extends abstract class Pet
Pet pet = new Cat(); // T
Pet pet = new Pet(); // error : abstract class Pet는 인스턴스 생성 불가능
2. Interface
1) 목적
같은 abstract class를 상속받는 자식들 중 일부만 공통으로 사용하는 method가 있는 경우 interface를 활용한다.
// if Cat, Bird extends abstract class Pet
public interface Flyer{
public abstract void fly();
}
public Cat extends Pet { ... }
public Bird extends Pet implement Flyer {
...
@Overrid
public void fly(){
...
}
...
}
* Cat, Dog 등의 Pet은 날 필요가 없다. Bird 등의 Pet은 공통적으로 날 수 있다.
* Interface의 abstract method는 반드시 Override 해야 한다.
2) 특징
- Interface는 다중 Implement 가능
- Interface 간에는 다중 상속 가능
3) 활용
Interface를 사용하기 위해 임의의 class를 만든다.
그리고 해당 interface의 method를 사용하기 위해 위에서 만든 임의의 class 인스턴스를 생성한다.
public interface A { ... }
class AImp implements A {
@Override
public abstract void method(){ ... };
}
public class Main{
public static void main(...){
AImp x = new AImp();
x.method();
...
}
}
3. Abstract vs Interface
Abstract | Interface | |
형태 | public abstract class name { } | public interface name { } |
구성요소 | - instance varible - 생성자 - instance method - abstract method |
- 상수 - abstract method - default method - static method |
특징 | - 인스턴스 생성불가 - 단일 상속만 가능 |
- 인스턴스 생성불가 - 하나의 클래스가 다중 implement 가능 - interface 간 다중 상속 가능 |
목적 | - 하위 class에서 특정 method만 사용하도록 강제 : 통일성, 일관성 획득 - 일반 class의 상속 장점 제공 : 공통 기능 재사용 |
- 하위 class에서 특정 method만 사용하도록 강제 : 통일성, 일관성 획득 - class 간 의존성 감소 |
'CS > JAVA' 카테고리의 다른 글
[JAVA] Collection API (0) | 2021.01.14 |
---|---|
[JAVA] Anonymous class, Lambda Expression, Generics (0) | 2021.01.14 |
[JAVA] 상속, 다형성, 캡슐화 (0) | 2021.01.12 |
[JAVA] 데이터의 메모리 할당 순서 (0) | 2021.01.12 |
[JAVA] 변수와 메서드 (0) | 2020.10.30 |