인터페이스와 추상 클래스의 구분

인터페이스와 추상 클래스를 어떻게 구분할 수 있습니까?



초보자가 인터페이스와 추상 클래스가 무엇인지 이해하고 다음에 궁금해하는 것은
각각 어떻게 어떻게 구분하면 좋을까?
라는 것이 아닐까 생각합니다.

인터페이스는 사용자를 위해, 추상 클래스는 구현자를 위해


  • 인터페이스는 호출하는 사람을위한 메소드의 API를 정의합니다.
  • 추상 클래스는 아이 클래스를 구현하는 사람을 위해서 일부를 구현한다

  • 단적으로 말하면 이것뿐입니다.

    구체적으로



    폴리모피즘을 사용해 호출하고 싶은 클래스는, 인터페이스를 구현합시다.

    사용하는 측은, 추상 클래스형의 변수는 선언해서는 안됩니다.
    인터페이스 유형으로 변수를 선언합시다.
    AbstractFooBar = new FooBar(); // NG
    IFooBar = new FooBar(); // OK
    

    추상 클래스를 가인수의 형태로 하는 메소드도 정의해서는 안됩니다.
    인터페이스 유형을 지정합시다.
    void fooMethod(AbstractFooBar fooBar); // NG
    void fooMethod(IFooBar fooBar); // OK
    

    보충 추상 클래스로 폴리모피즘 걸고 싶은 경우는?



    그럼, 추상 클래스의 아이 클래스군에 대해서 폴리모피즘 사용하고 싶은 경우는 어떻게 하는 거야?
    라는 의문이 태어날 것 같아서.
    그 경우는, 이하의 느낌으로.



    이렇게 하면, 사용자는 항상 IFooBar 인터페이스 경유로 호출하면 되고,
    IFooBar 인터페이스를 구현하는 사람은
    AbstractFooBar를 확장할지 직접 IFooBar를 구현할지 선택할 수 있습니다.
    모두가 행복해집니다.

    좋은 웹페이지 즐겨찾기