Kotlin에서 open이란?
코틀린에는 자바에는 없는 open 키워드가 존재한다.
자바와 달리 코틀린에서 클래스나 메소드를 선언하면, 기본으로 final 키워드가 적용된다.
open 이라는 키워드를 명시하면, 자바의 기본 값 처럼 final 키워드가 명시되지 않는다.
코틀린과 자바는 상호 호환이 가능하지만, 몇 가지 설정이 필요한 경우가 있다.
Spring에서도 대부분 호환이 가능하지만, open 키워드 때문에 문제가 발생한다.
Kotlin과 Spring Bean
코틀린에서 Spring Bean을 등록하는 방법. @Configuration & @Bean Spring에서 Bean을 등록하는 방법은 여러가지가 존재한다. 그 중 @Configuration과 @Bean을 이용하여 Spring Bean을 등록할 수 있다. // Java 에..
9327144.tistory.com
all-open 플러그인
그렇다면, Spring에서 @Configuration이나 @Transactional을 사용하기 위해서 클래스나 메소드에 모두 open 키워드를 직접 달아주어야 할까?
이러한 불편함을 해결하기 위해 all-open이라는 플러그인이 존재한다.
말 그대로, Spring에서 open이 필요한 클래스나 메소드에 자동으로 open이라는 키워드를 명시해주는 플러그인이다.
all-open 플러그인 사용 전
all-open 플러그인 사용 전 상태를 살펴보자.
이렇게 Transactional을 사용하기 위해서는 open 키워드가 필요하지만 선언하지 않는 경우를 살펴보자.
코틀린 코드를 빌드한 후 java 코드로 디컴파일 하게 되면 위와 같은 코드의 상태를 얻을 수 있다.
실행 시 당연하게도 Bean으로 등록할 수 없다.
all-open 키워드 사용 후
클래스와 메소드 코드에는 변함 없이 all-open 플러그인을 추가한 후 빌드하게 되면
위와 같이 final 키워드가 제거됨을 볼 수 있다.
all-open 플러그인 등록
위와 같이 설정을 하면, all-open 플러그인을 사용할 수 있다.
Gradle
plugins {
id "org.jetbrains.kotlin.plugin.spring" version "1.6.10"
}
Maven
<compilerPlugins>
<!-- Spring 어노테이션에 open 키워드를 사용한다고 명시 -->
<plugin>spring</plugin>
</compilerPlugins>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
출처 : https://kotlinlang.org/docs/all-open-plugin.html#spring-support
All-open compiler plugin | Kotlin
kotlinlang.org
'Spring > Spring 팁' 카테고리의 다른 글
Kotlin과 Spring Bean (0) | 2022.02.06 |
---|---|
[Spring] @Configuration과 @Component, 그리고 @Bean (0) | 2022.01.29 |
Spring Boot - Validation (0) | 2021.09.23 |
[ Spring Security ] Spring Security0 (2) | 2021.08.30 |
댓글