코틀린에서 상수 정의하는 방법은?
_____A1: 코틀린에서는 `val` 키워드를 사용해 변경 불가능한 값을 정의할 수 있습니다. 하지만 일반적인 변수와 구분하기 위해 상수로서 컴파일 시점에 값을 고정하고 싶다면 `const val`을 사용합니다.
---
Q2: `const val`과 `val`의 차이점은 무엇인가요?
A2:
- `val`: 런타임에 한 번 초기화되는 읽기 전용 변수입니다. 객체의 프로퍼티나 함수 내 변수로도 사용 가능합니다.
- `const val`: 컴파일 타임 상수로, 반드시 기본 자료형(문자열, 숫자형, 불린형 등)이어야 하며, 함수 내에서는 사용할 수 없고 반드시 최상위 수준 또는 `object` 내에 선언해야 합니다.
---
Q3: 상수를 정의할 때 `const val`은 어디에 선언할 수 있나요?
A3:
- 패키지 최상위 수준(top-level)
- `object` 선언 내부
- `companion object` 내
함수나 클래스 인스턴스 프로퍼티 내에서는 사용할 수 없습니다.
---
Q4: 상수를 정의하는 예시는 어떻게 되나요?
A4: 최상위 선언 예시:
```kotlin
const val MAX_COUNT = 100
```
`object` 내부 선언 예시:
```kotlin
object Constants {
const val BASE_URL = "https://example.com"
}
```
`companion object` 내부 선언 예시:
class MyClass {
companion object {
const val TAG = "MyClass"
}
}
```
---
Q5: 왜 `const val`을 사용하는 것이 좋은가요?
A5: 컴파일 타임 상수이므로, 실행 성능이 조금 향상되고 다른 플랫폼과 상수 공유 시 유리하며, 코드 가독성 및 유지보수에 도움 됩니다.
---
Q6: 상수명 명명 규칙은 어떻게 되나요?
A6: 상수 이름은 일반적으로 모두 대문자에 단어 구분은 언더스코어(`_`)를 사용합니다. 예: `MAX_SIZE`, `DEFAULT_TIMEOUT`
---
Q7: 클래스 내부에서 일반 `val`로 상수를 선언하고 싶은 경우 주의할 점은?
A7: 클래스 인스턴스 프로퍼티로 선언된 `val`은 컴파일 시점 상수가 아니기 때문에 효율이 떨어질 수 있고, 다른 모듈에서 접근 시 상수 인라인 기능이 적용되지 않습니다. 상수로 사용하려면 `companion object`와 `const val` 조합을 추천합니다.
---
Q8: `lateinit`과 상수의 관계는 무엇인가요?
A8: `lateinit` 키워드는 `var`에만 사용할 수 있고, 초기화 시점을 늦출 때 사용합니다. 상수와는 개념이 다르며, 상수는 반드시 선언 시 초기화돼야 하므로 `lateinit` 사용할 수 없습니다.
---
요약:
- 상수는 `const val`로 선언
- `const val`은 최상위, `object` 또는 `companion object` 내에서만 가능
- 기본 자료형과 문자열만 가능
- 명칭은 모두 대문자, 단어는 언더스코어로 구분
- 성능과 가독성 향상을 위해 상수 사용 권장
이 두 가지 방법은 각각의 용도와 특징이 다르므로 상황에 맞게 선택하여 사용할 수 있습니다.
1. `const` 키워드 `const`는 컴파일 타임 상수를 정의하는 데 사용됩니다.
이는 상수의 값이 컴파일 시점에 결정되며, 변경할 수 없는 값을 나타냅니다.
`const`는 반드시 `val`과 함께 사용되어야 하며, 기본형 데이터 타입(예: Int, String 등)만 지원합니다.
```kotlin const val MAX_USERS = 100 const val API_URL = "https://api.example.com" ``` 위의 예제에서 `MAX_USERS`와 `API_URL`은 컴파일 타임에 결정되는 상수입니다.
이러한 상수는 전역적으로 접근할 수 있으며, 클래스나 객체의 멤버로 정의할 수 있습니다.
2. `val` 키워드 `val` 키워드는 읽기 전용 변수를 정의하는 데 사용됩니다.
`val`로 선언된 변수는 한 번 초기화된 후 변경할 수 없지만, 초기화 시점은 런타임일 수 있습니다.
따라서 `val`은 컴파일 타임 상수는 아니지만, 상수와 유사한 역할을 할 수 있습니다.
```kotlin val pi =
3.14 val currentTime = System.currentTimeMillis() ``` 위의 예제에서 `pi`는 런타임에 초기화되지만, 이후에는 변경할 수 없습니다.
`val`로 선언된 변수는 객체의 속성으로도 사용할 수 있습니다.
3. 상수의 사용 예시 상수를 정의한 후에는 다양한 곳에서 사용할 수 있습니다.
예를 들어, 상수를 사용하여 계산을 수행하거나 조건문에서 사용할 수 있습니다.
```kotlin fun main() { println("최대 사용자 수: $MAX_USERS") val userCount = 50 if (userCount > MAX_USERS) { println("사용자 수가 최대치를 초과했습니다.
") } else { println("현재 사용자 수: $userCount") } } ```
4. 상수의 네이밍 규칙 코틀린에서는 상수를 정의할 때 일반적으로 대문자와 언더스코어(_)를 사용하여 이름을 작성하는 것이 관례입니다.
이는 다른 변수와의 구분을 명확히 하고, 상수임을 쉽게 인식할 수 있도록 도와줍니다.
5. 상수의 스코프 상수는 정의된 스코프에 따라 접근할 수 있습니다.
`const`로 정의된 상수는 파일 레벨에서 접근할 수 있으며, 클래스 내부에 정의된 경우 해당 클래스의 인스턴스 없이도 접근할 수 있습니다.
반면, `val`로 정의된 상수는 해당 클래스의 인스턴스를 통해 접근해야 합니다.
```kotlin class User { companion object { const val DEFAULT_NAME = "Guest" } } fun main() { println(User.DEFAULT_NAME) // "Guest" } ``` 결론 코틀린에서 상수를 정의하는 방법은 `const`와 `val`을 통해 이루어지며, 각각의 특성과 용도에 맞게 선택하여 사용할 수 있습니다.
상수를 적절히 활용하면 코드의 가독성을 높이고, 유지보수를 용이하게 할 수 있습니다.
상수를 정의할 때는 네이밍 규칙을 준수하고, 스코프를 고려하여 적절한 위치에 정의하는 것이 중요합니다.
작성자:
이서영 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:16
조회수: 198 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 198 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.