728x90
반응형
추상클래스 vs 인터페이스
공통점
- 설계 명세와 공통의 기능을 구현
차이점
- 추상클래스
- → (상속) → 하위클래스
- 일반적인 객체를 생성하는 방법으로
인스터스화하는 대신 상속받아 사용 (상속을 위해 open키워드를 사용할 필요 없음) - 하위클래스는 상속을 하나만 허용
- 일반 프로퍼티/메서드에는 초기값 저장할 수 있고, abstract 키워드 붙은 추상 프로퍼티/메서드는 하위 클래스에서 재정의해서 사용해야함)
- 상위클래스가 정의한 내용이 불완전하면 상속받은 하위클래스도 그대로 영향을 받음
- 인터페이스
- → (구현) → 구현클래스
- 인터페이스는 클래스가 아니라 상속받아 사용하는것 아니고 구현함
- 상속은 하나면 허용했으나, 인터페이스는 원하는 만큼 구현클래스에 붙여서 필요한 메서드를 구현해내면 됨
- 프로퍼티에 상태정보를 저장할 수 없음
- 상속에 비해 구현클래스와 강한 연관을 갖지 않음(하위클래스에 프로퍼티와 메서드를 전하지 않음)
자바 vs 코틀린
▷ java에서 상속은 extends 구현은 implement로 키워드를 구현하고 있지만, 코틀린에서는 둘다 콜론(:)을 통해 구현함
▷ 코틀린의 경우 기본적으로 인터페이스의 메스드에 구현 내용을 넣을수 없지만, 자바는 불가 (자바8 이후 버전에서는 default 키워드를 통해 구현 내용을 넣을 수 있게 됨)
▷
추상클래스
기본예제
ㄴ
인터페이스
기본예제
ㄴ
여러 인터페이스 구현
ㄴ
인터페이스 위임
ㄴ
추상클래스
추상메서드와 추상클래스
- 추상 메서드는 구현되지 않은 메서드를 의미한다.
- 추상 클래스는 추상 메서드를 가지고 있는 클래스를 의미한다.
- 추상 클래스는 구현 되지 않은 추상 메서드를 가지고 있기 때문에 완벽한 설계도라고 할 수 없다.
- 이 때문에 추상클래스를 통해서는 객체를 생성할 수 없다.
추상클래스의 상속
- 추상 클래스는 완벽한 클래스가 아니기 때문에 객체를 생성할 수 없다.
- 객체를 생성하려면 추상 클래스를 상속받은 클래스를 만들고 추상 메서드를 구현하여 자식 클래스를 통해 객체를 생성해야 한다.
- 추상 클래스의 목적은 자식 클래스에서 메서드를 Overriding을 하게 하기 위한 강제성을 부여하기 위함이다.
인터페이스
- Kotlin은 다중 상속을 지원하지 않는다.
- 이 때문에 자기 타입의 변수나 부모형 타입 변수에만 담을 수 있다.
- 만약 생성된 객체의 주소 값을 다양한 타입에 변수에 담을 수 있도록 한다면 인터페이스를 활용하면 된다.
- 인터페이스는 클래스가 아니므로 객체를 생성할 때 사용할 수 없다.
- 단, 클래스는 한 개 이상의 인터페이스를 구현할 수 있으며 생성된 객체는 구현한 인터페이스형 참조 변수에 담을 수 있다.
- 인터페이스에는 추상 메서드와 일반 메서드 모두를 구현해서 사용할 수 있다.
- 인터페이스는 추상 클래스와 목적이 비슷하지만 하나의 클래스에 여러 인터페이스를 구현할 수 있는 장점을 가지고 있다.
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin 객체지향 (4)] 프로퍼티(지연초기화, 위임)와 정적변수(Companion 객체, 최상위함수, object 객체) (0) | 2022.01.21 |
---|---|
[Kotlin 객체지향 (3)] Data/ Sealed/ Enum /Inner /중첩 Class (0) | 2022.01.21 |
Kotlin 파일 입출력 (io/nio) (0) | 2022.01.13 |
Kotlin 컬렉션(List/Set/Map)과 확장함수/시퀀스 (0) | 2022.01.13 |
Kotlin 제네릭(Generic) (0) | 2022.01.13 |