본문 바로가기
프로그래밍/코틀린

K005. 클래스와 객체 한눈에 정리

by K-인사이터 2024. 2. 1.
반응형

안녕하세요

K-IN 입니다.

 

코틀린에 대해서 알아보겠습니다. 

전체 강의 목록은 아래의 링크를 클릭해주세요.

 

K000. 코틀린 시리즈 (연재물)

안녕하세요 K-IN 입니다. 요즘 코틀린을 이용한 개발 프로젝트가 늘어나고 있습니다. 이에, 코틀린에 대해서 상세하게 정리하는 간행물을 제작하고자 합니다. 여기에 있는 링크들은 모두 코틀린

k-in.tistory.com

 

 

코틀린 클래스와 객체 

코틀린에서 클래스는 객체를 생성하기 위한 설계도입니다. 

클래스의 구성요소는 속성과 메소드입니다. 

 

코틀린에서 속성은 마치 함수의 인자처럼 선언이 가능합니다. 

그리고 클래스에 대한 상속을 지원하는데 상속할 클래스에 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 올림. 

반응형