본문 바로가기
개발&프로그래밍

[kotlin] 프로퍼티(Properties)

by 재아군 2024. 8. 13.

Kotlin의 프로퍼티

Kotlin에서 프로퍼티는 클래스의 핵심 요소 중 하나입니다.

이 가이드에서는 Kotlin 프로퍼티의 다양한 측면을 상세히 살펴보겠습니다.

 

 

 

 

프로퍼티 선언 (Declaring Properties)

Kotlin에서 프로퍼티는 가변(mutable)과 읽기 전용(read-only) 두 가지로 선언할 수 있습니다:

class Address {
    var name: String = "Holmes, Sherlock" // 가변
    var street: String = "Baker"
    var city: String = "London"
    var state: String? = null
    val zip: String = "123456" // 읽기 전용
}

 

프로퍼티를 사용하려면 단순히 이름으로 참조하면 됩니다:

fun copyAddress(address: Address): Address {
    val result = Address() // Kotlin에는 'new' 키워드가 없습니다
    result.name = address.name // 접근자가 호출됩니다
    result.street = address.street
    // ...
    return result
}

 

게터와 세터 (Getters and Setters)

프로퍼티 선언의 전체 구문은 다음과 같습니다:

var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

 

초기화자, 게터, 세터는 선택사항입니다. 프로퍼티 타입은 초기화자나 게터의 반환 타입에서 유추할 수 있는 경우 생략할 수 있습니다:

var initialized = 1 // Int 타입, 기본 게터와 세터
val simple: Int? // Int 타입, 기본 게터, 생성자에서 초기화해야 함
val inferredType = 1 // Int 타입과 기본 게터

 

커스텀 접근자를 정의할 수 있습니다:

class Rectangle(val width: Int, val height: Int) {
    val area: Int
        get() = this.width * this.height
}

 

세터도 커스텀으로 정의할 수 있습니다:

var stringRepresentation: String
    get() = this.toString()
    set(value) {
        setDataFromString(value) // 문자열을 파싱하여 다른 프로퍼티에 값 할당
    }

 

 

백킹 필드 (Backing Fields)

Kotlin에서 필드는 프로퍼티의 값을 메모리에 저장하기 위해서만 사용됩니다. 필드를 직접 선언할 수는 없지만, 프로퍼티가 백킹 필드를 필요로 할 때 Kotlin이 자동으로 제공합니다:

var counter = 0 // 초기화자가 백킹 필드에 직접 할당
    set(value) {
        if (value >= 0)
            field = value
    }

 

백킹 프로퍼티 (Backing Properties)

암시적 백킹 필드 스킴에 맞지 않는 작업을 하고 싶다면, 백킹 프로퍼티를 사용할 수 있습니다:

private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
    get() {
        if (_table == null) {
            _table = HashMap() // 타입 매개변수가 추론됨
        }
        return _table ?: throw AssertionError("Set to null by another thread")
    }

 

컴파일 타임 상수 (Compile-Time Constants)

컴파일 시점에 값을 알 수 있는 읽기 전용 프로퍼티는 const 수식어로 표시할 수 있습니다:

const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"

@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }

 

지연 초기화 프로퍼티와 변수 (Late-Initialized Properties and Variables)

널이 될 수 없는 타입의 프로퍼티를 생성자에서 초기화하기 어려운 경우, lateinit 수식어를 사용할 수 있습니다:

public class MyTest {
    lateinit var subject: TestSubject

    @SetUp fun setup() {
        subject = TestSubject()
    }

    @Test fun test() {
        subject.method()  // 직접 참조 가능
    }
}

 

프로퍼티 오버라이딩 (Overriding Properties)

프로퍼티 오버라이딩에 대한 자세한 내용은 "Overriding properties" 섹션을 참조하세요.

 

위임된 프로퍼티 (Delegated Properties)

프로퍼티 위임을 사용하면 공통적인 프로퍼티 패턴(예: 지연 값, 맵에서 키로 읽기 등)을 라이브러리로 구현할 수 있습니다.

 

 

Kotlin의 프로퍼티 시스템은 강력하고 유연합니다. 기본 게터와 세터를 제공하면서도 필요에 따라 커스텀 접근자를 정의할 수 있어, 다양한 사용 사례에 대응할 수 있습니다. 백킹 필드와 백킹 프로퍼티를 통해 세밀한 제어가 가능하며, 지연 초기화와 위임된 프로퍼티 같은 고급 기능을 통해 복잡한 시나리오도 처리할 수 있습니다.

 

이러한 기능들을 적절히 활용하면 더 안전하고 표현력 있는 코드를 작성할 수 있으며, 특히 Java에서 흔히 볼 수 있는 boilerplate 코드를 크게 줄일 수 있습니다.

 

이 블로그의 다른글 : 

2024.08.10 - [개발&프로그래밍] - [Kotlin] 조건문과 반복문

 

[Kotlin] 조건문과 반복문

Kotlin의 조건문과 반복문Kotlin은 다양한 조건문과 반복문을 제공하여 프로그래머가 효율적이고 읽기 쉬운 코드를 작성할 수 있게 합니다. 이 가이드에서는 Kotlin의 주요 제어 흐름 구조를 살펴보

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [kotlin] 타입 체크와 캐스팅

 

[kotlin] 타입 체크와 캐스팅

Kotlin의 타입 체크와 캐스팅Kotlin에서 타입 체크와 캐스팅은 객체 지향 프로그래밍의 핵심 기능입니다. 이 가이드에서는 Kotlin의 타입 체크와 캐스팅 기능을 모든 코드 예제와 함께 상세히 살펴보

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [Kotlin] 숫자 타입과 연산 가이드

 

[Kotlin] 숫자 타입과 연산 가이드

Kotlin의 숫자 타입과 연산 가이드Kotlin에서 숫자를 다루는 방법과 관련된 다양한 개념을 살펴봅니다.  정수 타입 (Integer types)Kotlin은 숫자를 표현하기 위한 내장 타입 세트를 제공합니다. 정수의

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [kotlin] 코딩 컨벤션 - lambdas, Trailing commas

 

[kotlin] 코딩 컨벤션 - lambdas, Trailing commas

Kotlin 코딩 컨벤션 가이드Kotlin을 사용하여 더 깔끔하고 일관된 코드를 작성하기 위한 고급 코딩 컨벤션을 소개합니다.아래글은 공식 홈페이지를 참고하였습니다.https://kotlinlang.org/docs/coding-convent

observerlife.tistory.com

2024.08.09 - [개발&프로그래밍] - [kotlin] 코딩 컨벤션 (coding conventions)

 

[kotlin] 코딩 컨벤션 (coding conventions)

Kotlin 코딩 컨벤션 가이드 Kotlin 프로그래밍 언어를 사용할 때 따라야 할 코딩 컨벤션에 대한 종합적인 가이드입니다.이 가이드라인을 따르면 코드의 일관성과 가독성을 높일 수 있습니다. 이

observerlife.tistory.com

2024.08.09 - [개발&프로그래밍] - [kotlin] 자주 사용되는 관용구(idiom) 모음

 

[kotlin] 자주 사용되는 관용구(idiom) 모음

이 글은 Kotlin 프로그래밍 언어에서 자주 사용되는 관용구(idiom)들의 모음입니다.각 관용구에 대한 설명과 예제 코드를 함께 설명합니다.공식 홈페이지 kotlinlang.org의 내용을 참고합

observerlife.tistory.com

2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 8가지 핵심 문법

 

[kotlin] 입문시 알아야 할 8가지 핵심 문법

Kotlin의 주요 문법 특징들을 간략히 정리한 것입니다.각 항목은 Kotlin의 간결하고 표현력 있는 코드 작성을 지원하는 특징들을 보여줍니다. 아래 문서는 kotlinlang.org 공식 홈페이지를 참조합니다.

observerlife.tistory.com

2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 7가지 핵심 문법

 

[kotlin] 입문시 알아야 할 7가지 핵심 문법

Kotlin의 기본적인 문법 요소들을 간략하게 설명하고 있습니다.각 항목은 Kotlin 프로그래밍의 기초를 이해하는 데 중요한 개념들을 포함하고 있습니다. 아래 문서는 kotlinlang.org 공식 홈페이지를

observerlife.tistory.com

 


Kotlin, 프로퍼티, 게터, 세터, 백킹필드, 지연초기화, 컴파일타임상수, 프로퍼티오버라이딩, 위임된프로퍼티, 안드로이드개발, 서버개발, 코틀린문법, 객체지향프로그래밍, 캡슐화, NullSafety

'개발&프로그래밍' 카테고리의 다른 글

[kotlin] 가시성 수정자(Visibility modifiers)  (0) 2024.08.13
[kotlin] 인터페이스(interface)  (0) 2024.08.13
[kotlin] 상속(inheritance)  (0) 2024.08.13
[kotlin] 클래스  (0) 2024.08.12
[kotlin] Exceptions  (0) 2024.08.12

댓글