본문 바로가기
CS/JAVA

[JAVA] Abstract, Interface

by 두둠칫 2021. 1. 12.

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