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


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

  • 2016년 01월 25일에 작성됨

조회수 318


Kakao codefestival banner

2 답변


좋아요
0
싫어요
채택취소하기

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

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

  • 2016년 01월 25일에 작성됨


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

추상 클래스는 아래 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("꽥꽥!!");
        }
    }
  • 2017년 04월 19일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 요즘은 개발은 주로 레일즈 사이트 수정하는 일을 하고, 예전에는 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close