ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터페이스 vs 추상클래스
    Java 2023. 3. 18. 15:57

     

    - Abstract Class

    : 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스 (설계도)

    • 상속을 위한 클래스 이기 때문에 따로 객체 생성이 불가함
    • 하위 클래스들의 공통점을 모아 추상화한 클래스
    • 다중 상속 불가! 단일 상속만 가능하다.
    •  자신의 기능들을 하위 클래스로 확장
    • extends

    !! 중복 멤버 통합 !!

     

    - Interface

    : 다중 구현 및 다중 상속이 가능하다.

     

    • 구체적인 메서드를 가질수 있음.
    • 상속에 얽매이지 않고 공통 기능이 필요할때 마다 추상 메서드를 정의하여
    • 이를 구현하여 자유롭게 사용가능함.
    • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장
    • implements

     

    interface Animal { public abstract void cry(); }
    
     
    
    class Cat implements Animal {
    
        public void cry() {
    
            System.out.println("냐옹냐옹!");
    
        }
    
    }
    
     
    
    class Dog implements Animal {
    
        public void cry() {
    
            System.out.println("멍멍!");
    
        }
    
    }
    
     
    
    public class Polymorphism03 {
    
        public static void main(String[] args) {
    
            Cat c = new Cat();
    
            Dog d = new Dog();
    
     
    
            c.cry();
    
            d.cry();
    
        }
    
    }

     

    인터페이스에 정의된 메서드를 각 클래스의 목적에 맞게 기능을 구현

     

    꼭 필요한 기능만을 추상 클래스로 구현!

    나머지는 인터페이스로 -> 인터페이스 분리 원칙

    ex) 새 라는 추상클래스에서 날기()와 울기()라는 메서드가 있다면,

    펭귄 이라는 클래스에 인터페이스 분리원칙을 적용하기 위해 날기() 를 인터페이스로, 바꿀수 있음.

    울기()는 모든 새의 공통된 메서드이고 날기()의 경우는 펭귄에게는 적용되지 않기 때문!

     

     

     

    인터페이스를 사용할 때 ->

     

    • 어플리케이션의 기능을 정의해야 하지만 그 구현 방식이나 대상에 대해 추상화 할 때
    • 서로 관련성이 없는 클래스들을 묶어 주고 싶을때 (형제 관계)
    • 다중 상속(구현)을 통한 추상화 설계를 해야할때
    • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우
    • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용

     

    추상 클래스를 사용할 때 ->

     

    • 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복 멤버 통합을 할때
    • 멤버에 public 이외의 접근자(protected, private) 선언이 필요한 경우
    • non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)
    • 요구사항과 함께 구현 세부 정보의 일부 기능만 지정했을 때
    • 하위 클래스가 오버라이드하여 재정의하는 기능들을 공유하기 위한 상속 개념을 사용할 때
    • 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야할 경우 사용한다.

     

     

     

     

     

    https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-vs-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

    댓글

Designed by Tistory.