본문 바로가기

kotlin

(6)
[Kotlin] parameter vs property, Constructor parameter is never used as a property 코틀린으로 개발 중 아래와 같은 경고를 보게 됐다. constructor parameter is never used as a property 자바에서는 클래스 내부에서 프로퍼티와 생성자를 각각 따로 정의하고, 생성자 내부에서 프로퍼티를 값을 초기화 해주는 코드를 직접 구현하기 때문에 생성자 파라미터와 프로퍼티 개념이 헷갈릴 일이 없다. 그런데 코틀린에서는 주생성자와 프로퍼티(멤버함수) 정의를 한 번에 할 수 있다보니, 생각없이 단순 파라미터를 프로퍼티로 정의하고 갑자기 뜬 경고에 당황했다. 당황한게 창피해서 정리해본다. parameter 우선 parameter는 매개변수로 함수나 생성자에 전달하는 값을 의미한다. fun printName(name: Sting) { println(name) } class ..
[Kotlin] Sequence를 이용한 컬렉션 지연 계산, 항상 효율적일까? 👀 컬렉션 함수를 연쇄하는 경우 임시 컬렉션이 생성된다. map이다 filter같은 컬렉션 함수를 연쇄하면 매 단계마다 중간 계산 결과를 새로운 임시 컬렉션에 저장된다. 즉, 매 단계 마다 불필요한 컬렉션이 생성된다. 📌 동작 과정 val resultList = people.map(Person::name).filter { it.startsWith("A") } 위 예제에서 map에 대한 결과를 저장하는 임시 컬렉션이 생성되고 그 임시 컬렉션에 대한 filter 실행 결과를 resultList로 저장한다. 👀 sequence를 사용하면 임시 컬렉션이 생성되지 않는다. 코틀린에서 제공하는 시퀀스를 사용하면 중간 임시 컬렉션을 사용하지 않고, 컬렉션 연산을 연쇄할 수 있다. 📌 동작 과정 people.asSeq..
[Kotlin] 문자열 공백 제거 방법 (trim, trimIndent, trimMargin) trimIndent 모든 입력 라인의 공통 최소 들여쓰기를 감지하고 모든 라인에서 그만큼 제거한다. 비어있는 첫번째와 마지막 라인 제거 코틀린에서 문자열 다룰 때 내가 가장 많이 사용하는 방법이다. 모든 입력 라인의 공통 최소 들여쓰기를 알아서 감지하고 제거하기 때문에, """로 감싼 문자열을 처리할 때 편하다. val str1 = """ AND os_type AND channel AND LOWER(name) AND age """.trimIndent() println(str1) 출력 내용 AND os_type AND channel AND LOWER(name) AND age trim 문자열 양 끝 공백을 제거한다 val str2 = """ AND os_type AND channel AND LOWER(nam..
Kotest로 깔끔하게 Kotlin 테스트 코드 작성하기 java로 구현하던 spring 프로젝트를 kotlin으로 전환하면서사용하고, 테스트 코드는 어떻게 할지 고민이었다. 1. 왜 kotest 인가? JUnit보다 간결함 Kotest에서는 **다양한 테스팅 스타일**을 지원함 BDD 테스트 코드 작성에 용이함 Kotlin을 위한 테스트 도구이므로 Kotlin 스타일로 작성 가능함 기존의 자바 테스트를 위한 라이브러리인 junit, assert, mockito 등을 이용해서도 Kotlin 테스트 코드를 작성할 수 있지만, 이들은 Kotlin 스타일로 코드를 작성할 수 없어서 코드와 테스트 코드 간의 괴리가 발생하게 됨 Mocking이나 Assertion 과정에서 코틀린 DSL 을 활용할 수 없음 비즈니스 로직을 코틀린 DSL을 이용해 작성하더라도 테스트에서 ..
[kotlin vs java ] 코틀린과 자바의 차이, 코틀린의 장점 기존에 java로 구현했던 spring 프로젝트를 kotlin으로 전환했다. 코틀린을 도입하기로 결정한 이유는 다음과 같았다. 왜 kotlin인가? 간결성, 생산성 코틀린은 자바보다 더 간결하고 직관적이라, 쓰고 읽는 데 시간이 덜 걸린다. 자바에 존재하는 여러 가지 번로운 준비 코드(생성자, 게터, 세터 등)들을 코틀린은 묵시적으로 제공하기 때문에 그런 준비코드 없이 더 깔끔하다. 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되는 코드를 줄일 수 있다. 안정성 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다. 코틀린은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointException이 발생할 수 있는 연산을 사용하는 코드를 금지한다. 자..
Kotlin/Spring 에서 logger 객체로 로그 출력하기 기본 사용방법 class TestClass { private val log = LoggerFactory.getLogger(javaClass) fun testMethod() { log.info("test log") } } 동작원리 파헤치기 LoggerFactory.getLogger() public static Logger getLogger(...) getLogger는 Logger 객체를 반환하는 static getter이다. Logger 실제 Logger 인터페이스 안에 info, debug, warn과 같은 메소드들이 선언되어 있다. public interface Logger { public void debug(Marker marker, String msg); public void info(String ..

반응형