코틀린 공부를 계속하다 보니 예전에 자바 공부하던 시절이 생각난다. 오버로딩, 오버라이딩 등 무슨 말인지 모르는 것들 투성이 었는데 ㅎㅎ 그래도 지금 코틀린 글을 작성할 때는 이러한 개념들이 그리 어렵게 느껴지지는 않는다.
잘난 척은 이만하고...!!
오늘은 오버라이딩 (Overriding) 이라는 것에 대해 공부해 볼 것이다.
공부하기전에 !! Overriding을 이해하기 위해서는 상속의 개념을 좀 잘 알고 올 필요가 있다.
https://devkingdom.tistory.com/51
기억이 잘 안나면 !! 위의 링크를 통해 공부를 좀 하고 오자.
코틀린에서 모든 객체는 부모클래스 (Super Class) 타입의 참조 변수에 자식 (Sub Class) 객체를 담을 수 있다.
이때 해당 참조 변수는 부모클래스에 정의되어 있는 기능만 사용가능하다는 것을 알아두자 !
아래 예를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
fun main(args : Array<String>) {
var temp1 = SubClass()
temp1.superMethod()
temp1.subMethod()
var temp2 : SuperClass = SubClass()
temp2.superMethod()
//사용불가
//temp2.subMethod()
}
open class SuperClass {
fun superMethod() {
println("슈퍼클래스의 메소드 입니다.")
}
}
class SubClass : SuperClass() {
fun subMethod() {
println("서브클래스의 메소드 입니다.")
}
}
|
temp1 의 경우 별다른 타입설정을 해주지 않았기 때문에 타입이 SubClass 이다.
따라서 자신이 가지고있는 subMethod() 뿐만아니라 부모 클래스인 SuperClass의 superMethod() 도 사용할 수가 있다.
위의 소스를 돌려보면
이런 결과가 나온다.
temp2 는 SuperClass를 별도의 타입으로 지정해줬다. 이때는 SuperClass의 superMethod() 만 사용할 수가 있다.
아니 그러면 ...!! 그냥 SubClass를 사용하면 되지 ... 왜 이렇게 불편하게 SuperClass를 타입으로 지정하느냐고 물어보시는 분들이 있을것이다. ㅎㅎ
바로 오늘 배울 Overriding 때문이다.
오버라이딩 (Overriding)
오버라이딩은 객체지향 언어에서 굉장히 많이 쓰는 것이니 꼼꼼하게 공부하길 권한다.
부모클래스 (Super Class) 의 메서드를 자식클래스(Super Class) 에서 재정의( 수정 or 추가) 해서 사용할 수 있는데 이걸 오버라이딩(Overriding)이라고 부른다.
이 오버라이딩을 사용해 재정의를 해놨다면 부모클래스 타입의 참조변수에서 메서드를 콜하면 자식클래스에서 재정의한 메서드가 호출된다.
정말 이해하기 쉽게 예제를 한번 짜봤다.
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
|
fun main(args : Array<String>) {
var person : Animal = Person()
}
open class Animal {
open fun walk() {
println("네발로 걷기!")
}
open fun eat() {
println("먹기!")
}
}
open class Person : Animal() {
//walk() 재정의(수정)
override fun walk() {
println("두발로 걷기!")
}
//eat() 재정의(추가)
override fun eat() {
print("요리를 해서 ")
super.eat()
}
}
|
위의 예제를 보면 Animal 이라는 부모클래스와 Person 이라는 자식클래스가 존재한다.
Animal 은 네발로 걷고, 그냥 먹는다.
Person 은 두발로 걷고, 요리를 해서 먹는다.
이렇게 Animal 에 있는 기능은 Person에서 재정의해서 사용될 수 있다. 이 소스를 돌려보면
이렇게 재정의 된 메서드의 결과가 나온다. 쉽지??
자 Overriding은 이정도 공부하자 !! 그럼 오늘도 즐거운 코딩하자 !! ㅎㅎ
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 뽀개기 - data 키워드를 사용해서 클래스 만들기 (2) | 2019.12.05 |
---|---|
[Kotlin] 코틀린 뽀개기 - 추상클래스 & 인터페이스 (1) | 2019.12.02 |
[Kotlin] 코틀린 뽀개기 - 객체지향의 핵심 '캡슐화' (2) | 2019.12.01 |
[Kotlin] 코틀린 뽀개기 - 코틀린에서 상속(Inherit)을 사용해보자 (0) | 2019.12.01 |
[Kotlin] 코틀린 뽀개기 - 객체지향 언어인 코틀린! (3) | 2019.11.27 |
댓글