멘토링

자바에서 인터페이스와 abstract 클래스

langsamUndStetig 2022. 6. 28. 18:28


인터페이스는 언제 사용할까?

  • 특정 참조자료형의 메서드와 필드에 대한 가이드를 만들고 싶을 때. (다른 개발자들과 의사소통)
  •  다중 상속을 하고 싶을 때 (클래스들은 자바에서 다중상속이 되지 않는다.) 
  • 완전한 추상화와 약한 연결 (인터페이스를 매개변수로 사용할 경우 인터페이스를 구현한 클래스의 변화가 있더라도 크게 수정할 내용이 없다.) 

abstract 클래스와 인터페이스의 차이는?

  • 인터페이스는 모든 멤버들이 public인 반면에, abstract 클래스는 일반 클래스에서 abstract 메소드가 하나만 있더라도
    abstract 클래스로 사용된다.

인터페이스화, 추상 클래스화 할 때 선택 기준은?

- 추상클래스
-- 상속 개념을 사용할 때
-- 접근제어자가 public이 아닌 멤버들을 선언할 때
-- 미래에 새로운 메서드를 추가할 때 (인터페이스의 경우엔 그것을 구현한 모든 클래스에서 수정해야함.)
-- 다양한 버전을 다룰때 (추상 클래스의 경우, 추상 클래스만 바꿔주면, 상속받은 클래스들도 모두 자동 업데이트)
-- 기존의 코드를 파괴하지 않고, 내용 변경 가능.
-- 공통적으로 상속받는 기능을 제공하고 싶을 때 사용

- 인터페이스
-- 다양하고 덜 관련있는 클래스들에게 공통된 기능을 제공하고 싶을 때
-- API가 한동안 변하지 않을 때
-- 다중 상속 기능이 필요할 때
-- 작고 간결한 기능을 디자인할 때.