일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- 객체의 동일성
- 코틀린
- 코틀린 제너릭
- kotlin addview
- 프로그래머스 #탐욕법 #큰수만들기 #join #python
- 컬렉션함수
- kotlin listview
- 코틀린 내부 클래스
- programmers # 프로그래머스 #큰수비교 #cmp_to_key()
- add view
- 내용의동일성
- collection function
- kotlin recyclerview
- class
- 코틀린 문자열
- kotlin collection
- lateinit
- 컬렉션 함수
- 코틀린 람다함수
- 카카오 순위검색
- 코틀린 컬렉션함수
- kakao blind
- 코틀린 lateinit
- isNullOrBlank
- 프로그래머스
- 코틀린 중첩클래스
- 코틀린 data class
- 해시
- Kotlin Generic
- Today
- Total
엔지니어 규의 IT 프로그래밍 다이어리
[Kotlin]9. 클래스의 상속 본문
클래스의 상속이 필요한 경우는 두가지가 있다.
첫번째는 기존 클래스가 있을때, 이 클래스를 확장하여 새로운 기능이나 속성을 가진 클래스를 만들어야 할때가 있고,
두번째는 여러가지 클래스를 만들었는데, 이 클래스들의 공통점을 뽑아 코드관리를 쉽게하기 위함이다.
여기서 속성과 함수를 물려주는 쪽을 Super Class, 물려받는 쪽을 Sub Class 라고 한다.
다음 의 애완동물을 관리하는 Animal Class 를 살펴보자.
fun main(){
var a= Animal("별이",5,"개")
var b = Dog("멍이",4)
var c = Cat("냥이",7)
a.introdunce()
b.introdunce()
b.bark()
c.meow()
}
open class Animal(var name: String, var age : Int, var type :String){
fun introdunce(){
println("저는${type} ${name}이고, ${age}살 입니다.")
}
}
class Dog( name: String, age: Int) : Animal (name, age, "개"){
fun bark(){
println("멍멍")
}
}
class Cat(name: String, age: Int) : Animal(name,age,"고양이"){
fun meow(){
println("야옹")
}
}
저는개 별이이고, 5살 입니다. 저는개 멍이이고, 4살 입니다. 멍멍 야옹 |
cs |
open class Animal(var name: String, var age : Int, var type :String)
여기서 class 앞에 open 을 써줘야 Animal class 는 super class 로서, sub class 인 dog, cat 에게 상속을 해줄 수 있다.
open 은 class 가 상속될 수 있도록 class 선언시 붙여줄 수 있는 키워드 이다.
상속을 할때는 두가지 규칙이 있다.
1. 첫번째는 수퍼 클래스에 존재하는 속성과 '같은이름' 의 속성을 가질수 없으며,
2. 두번째는 서브클래스가 생성될 떄는 반드시 수퍼 클래스의 생성자까지 호출이 되어야 한다.
class Dog( name: String, age: Int) : Animal (name, age, "개")
위의 Dog Class 를 만들 때는 생성자에서 이름과 나이를 받지만 var 을 붙이지 않으며 일반 parameter로 받아,
animal class 의 생성자에 직접 넘겨준다.
클래스의 상속을 위해 Dog class 선언후 콜론을 붙이고, 수퍼클래스의 생성자 [: Animal (name, age, "개")] 를 호출 할 수 있게 해준다.
(name, age, "개") 에서 "개" 는 고정된 값으로 넘기게 된다.
constructor(name: String) : this(name,1997)
앞에서 공부한 보조생성자 인 constructor 가 주 생성자를 받아온것과 비슷한 구조이다.
fun main(){
var a= Animal("별이",5,"개")
var b = Dog("멍이",4)
a.introdunce()
b.introdunce()
}
저는개 별이이고, 5살 입니다. 저는개 멍이이고, 4살 입니다. |
여기서 보는 것처럼 Animal class 을 상속받은 Dog class 는 Animal class 와 같은 속성과 기능을 가지게 된다.
또한 아래의 소스코드 처럼 Dog, Cat 만 쓸수 있는 함수를 내부적으로 선언해 줄 수 있다.
이처럼 클래스의 상속은 클래스를 더 구조적으로 다룰 수 있게 해준다는 장점이 있지만,
지나친 상속은 코드를 더 어렵게 만들게 된다.
'프로그래밍 언어 > 코틀린' 카테고리의 다른 글
[Kotlin]11. 프로젝트의 구조 (0) | 2022.05.13 |
---|---|
[Kotlin]10. 오버라이딩, 추상화, 인터페이스 (0) | 2022.05.11 |
[Kotlin]8. 클래스의 생성자 (0) | 2022.05.09 |
[Kotlin]7. 클래스의 기본 구조 (0) | 2022.05.08 |
[Kotlin]6. 흐름제어와 논리 연산자 (0) | 2022.05.04 |