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
'프로그래밍언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 영역 함수 (Scope functions) (0) | 2024.08.22 |
---|---|
[Kotlin] 튜토리얼 따라가기 (5) (Null safety) (0) | 2024.07.31 |
[Kotlin] 튜토리얼 따라가기 (3) (Functions) (1) | 2024.07.26 |
[Kotlin] 튜토리얼 따라가기 (2) (Control flow) (0) | 2024.07.25 |
[Kotlin] 튜토리얼 따라가기 (1) (Hello World, Variable, Collection) (2) | 2024.07.23 |