본문 바로가기
Spring/Spring 팁

Kotlin과 all-open

by E145 2022. 2. 14.
반응형

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 플러그인 사용 전 상태를 살펴보자.

 

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

댓글