java

인터페이스 vs 추상클래스

주다애 2024. 5. 16. 12:14

(오랜만에 글을 쓴다. 최근에는 노션에 익숙해지느라 티스토리를 좀 간과했다😥) 

 

인터페이스와 추상클래스는 자바로 개발을 하면 한번씩은 들어본 단어일 것이다.
둘의 느낌이 비슷해서 이번에 공부하면서 차이점을 알아보았다.

 

인터페이스와 추상클래스의 차이

인터페이스 : implements(구현)에 초점. 인터페이스에 정의된 메소드들을 각 클래스의 목적에 맞게 기능을 구현하기 위해

추상클래스 : extends(상속)에 초점. 추상 클래스의 기능을 하위 클래스로 확장하기 위해

추상클래스

  1. 중복 멤버 통합. 인터페이스는 static final 상수만 정의할 수 있는 차이가 있다.
  2. 클래스끼리 명확한 계층 구조가 필요할 때 사용 → 클래스와 의미있는 연관관계 구축
  3. 다형성 : 미리 논리적인 클래스 상속 구조를 만들어 놓고 사용

인터페이스

  1. 자유로운 타입 묶음을 통해 추상화를 이루게 한다.
    [ 최상위 추상 클래스 : Creature
    Creature을 상속 받는 추상 클래스 Animal, Fish
    Animal을 상속받는 클래스 Parrot, Tiger, People
    Fish를 상속받는 클래스 Whale
    Swimmable 인터페이스를 구현하는 People, Whale 클래스]

    1. 만약 People과 Whale 클래스에서 수행해야 하는 메소드가 생기면
    2. Creature 클래스에 추상 메소드를 추가해줘야 한다.(추상화 원칙을 따르기 위해)
    3. 근데 그러면 메소드 기능이 필요 없는 Parrot, Tiger에서도 추상 메소드를 구현해야 한다.
    4. 물론 메소드 선언만 하고 아무런 코드를 작성하지 않아도 되지만 이는 객체 지향 설계에 위반되며 좋지 않은 코드가 된다.
    5. 그래서 인터페이스로 Swimmable을 선언하는 것이다.
    abstract class Creature { }
    abstract class Animal extends Creature { }
    interface Swimmable { }
    class Tiger extends Animal { }
    class People extends Animal implements Swimmable { }
    
  2. 다형성 : 필요할 때마다 구현해서 자유롭게 붙였다 땐다.
    1. 부모, 자식 클래스와 같이 논리적으로 관련이 있는 클래스가 아닌 별개의 클래스들을 인터페이스로 타입을 통합하여 형제 관계처럼 다룰 수 있다.
    2. 상속 관계에 얽매이지 않고 구현하면 다형성을 만족할 수 있다.

인터페이스 + 추상클래스

둘을 같이 사용하는 경우도 많다.

추상 클래스의 중복 멤버 통합 + 인터페이스의 다중 상속

Interface - Abstract - Concrete class 패턴

인터페이스는 중복된 필드를 해결해주지 못한다.(static final 상수만 가능하므로)

→ 인터페이스와 구체 클래스 사이에 추상 클래스를 하나 두고 공통되는 부분을 모으자

→ 추상클래스가 인터페이스를 구현하는 것이다.

→ 구체클래스에서 추상클래스를 상속받고, 구현하고자 하는 인터페이스의 메소드 부분을 구체화 해준다.

참고 자료

https://inpa.tistory.com/entry/JAVA-☕-인터페이스-vs-추상클래스-차이점-완벽-이해하기#추상클래스의_다형성_이용_설계

'java' 카테고리의 다른 글

상속과 메모리 구조  (0) 2023.12.21
자바 main 메소드는 왜 static일까?  (0) 2023.12.19
자바 메모리 구조  (0) 2023.12.16
final 키워드(변수, 상수)  (0) 2023.12.14
생성자  (0) 2023.12.12