19. 추상 클래스

2022. 3. 8. 11:50[Android APP] feat. Kotlin/Kotlin 언어 기초

추상클래스(Abstract Class)

 

추상클래스란 아직 구현되지 않고 선언만 된 추상메서드를 가지고 있는 클래스이다.

추상클래스는 메서드가 구현되지 않았기 때문에 이 클래스를 직접 객체로 만들 수는 없고 무조건 상속을 받는 자식클래스 (SubClass) 가 있어야 한다. 추상클래스는 상속을 통해 생성될 자식클래스에서 메서드 오버라이딩에 강제성을 부여하기 위해 사용된다.

 

abstract class 클래스명()

============================================================================

아래 예제를 보자.

Mammal이라는 추상 클래스를 만들었다.

추상 클래스에 들어가는 프로퍼티와 메소드는 반드시 자식 클래스에서 상속을 받아야한다.

참고로 추상 클래스에 있는 추상 메소드에는 함수 Body가 없이 Head만 짤 수 있다.

 

다음은 Mammal 클래스를 받은 자식 Human 클래스에 생성자를 보면 

override var maxSpeed: Double

을 통해 추상 클래스의 프로퍼티를 가져온 것을 알 수 있다.

 

이렇게 run(), breath() 추상 메소드도 override를 통해 불러온다.

 

또 다른 예시, Elephant도 같은 방식으로 만든다.

 

이제 메인 함수에서 실행시켜보자.

각각 맞는 파라미터 값을 넣어준 후 human과 elephant 클래스에 있는 함수를 불러오니 정상적으로 작동한다.

 

============================================================================

자 여기서 만약 상속받은 클래스가 아닌 추상 클래스 Mammal의 객체를 생성한다면 어떻게 될까?

Cannot create an instance of an abstract class

추상 클래스의 인스턴스를 만들 수 없습니다. 라고 에러 코드가 뜨게 된다.

즉, 추상 클래스는 자체에 대한 인스턴스는 만들 수 없지만 추상 클래스를 상속받은 클래스에서는 만들 수 있다.

============================================================================

인터페이스와의 차이점

 

1. 인터페이스는 여러개를 구현할 수 있지만 추상 클래스는 하나만 구현할 수 있다.

 

2. 인터페이스는 생성자가 존재하지 않지만, 추상 클래스는 클래스이기 때문에 생성자가 존재한다.

 

3. 인터페이스는 필드를 저장하지 못한다. 추상 클래스는 인터페이스가 추가할 수 있는 건 모두 할 수 있고, 필드와 생성자도 추가할 수 있다.

반응형

'[Android APP] feat. Kotlin > Kotlin 언어 기초' 카테고리의 다른 글

21. 컬렉션의 개요  (0) 2022.03.09
20. 형 변환  (0) 2022.03.08
18. 인터페이스  (0) 2022.03.07
17. 상속과 오버라이딩  (0) 2022.03.07
16. lateinit과 게터, 세터(getter, setter)  (0) 2022.03.07