[Kotlin] 클래스의 생성자, 상속 설명 & 예제
- Language/Kotlin
- 2021. 2. 1.
728x90
생성자
class Person(var name:String, val birth Year:Int)
새로운 인스턴스를 만들기 위해 호출하는 특수한 함수
-> 생성자를 호출하면 클래스의 인스턴스를 만들어 반환 받을 수 있다.
생성자의 역할
- 인스턴스의 속성을 초기화
- 인스턴스 생성시 구문을 수행
기본생성자
fun main() {
var a = Person("박보영", 1990)
var b = Person("김수미", 1997)
var c = Person("정장수", 1994)
}
class Person(var name: String, val birthYear: Int) {
init {
println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
}
보조생성자
여러 값 겹쳐서 기본 값으로 지정해주고 싶을때 사용
fun main() {
var a = Person("박보영", 1990)
var b = Person("김수미", 1997)
var c = Person("장수", 1994)
println()
var d = Person("A")
var e = Person("B")
var f = Person("C")
}
class Person(var name: String, val birthYear: Int) {
init {
println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
//기본 생성자가 있어야 한다 , 우 -> name , birthYear
//birthYear 고정, 자동으로 넣어준다
constructor(name: String) : this(name, 1997) {
println("보조 생성자가 사용되었습니다.")
}
}
클래스의 상속
상속이 필요한 경우 두가지
- 이미 존재 클래스 확장 -> 새로운 속성이나 함수를 추가한 클래스가 필요할때
- 여러개의 클래스를 만들었는데 클래스의 공통점을 뽑아 코드 관리를 편하게 하기 위해
슈퍼 클래스
속성과 함수를 물려주는 쪽
서브 클래스
물려 받는 쪽
상속의 규칙
- 서브 클래스는 슈퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음
- 서브 클래스가 생성 될 때는 반드시 슈퍼 클래스의 생성자까지 호출되어야 함
클래스의 상속은 코드를 구조화 할 수 있는 장점이 있지만 지나치면 너무 복잡해지므로 적당히 쓸 것
fun main() {
var a = Animal("흰둥이", 5, "개")
var b = Dog("흰둥이", 5)
//같은 값이 된
a.introduce()
b.introduce()
b.bark()
println()
var c = Cat("루이", 1)
c.introduce()
c.meow()
}
//코틀린은 상속금지가 기본이기 때문에 open 붙여줘야 상속 받을 수 있다
open class Animal(var name: String, var age: Int, var type: String) {
//동물의 정보 함수
fun introduce() {
//클래스 자신의 속성임이 확실한 경우는 this 사용하지 않아도 무관
println("저는 ${type} ${name}이고 ${age}살 입니다.")
}
}
//var, val 등으로 붙이면 속성으로 선언되기 때문에 안됨
//type은 공통 값이므로 '개'로 고정
class Dog(name: String, age: Int) : Animal(name, age, "개") {
//Dog만의 함수 추가
fun bark() {
println("멍멍")
}
}
class Cat(name: String, age: Int) : Animal(name, age, "고양이") {
fun meow() {
println("야옹 야옹")
}
}
728x90
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린의 기본 프로젝트 구조 설명 & 예제 (0) | 2021.02.02 |
---|---|
[Kotlin] 오버라이딩, 추상화, 인터페이스 설명 & 예제 (0) | 2021.02.01 |
[Kotlin] 클래스의 기본구조 설명 & 예제 (0) | 2021.01.29 |
[Kotlin] 흐름제어, 논리 연산자 설명 & 예제 (0) | 2021.01.29 |
[Kotlin] 조건문(when) 설명 & 예제 (0) | 2021.01.29 |