관리 메뉴

Enjoy what you do!

추상 클래스와 인터페이스 본문

여러가지 잡동사니

추상 클래스와 인터페이스

쵸코맛 비비빅 2017. 12. 13. 03:25

공통점 : 두개 다 상속받은 클래스가 그 멤버 메소드들을 반드시! 재정의해줘야 된다.




<추상클래스>


재정의 시에 override 키워드가 꼭 필요하다.(씨샵의 경우이고 자바는 그냥 어노테이션해도되고 안해도되고)


- 추상클래스의 목적은 클래스의 확장이다. 상속을 하여 코드의 재사용을 하면서 꼭 재정의해야하는 메소드(꼭 필요한 메소드?)를 정해놓은 거다.



<인터페이스>


 override 키워드 없이 그냥 정의하면 된다.


-인터페이스의 목적은 기능을 강제하는 것이다. 개발 시 협업에 있어서 굉장히 유용하게 사용된다.

인터페이스가 있으므로 이렇게 개발하라는 가이드라인을 제시할수 있다.

인터페이스를 상속하면 정해진 가이드라인대로 개발하면 되는것이다.

그 인터페이스를 상속하는 클래스만 구현한다면 그 클래스를 인터페이스로 받아서 사용하면 된다.


자바의 경우

클래스의 다중 상속이 불가능하다. (씨플플은 다중상속 가능)

클래스 다중상속을 허용하면 골칫거리가 많기 때문에 안되는걸로 되어있다.

하지만 인터페이스를 쓰면 인터페이스들을 다중 상속할 수 있다.


선택적으로 필요한것만 상속하기!

-> 부모 메소드에 어떤 동작을 추상메소드로 선언하면 자식 메소드는 그 동작을 무조건 오버라이드를 해줘야한다. 무조건 상속해야되는거다.

하지만  우리는 어떤 동작들을 선택적으로 상속하고 싶다.

그럴땐 그 동작들을 인터페이스로 만들고 부모 메소드는 그 인터페이스를 필드로 갖고있는다.

그러면 자식 메소드는 그 인터페이스를 상속한 클래스를 필드에 넣어 사용할수 있다. 그 동작을 사용안하는 자식 메소드는 그 동작을 하는 필드를 비워두면되는거다.





추상클래스 특이한점

클래스를 abstract 로 선언하고 추상 클래스안에 추상 메소드가 한개도 없을수 있다. 컴파일 에러 안난다.

이렇게 쓰는이유는

서브클래스를 생성할 수있고 메소드들을 재정의 안해도되는데 이 수퍼클래스를 단지 인스턴스화 못해도록 막아 놓았을뿐이다.

그냥 단순히 클래스의 인스턴스화 막기위해 이렇게 쓰기도 하나보다.



참고할 만한 사이트 : http://private.tistory.com/20



Comments