일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- string.repeat()
- 스프링
- 자바
- email api 구현
- jpa repository
- kotlin
- embededid
- 스프링 부트
- @embededid
- 객체지향
- javamailsender
- ispresent
- Token
- JPA
- 티스토리챌린지
- mutablemap
- string?
- 이메일 본인인증
- map
- 코틀린
- 복합 키
- 토큰
- JPQL
- 오블완
- Spring
- devpi
- Spring Boot
- 널 허용
- entity
- java
- Today
- Total
DeveloPiano
[Kotlin] @field: Java와의 비교를 통한 이해 본문
Kotlin과 Java는 모두 JVM에서 실행되는 언어로, 많은 공통점을 가지고 있지만, 코드 작성 방식에서는 차이가 존재합니다. 특히 어노테이션을 적용할 때 Kotlin에서는 Java와 다른 구문적 차이를 보입니다. 이번 포스팅에서는 Kotlin의 @field: 어노테이션을 Java와 비교하며 그 차이를 이해해보겠습니다.
Kotlin의 프로퍼티와 어노테이션
Kotlin에서는 프로퍼티가 field, getter, setter로 컴파일됩니다. 예를 들어, 다음과 같은 Kotlin 프로퍼티를 생각해 봅시다.
var name: String = "Kotlin"
이 프로퍼티는 컴파일되면서 다음과 같은 구성 요소로 나뉩니다:
- field: 실제 데이터를 저장하는 공간.
- getter: 프로퍼티의 값을 읽을 때 호출되는 메서드
- setter: 프로퍼티의 값을 설정할 때 호출되는 메서드
이러한 구조 때문에 Kotlin에서는 어노테이션을 field, getter, setter중 어디에 적용할지를 명확히 지정해야 할 경우가 많습니다.
Java와의 비교
Java에서는 클래스의 필드에 직접 어노테이션을 붙이는 것이 일반적입니다.
data class Person(
@field:NotNull
var name: String
)
여기서 @field:NotNull은 어노테이션이 실제 필드에 적용되도록 지정합니다.
@field:의 사용이 필요한 경우
- 필드에 직접 어노테이션을 적용해야 할 때: Jackson의 @JsonProperty나 JPA의 @Column과 같은 어노테이션은 필드에 직접 적용되어야 합니다.
- 검증 라이브러리 사용 시: Bean Validation(JSR 380)에서 @NotNull과 같은 검증 어노테이션은 필드에 적용되어야 올바르게 동작합니다.
예시: Kotlin vs Java
Java 코드 예시
public class User {
@NotNull
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Kotlin 코드 예시
Java와 동일한 기능을 Kotlin에서 구현하려면, @field:를 사용하여 필드에 어노테이션을 적용합니다.
data class User(
@field:NotNull
var username: String
)
이 코드에서 @field:NotNull은 어노테이션이 프로퍼티의 필드에 적용되도록 보장합니다. @field:를 생략하고 그냥 @NotNull만 작성하면, 기본적으로 어노테이션이 게터에 적용될 수 있기 때문에, 의도와 다른 동작이 발생할 수 있습니다.
어노테이션 대상 명시
Kotlin에서는 어노테이션을 다양한 대상에 적용할 수 있으며, 그 대상은 다음과 같습니다.
- @field: : field에 적용
- @get: : getter에 적용
- @set: : setter에 적용
- @property: : property 전체에 적용
- @param: : 생성자 파라미터에 적용
요약
- Java에서는 필드에 직접 어노테이션을 적용할 수 있지만, Kotlin에서는 프로퍼티가 field, getter, setter로 나뉘므로 어노테이션을 정확히 적용하려면 @field:를 사용해야 합니다.
- @field: 어노테이션은 Kotlin 프로퍼티의 필드에 직접 어노테이션을 적용하며, 검증이나 직렬화 라이브러리와 같은 특정 상황에서 필수적입니다.
- 올바르게 어노테이션을 적용하면, Kotlin에서도 Java와 동일한 수준의 유효성 검사와 데이터 직렬화 등을 구현할 수 있습니다.
이 차이를 이해하면 Kotlin과 Java 간 어노테이션 사용에서 발생할 수 있는 혼란을 줄이고, 더 정확하고 유지보수 가능한 코드를 작성할 수 있습니다. Kotlin에서 어노테이션을 사용할 때는 어노테이션이 적용될 정확한 대상을 지정하는 것이 중요하다는 점을 꼭 기억해야 합니다.
'Develop > Kotlin' 카테고리의 다른 글
[Kotlin] Map과 MutableMap : 읽기 전용과 변경 가능한 Map의 차이점 (0) | 2024.11.14 |
---|---|
[Kotlin] Null Safety : ?와 Nullable 타입 (0) | 2024.09.02 |
[Kotlin] it : 람다 표현식에서의 편리한 매개변수 사용법 (3) | 2024.09.02 |
[Kotlin] flatten 함수 : 중첩된 컬렉션을 간편하게 평탄화 (0) | 2024.08.25 |
[Kotlin] Data Class: 간결하고 강력한 데이터 관리 방법 (4) | 2024.08.24 |