본문 바로가기

Java & Kotlin/Kotlin10

by lazy를 통해 지연 초기화 적용하기 개발을 하다보면 가끔 지연 초기화를 적용해야할 때가 있을 수 있다. Kotlin을 사용하면 이를 쉽게 처리를 할 수 있다. 아래 코드를 보자. object Answer { val value = 42 } // 수행이 오래 걸리는 기능 fun longJob() { println("Job just started") Thread.sleep(2_000) println("Job has done") } fun main() { longJob() println(Answer.value) } 여기서 Answer에 value 프로퍼티는 사용되기 전에도 초기화가 되어있다. 이 값을 정말 사용되는 때(위 코드에서는 14번째 라인)까지 초기화를 지연시키고 싶다고 했을 때 by lazy 를 통해 쉽게 처리할 수 있다. object .. 2021. 11. 6.
by 키워드를 사용한 Delegation 다음과 같이 Worker와 Student에 대한 interface가 있다고 할 때, interface Worker { fun work() } interface Student { fun study() } 이 두 interface를 상속받는 클래스를 구현할 때는 다음과 같이 직접 상속받아 구현하는 방식을 주로 사용할 것이다. class Developer : Worker, Student { override fun work() { println("Work hard!") } override fun study() { println("Study hard!") } } Kotlin 에서는 by 키워드를 사용하면 interface를 상속하되 직접 구현하지 않고, 클래스의 프로퍼티에 해당 interface에 대한 역할을 위.. 2021. 11. 6.
Kotlin Gradle Multi Module 적용하기 Java나 Kotlin을 사용할 때 Gradle을 사용하면 모듈형 아키텍처를 적용하는 것이 그리 어렵지 않다. (하지만 자세하게 설정하려고하면 Gradle을 잘 모르고서는 어렵다 👀 ) 이번 포스팅에서는 아래와 같이 2개의 모듈로 구성된 단순한 프로젝트를 만들며 Kotlin을 사용하면서 Gradle Multi Module을 적용하는 방법에 대해 알아보도록 하자 예제는 여기에서 확인할 수 있다. root 프로젝트 프로젝트 생성 먼저 모듈의 root가 되는 Gradle 프로젝트를 생성하자. 아래와 같이 Kotlin 설정을 한 뒤 프로젝트 GroupId, ArtifactId 등을 설정한 후 프로젝트를 생성한다. 불필요한 파일 삭제 root project에 소스코드는 필요하지 않기 때문에 없애도록 한다. 모듈 .. 2021. 11. 4.
JUnit5 테스트 시 @BeforeEach, @AfterEach가 실행되지 않을 때 JUnit5 기반으로 테스트 실행 시 @BeforeEach, @AfterEach로 지정한 기능이 실행되지 않을 때 상황마다 다르겠지만 나같은 경우 간단하게 해결할 수 있었다. 바로 @Test를 org.junit.Test의 @Test가 아닌 org.junit.jupiter.api.Test의 @Test로 사용하면 된다. class MyTest { @org.junit.jupiter.api.BeforeEach fun setUp() { println("SetUp method") } // @BeforeEach로 지정해놓은 메서드가 실행되지 않는다 @org.junit.Test fun junitTest() { println("This test won't trigger setUp") } // @BeforeEach로 지정.. 2021. 1. 10.