Programming/Kotlin

코틀린(Kotlin) - 클래스(Class)와 프로퍼티(Property)

JunsuKim 2021. 9. 17.
728x90

프로퍼티(Property)

프로퍼티란 필드(변수)와 접근자를 통칭하는 말이다.

읽기 전용으로 사용할 프로퍼티의 선언은 val로 하고, 수정이 가능하도록 사용할 프로퍼티의 선언은 var로 한다.

프로퍼티에는 getter와 setter의 역할을 하는 get(), set() 함수가 내장이 되어 있어 자바보다 간략한 코드를 만들 수 있다.

클래스(Class)

// Kotlin
class Person(val name: String, var isMarried: Boolean) // Kotlin은 public이 기본 가시성이다.
// Java
public class Person {
    private final String name;
    private boolean isMarried;
    
    public Person(String name) {
        this.name = name;
        this. isMarried = isMarried;
    }
    
    public String getName() return this.name;
    
    public void setisMarried(String isMarried) this.isMarried = isMarried;
    public boolean getMarried() return this.isMarried;
}

두 코드를 보면 Java에서는 생성자와 접근자(getter, setter)를 사용하여 다소 긴 코드를 볼 수 있다.

하지만 Kotlin의 한줄 짜리 코드와 완전히 동일한 코드이다.

Kotlin에서는 기본 생성자를 클래스의 이름 옆에 선언할 수 있다. 또한 getter만 제공하는 name 프로퍼티는 val로 선언하고, getter와 setter를 모두 제공하는 isMarried 프로퍼티는 var로 선언한다.

클래스 생성자 오버로드(overload)

기본 생성자를 유지하며, 클래스를 생성할 때 name 프로퍼티만 초기화를 하고 isMarried 프로퍼티는 기본 값으로 설정하는 생성자를 만들고 싶다면 constructor를 통해 생성자 오버로드를 하면 된다.

class Person(name: String, isMarried: Boolean)  {
    init{
        println("${name}의 결혼 유뮤 ${isMarried}")
    }
    constructor(name: String, isMarried: Boolean, text: String) : this(name, isMarried){
        println("${name}의 결혼 유뮤 ${isMarried}는 사실 ${text}이다.")
    }
}

fun main(){
    val person = Person("Person", true, "거짓")
}

이와 같이 기본 생성자가 먼저 출력되고, 후에 오버로딩 된 생성자가 출력이 된다.

파라미터의 기본값 설정

class Person(var name: String, var isMarried: Boolean)

val p0 = Person("David", true)
val p1 = Person("James", false)
val p2 = Person(isMarried = true, name = "John")

fun main() {
    println("${p0.name} ${p0.isMarried}")
    println("${p1.name} ${p1.isMarried}")
    println("${p2.name} ${p2.isMarried}")
}

여기서 p2를 보면 순서가 바뀌었지만 문제가 되지 않았다. 이는 파라미터의 이름을 명시해 주었기 때문이다.

728x90

댓글