티스토리 뷰

Java

추상클래스 vs 인터페이스

snail voyager 2020. 4. 27. 19:54
728x90
반응형

추상클래스 (Abstract Class)

  • 추상메서드가 없거나 선언된 클래스
  • 인스턴스를 생성할 수 없다.
  • 자손클래스마다 다르게 구현될 것으로 예상되는 메서드를 추상메서드 선언
  • 추상클래스를 상속받는 자손클래스에서 추상메서드를 구현
  • 단일상속
  • is a kind of

인터페이스 (Interface)

  • 추상메서드, 상수, defalut method만 선언 (생성자 X, 접근제한자 private, protected X)
  • 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적
  • 정해진 목적에 맞게 구현하도록 표준을 제시하는데 사용
  • 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현
  • 다중상속
  • can do this

인터페이스를 이용한 다형성

  • 인터페이스 타입의 변수로 자손클래스의 인스턴스를 참조할 수 있다.
    List list = ArrayList<>();
  • 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.
    public void method(List list){}
  • 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
    public List method(){
      return new ArrayList<>();
    }

default Method

  • 인터페이스에서 구현할 수 있는 메서드
  • 구현 클래스에서 디폴트 메서드를 상속받거나 오버라이딩 가능
  • 인터페이스가 변경되면 모든 구현 클래스도 변경해야 했던 문제를 해결
public default int method(int a, int b){
    return a+b;
}

static Method

  • 인터페이스를 이용하여 간단한 기능을 가지는 유틸리티성 메서드
  • 인터페이스명.메소드 형식으로 호출
  • 구현 클래스에서 오버라이딩 불가능
public static int method(int a, int b){
    return a*b;
}

인터페이스의 장점

  1. 개발시간을 단축시킬 수 있다.
  2. 표준화가 가능하다.
  3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
  4. 독립적인 프로그래밍이 가능하다.
728x90
반응형

'Java' 카테고리의 다른 글

추상클래스 - 템플릿 메서드  (0) 2020.09.03
에러 vs 예외  (0) 2020.05.19
[Java] Reflection  (0) 2020.04.01
Multi Threads Race Condition  (0) 2020.03.19
Arrays binarySearch() vs HashMap  (0) 2020.02.14
반응형
300x250