추상 클래스 대신에 Interface를 쓸때가 있을까요? 그리고 그 반대의 경우도 있을까요?

조회수 3474회

일반적인 OOP질문인데요. Interface랑 추상클래스의 기본적인 사용에대한 일반적인 비교를 하고싶어요. 인터페이스를 사용하고자할때랑 추상클래스를 사용하고자할때의 차이를 알고싶어요!

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    추상클래스는 상태나 기능을 공유할수있습니다. 그리고 인터페이스는 상태또는 기능을 제공하는 역할만 합니다. 무슨 말이냐면 추상클래스는 abstract 메소드가 하나라도 있으면 추상 클래스입니다. 그래서 추상클래스에서 메소드를 구현하는 것이 가능합니다. 반면 인터페이스는 구현 없이 형태만 제공하고 구현은 상속받는 클래스에서 해야합니다.

    좋은 추상 클래스는 기능이나 상태를 공유할 수 있기때문에 다시 작성해야하는 코드의 양을 줄일 수 있습니다.

  • 불고기 님의 설명을 예로 들어보면

    추상 클래스는 아래 Bird처럼 Method를 미리 구현해 놓을 수 있지만,

    abstract class Bird{
            abstract void sing();
    
            void fly(){
                System.out.println("날다.");
            }
        }
    
    class Duck extends Bird{
            @Override
            void sing() {
                System.out.println("꽥꽥!!");
            }
        }
    

    이를 interface로 하려면 모든 구현은 Duck에서 해 주어야 합니다. fly와 같은 공통 method를 미리 구현해 놓지 못하는 점이 다르네요.

    interface Bird{
            void sing();
            void fly();
        }
    
    class Duck implements Bird{
            void fly(){
                System.out.println("날다.");
            }
    
            void sing() {
                System.out.println("꽥꽥!!");
            }
        }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)