2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

코틀린에서 확장 프로퍼티는 어떻게 정의하나요?

_____
Q: 코틀린에서 확장 프로퍼티란 무엇인가요?
A: 확장 프로퍼티는 기존 클래스에 새로운 프로퍼티를 추가하는 기능입니다. 직접 해당 클래스의 소스 코드를 수정하지 않고도 프로퍼티처럼 접근할 수 있는 멤버를 추가할 수 있습니다.

Q: 확장 프로퍼티는 어떻게 정의하나요?
A: 확장 프로퍼티는 클래스명 뒤에 점(.)을 붙이고 프로퍼티 이름을 정의하며 `get()` 혹은 `set()` 접근자를 구현하여 작성합니다. 예를 들어:
```kotlin
val String.firstChar: Char
get() = this[0]
```

Q: 확장 프로퍼티에 필드를 저장할 수 있나요?
A: 아니요, 확장 프로퍼티는 클래스에 실제로 필드를 추가할 수 없으며, `get()`과 `set()` 메서드를 통해 계산 프로퍼티로 구현됩니다.
Q: var 타입의 확장 프로퍼티를 만들 수 있나요?
A: 가능합니다. 다만 `var` 확장 프로퍼티는 반드시 `get()`과 `set()` 모두를 구현해야 합니다. 예를 들어:
```kotlin
var StringBuilder.lastChar: Char
get() = this[length - 1]
set(value) { this.setCharAt(length - 1, value) }
```

Q: 확장 프로퍼티는 언제 유용한가요?
A: 기존 클래스에 별도의 기능이나 편리한 속성을 추가하고 싶을 때, 예를 들어 표준 라이브러리 타입에 사용자 편의 프로퍼티를 추가할 때 매우 유용합니다.

Q: 확장 프로퍼티의 한계는 무엇인가요?
A: 확장 프로퍼티는 본래 클래스의 상태를 변경하는 필드를 가질 수 없고, 오직 계산된 값을 반환하거나 설정하는 용도로만 활용할 수 있습니다. 따라서 필드 저장이 필요한 경우는 별도 저장 로직이나 클래스를 상속해야 합니다.
코틀린에서 확장 프로퍼티(Extension Property)는 기존 클래스에 새로운 프로퍼티를 추가하는 기능을 제공합니다.

확장 프로퍼티는 기존 클래스의 기능을 확장할 수 있지만, 실제로 클래스의 구조를 변경하지는 않습니다.

이는 주로 코드의 가독성을 높이고, 특정 클래스에 대한 추가적인 기능을 제공하는 데 유용합니다.

확장 프로퍼티 정의하기 확장 프로퍼티를 정의하려면, 다음과 같은 형식을 사용합니다: ```kotlin val ClassName.propertyName: PropertyType get() = // 프로퍼티의 값을 반환하는 코드 ``` 여기서 `ClassName`은 확장할 클래스의 이름, `propertyName`은 새로 추가할 프로퍼티의 이름, `PropertyType`은 프로퍼티의 타입을 의미합니다.

`get()` 블록 안에는 프로퍼티의 값을 계산하거나 반환하는 로직을 작성합니다.

예제 아래는 `String` 클래스에 `isPalindrome`이라는 확장 프로퍼티를 추가하는 예제입니다.

이 프로퍼티는 문자열이 회문인지 여부를 판단합니다.

```kotlin val String.isPalindrome: Boolean get() { return this == this.reversed() } ``` 위의 코드에서 `isPalindrome` 프로퍼티는 `String` 클래스의 인스턴스에서 사용할 수 있으며, 해당 문자열이 회문인지 여부를 반환합니다.

사용 예 이제 `isPalindrome` 확장 프로퍼티를 사용할 수 있습니다: ```kotlin fun main() { val word1 = "level" val word2 = "hello" println("$word1 is palindrome: ${word1.isPalindrome}") // level is palindrome: true println("$word2 is palindrome: ${word2.isPalindrome}") // hello is palindrome: false } ``` 주의사항 1. 확장 프로퍼티는 실제로 클래스에 추가되지 않음 : 확장 프로퍼티는 컴파일 타임에만 존재하며, 런타임에 클래스의 구조를 변경하지 않습니다.

따라서 확장 프로퍼티는 클래스의 인스턴스에 저장되지 않으며, 해당 클래스의 인스턴스가 생성될 때마다 계산됩니다.



2. setter가 없는 확장 프로퍼티 : 확장 프로퍼티는 getter와 setter를 모두 정의할 수 있지만, setter를 정의하지 않으면 읽기 전용 프로퍼티가 됩니다.

위의 예제에서는 `isPalindrome`이 읽기 전용이므로 setter가 없습니다.



3. 상속과의 관계 : 확장 프로퍼티는 상속 관계에 있는 클래스에서도 사용할 수 있지만, 부모 클래스의 확장 프로퍼티는 자식 클래스에서 오버라이드할 수 없습니다.

결론 코틀린의 확장 프로퍼티는 기존 클래스에 새로운 기능을 추가하는 간편한 방법을 제공합니다.

이를 통해 코드의 가독성을 높이고, 특정 클래스에 대한 추가적인 기능을 손쉽게 구현할 수 있습니다.

그러나 확장 프로퍼티는 클래스의 구조를 변경하지 않으며, 런타임에 인스턴스에 저장되지 않는다는 점을 유의해야 합니다.

작성자: 최하린 [비회원] | 작성일자: 1년 전 2024-09-09 09:47:17
조회수: 201 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.