본문 바로가기

프로그래밍언어/Kotlin

[Kotlin] 튜토리얼 따라가기 (4) (Classes)

반응형

1. Classes

코틀린은 Class Object 를 통해 객체지향을 제공한다. 클래스 선언에는 다음과 같이 Class 키워드를 사용하여 선언한다.

 

class Customer

2. Properties

class Contact(val id: Int, var email: String)

class Contact(val id: Int, var email: String = "example@gmail.com") {
    val category: String = "work"
}

 

클래스 객체는 프로퍼티를 가진다. 프로퍼티는 클래스 선언시 선언부의 () 괄호 또는 구현부의 {} 괄호에 선언할 수 있다. 선언부의 프로퍼티는 함수에서와 같이 기본값을 정의할 수 있다. 프로퍼티는 var val 모두로 선언할 수 있는데, 런타임에 변경되는 값이 아니라면 val 로 선언하는 것을 추천한다.

 

※ 선언부에 선언되는 프로퍼티는 var 또는 val 없이 선언할 수 있다. 그러나 이렇게 선언된 프로퍼티는 클래스 인스턴스를 생성한 후에는 접근할 수 없다.

2. Create Instance

클래스 인스턴스를 생성할 때는 클래스의 생성자를 사용한다. 코틀린은 클래스의 선언부, 헤더에 선언된 파라미터를 통한 생성자를 자동으로 생성한다.

 

class Contact(val id: Int, var email: String)

fun main() {
    val contact = Contact(1, "mary@gmail.com")
}

 

위의 예제는 Contact 클래스의 기본 생성자로 Contact 인스턴스를 생성한다. 생성자는 Contact 클래스의 헤더와 같이 프로퍼티 id, email 을 입력받는다.

3. Access properties

class Contact(val id: Int, var email: String)

fun main() {
    val contact = Contact(1, "mary@gmail.com")
   
    // Prints the value of the property: email
    println(contact.email)          
    // mary@gmail.com

    // Updates the value of the property: email
    contact.email = "jane@gmail.com"
   
    // Prints the new value of the property: email
    println(contact.email)          
    // jane@gmail.com
}

클래스 인스턴스의 프로퍼티에 접근하기 위해서는 인스턴스 뒤에 마침표 '.' 를 붙인뒤 프로퍼티의 이름을 써서 접근한다.

4. Member functions

class Contact(val id: Int, var email: String) {
    fun printId() {
        println(id)
    }
}

fun main() {
    val contact = Contact(1, "mary@gmail.com")
    // Calls member function printId()
    contact.printId()          
    // 1
}

 

클래스의 프로퍼티와 같이 특정 행동을 클래스의 멤버 함수로 선언할 수 있다. 위의 예제와 같이 Contact 클래스의 구현부, 클래스 바디에 printId() 라는 함수를 정의한다. 해당 함수는 프로퍼티에 접근할 때와 같이 마침표 '.' 를 사용하여 호출할 수 있다.

5. Data classes

코틀린은 데이터를 저장을 위한 data classes 라는 기능을 제공한다. data classes 는 일반 class 와 기본적으로 동일하지만 인스턴스를 가독성있게 출력하거나 인스턴스 간의 비교, 복사 등을 용이하게 하는 함수를 제공하여 boilerplate code 로 시간이 낭비되지 않도록 해준다.

 

data class User(val name: String, val id: Int)

 

data class 를 선언하기 위해서는 class 선언부 앞에 data 를 붙여준다. data class 가 제공하는 기능 중 대표적인 기능들은 아래 표와 같다.

 

[Reference]

- https://kotlinlang.org/docs/kotlin-tour-classes.html

 

Classes | Kotlin

 

kotlinlang.org

 

반응형