📝 학습목표 : Class의 사용법과 오버라이딩의 조건에 맞게 활용해보자.
Class
✔ 가장 기본적인 class 구조이다.
✔ 코틀린은 파일명과 클래스명이 일치하지 않아도 되고 여러 클래스를 한 파일 안에 넣을 수 있다.
✔ property도 정의해줄 수 있다.
✔ 객체를 생성할 때 name을 정의하고 싶다면? → 생성자(constructor)를 이용한다.
✔ 이것이 바로 '기본 생성자'이다.
✔ 오른쪽 코드처럼 constructor은 생략 가능하고 val name = name을 val name: String으로 constructor에 쓸 수 있다.
✔ 디폴트값을 줄 수도 있다.
init
✔ 생성자에서 코드블록을 넣기 위해서는 init을 사용한다. init도 주 생성자의 일부기 때문에 생성자와 동시에 코드블록이 돌아간다.
✔ init의 역할
1️⃣ 코틀린에서 init은 클래스의 인스턴스(ex. Human)가 생성될 때 실행되는 코드를 포함할 수 있다.
2️⃣ 주 생성자에 포함된 코드와 함께 사용되어 인스턴스가 생성될 때 모든 초기화 작업을 완료할 수 있다.
3️⃣ 주로 프로퍼티를 초기화하는데 사용된다.
this
주 생성자뿐만 아니라 부 생성자도 여러 개 만들 수 있다.
✔ 부 생성자는 항상 주 생성자의 위임을 받아야 하기 때문에 this를 사용해준다.
✔ constructor가 init 위에 아무리 많이 쓰여 있어도 init은 주 생성자의 일부이기 때문에 init이 먼저 실행되고 constructor가 실행된다.
상속
코틀린의 클래스는 기본적으로 파이널 클래스이다. 상속이 금지된다는 것이다.
그래서 클래스를 선언할 때 특별한 키워드를 사용하여 상속이 가능/불가능하게 할 수 있다.
1. final
파이널 클래스로 선언할 경우 상속과 오버라이딩이 금지된다.
만약 다른 클래스가 FinalClass를 상속하려고 하면 컴파일 오류가 발생할 것이다.
2. open
클래스를 상속 가능하게 하려면 open을 사용해준다.
Korean 클래스를 생성하고 부모 클래스인 Human을 상속한다. 부모 생성자를 불렀으니 당연히 init의 메시지도 실행된다.
상속은 하나밖에 되지 않는다.
상속받은 메서드를 Korean에서 다르게 사용하고 싶다면? → 오버라이딩(overriding)한다.
오버라이딩이란?
부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말한다. 즉, 상속 관계에 있는 클래스 간에 동일한 메서드 이름과 매개변수의 타입 및 개수를 가진 메서드를 하위 클래스에서 새로 구현하는 것을 의미한다.
오버라이딩을 사용하면 자식 클래스에서 필요에 맞게 변경하거나 보완하여 코드의 재사용성을 높이고 유지보수하기 수월하다.
오버라이딩을 수행하기 위한 2가지 조건
1️⃣ 부모-자식 클래스간의 상속 관계가 이루어져 있어야 한다.
2️⃣ 오버라이딩하려는 메서드 이름, 매개변수 타입 및 개수가 동일해야 한다.
singASong()도 사용하고 싶다면 super를 사용해준다.
println("My name is ${name}") 코드를 추가해준다.
이 때 name을 쓸 수 있는 이유는 뭘까?
Human을 상속할 때 constructor에서 name을 받아오는데 디폴트값을 정해줌으로써 파라미터가 없는 생성자를 썼기 때문에 "Anonymous"를 name으로 받아올 수 있는 것이다.
참고 자료⎜https://www.youtube.com/watch?v=IDVnZPjRCYg
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 데이터 클래스(Data Class) (0) | 2024.03.11 |
---|---|
[Kotlin] 람다식 활용법 (0) | 2024.03.09 |
[Kotlin] Nullable & NonNull (0) | 2024.03.04 |
[Kotlin] 반복문 for & while (0) | 2024.03.02 |
[Kotlin] Array & List 특징과 사용법 (0) | 2024.02.29 |