CS
[CS] 추상클래스, 인터페이스
j9972
2022. 12. 27. 16:32
728x90
추상 클래스
- 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이다.
- 미완성 설계도 라고도 불린다 ( 미완성 → 추상 메서드를 포함한다는 의미 )
- 상속을 위한 클래스이기 때문에 new를 통해 객체를 생성할 수 없다
- class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야한다는 것을 알려주고 선언부만 작성하는 추상메서드를 선언할 수 있습니다.
abstract class 클래스이름 {
...
public abstract void 메서드이름();
}
인터페이스
- 추상 클래스보다 추상화가 높아서, 추상 클래스와 달리 일반 메서드나 멤버 변수를 갖을 수 없다
- 기본 설계도라고 할 수 있습니다
- 다중 상속이 가능하다.
interface 인터페이스이름 {
public static final 상수이름 = 값;
public abstract void 메서드이름();
}
추상 클래스와 인터페이스의 공통점
- 둘다 가지고 있는 추상 메서드를 구현하도록 강제한다
- 인스턴스화 불가능
추상 클래스와 인터페이스의 차이점
둘의 차이점은 사용용도에 집중해서 봐야한다
- 사용의도 차이점
- 추상클래스는 is-a , 인터페이스는 has-a 로 다중상속 가능 여부에 따라 용도를 정한다
- 공통된 기능 사용 여부
각각의 적절한 사용 케이스 정리
추상 클래스
- 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
- 추상 클래스를 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많거나,public이외의 접근자(protected, private) 선언이 필요한 경우
- non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)
인터페이스
- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우.ex) Comparable, Cloneable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없다.
- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.
- 다중상속을 허용하고 싶은 경우