안녕하세요
K-IN 입니다.
코틀린에 대해서 알아보겠습니다.
전체 강의 목록은 아래의 링크를 클릭해주세요.
코틀린 클래스와 객체
코틀린에서 클래스는 객체를 생성하기 위한 설계도입니다.
클래스의 구성요소는 속성과 메소드입니다.
코틀린에서 속성은 마치 함수의 인자처럼 선언이 가능합니다.
그리고 클래스에 대한 상속을 지원하는데 상속할 클래스에 open 키워드를 지정하면됩니다.
class Person(val name: String, var age: Int)
open class AnotherPerson(val name: String) {
open fun hello() = "Hello, I am $name"
}
class KoreanPerson(name: String) : AnotherPerson(name) {
override fun hello() = "안녕하세요, 내 이름은 $name "
}
fun main() {
val peter = Person("Peter John", 32)
val robert = AnotherPerson("Downy Robert")
val kin = KoreanPerson("K-IN")
println(peter.name)
println(robert.hello())
println(kin.hello())
}
만약, open 키워드를 지정하지 않은 클래스를 상속하려고 한다면 아래와 같은 에러가 발생합니다.
이 에러를 컴파일 중에 만난다면 open 키워드를 지정하지 않은 클래스를 상속하려다가 에러가 발생한 것이므로 빠르게 코드를 복기하여 수정해주면 됩니다.
- Kotlin: This type is final, so it cannot be inherited from
또한, val, var 키워드를 통해 수정 가능여부를 지정할 수 있습니다.
- 앞서 배운대로 val 은 read-only 이며 초기화 값을 변경할 수 없습니다.
- var 는 mutable 이며 초기화 값을 변경할 수 있습니다.
따라서, 아래의 Person 객체에 대해 name 은 수정 불가능이고 age 는 수정이 가능합니다.
class Person(val name: String, var age: Int)
따라서, 아래와 같이 name 변수를 수정하려고 하면 "Kotlin: Val cannot be reassigned" 에러가 발생합니다.
이는 빌드할 때도 동일한 에러가 발생합니다.
앞서 클래스는 메서드를 선언하고 사용할 수 있다고 말했습니다.
여기에 더하여 get set 을 가진 속성을 추가할 수 있습니다.
class YangBanPerson(var name: String, var surname: String) {
var fullName: String
get() = "$name, $surname"
set(value) {
val (first, rest) = value.split(" ", limit = 2 )
name = first
surname = rest
}
}
fun main() {
val ybp = YangBanPerson("길동", "홍")
println("내이름은 ${ybp.fullName}")
ybp.fullName = "길동 반"
println("내이름은 ${ybp.fullName}")
}
fullName 속성은 할당연산자(assignment)를 통해서 set 접근자(accessor)를 통해 파싱되어 surname 과 name 변수에 각각 대입이됩니다. 그리고 속성에 접근 시 get 접근자(accessor)를 통해 콤마(,)로 구분되는 출력 결과를 프린트하도록 합니다.
이상입니다.
K-IN 올림.
'프로그래밍 > 코틀린' 카테고리의 다른 글
K007. 코틀린 루프(반복분, Loop) 깊게 살펴보기 - For 루프 (0) | 2024.02.02 |
---|---|
K006. 코틀린 제어 흐름 if-else, when 깊게 살펴보기 (0) | 2024.02.02 |
K004. 코틀린 제어흐름, 함수 한눈에 정리 (2) | 2024.02.01 |
K003. 변수, 데이터 타입 및 연산자 한눈에 정리 (0) | 2024.01.31 |
K002. IntelliJ IDEA 코틀린 개발환경 구성 (0) | 2024.01.31 |