프로그래밍/Kotlin 7

kotlin + junit의 생성자 주입시 오류

kotlin의 경우 생성자 주입을 그냥 하게 되면, 오류가 발생하게 되는데, 아래처럼 해결 하는 방법이 있다. 1. @Autowired constuctor를 사용하는 방법 class SimpleServiceTest @Autowired constructor ( val simpleService: SimpleService ) { @Test fun `이렇게 하면 결과가 나온다`() { } } 2. @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) 를 활용하는 방법 @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) class SimpleServiceTest ( val simple..

kotest 생성자 bean 주입 오류 - Specs must have a public zero-arg constructor

kotest에서 빈을 생성자 주입으로 쓰려고 하면, Specs must have a public zero-arg constructor 오류가 발생 할 수 있다. 이 때에는 kotest-extension-spring 모듈이 필요로 하다. kotest extension spring 라이브러리가 두개가 검색 되곤 하는데, 헷갈리면 안된다. https://kotest.io/docs/extensions/spring.html Spring | Kotest Kotest offers a Spring extension that allows you to test code that uses the Spring framework for dependency injection. kotest.io 실제 docs를 보면, 1.1.3 ..

Kotest 기본만 알아보자

kotest link: https://kotest.io Kotest is a flexible and elegant multi-platform test framework for Kotlin with extensive assertions and integrated property testing. Testing Styles junit 스타일 지원, JS에서 많이 사용하는 jest와 유사한 테스트 스타일 지원, goovy로 작성하는 spock과도 유사한 형태의 behavior test 스타일도 각기 모두 지원한다. 테스트 스타일 종류 Fun Spec(Scala) Describe Spec(JavaScript framework) Should Spec(kotest) String Spec(kotest) Behavior..

이펙티브 코틀린 3장 재사용성

3장 재사용성 아이템 19 knowledge(의도적인 정보)를 반복하여 사용하지 말라 프로젝트에서 이미 있던 코드를 복사해서 붙여넣고 있다면, 무언가 잘못된 것이다. 프로젝트를 진행할 때 정의한 모든 것이 knowledge 이다. 해당 정보의 종류는 다양한데, 알고리즘의 작동방식, UI의 형태, 우리가 원하는 결과등이 모두 의도적인 정보이며, knowledge이다. 대표적인 knowledge의 두 가지 Logic Common algorithm 모든 것은 변화하고, 변화에 대응을 할 수 있어야 한다. knowledge의 반복은 프로젝트의 확장성을 막고, 쉽게 깨지게 만든다. 그렇기 때문에 knowledge 반복을 줄여주는 도구의 사용이 필요하다. 그런 도구의 예로는 ORM, DAO를 활용 하는 방법이 될 ..

이펙티브 코틀린 2장 가독성

## 2장 가독성 ### 아이템11 가독성을 목표로 설계 하라 ```kotlin if (person != null && person.isAdult) { view.showPerson(person) view.hideProgressWithSuccess() } else { view.showError() view.hiseProgress() } person?.takeIf { it.isAdult } ?.let { view.showPerson(person) view.hideProgressWithSuccess() } ?: run { view.showError() view.hideProgress() } ``` A/B 코드 중에 A 코드가 명확하고, 이해하기가 더 쉽다. B 코드는 코틀린 스러워 보이지만, 오히려 디버깅을 ..

이펙티브 코틀린 1장 안정성

1장 안정성 아이템 1: 가변성을 제한하라 코틀린은 모듈로 프로그램을 설계 한다. 모듈은 클래스, 객체 ,함수, 타입 별칭, Top-level property 등 다양한 요소로 구성 된다. 아래의 코드를 살펴 봅니다. class NumberSum { suspend fun sumNumber() { var num = 0 coroutineScope { for (i in 1..1000) { launch { delay(10) num += 1 } } } println(num) // 실행 마다 다른 값이 나온다. } } 코루틴은 경량 쓰레드라고 생각하면 되고, 위의 코드에서는 쓰레드 간의 동기화가 되어 있지 않기 때문에, 값을 마음 대로 변경 하게 되는 이슈가 있고, 우선 num 변수 자체가 가변적인 변수라 이를 불..

반응형