Kotlin 1.4 에서 디버깅 안될때
IntelliJ 사용 중인 프로젝트에서 갑자기 디버그가 안된다.
아래 방법으로 간단하게 해결
상세 원인은 아래 링크를 보면 알 수 있다.
https://stackoverflow.com/questions/63668477/debug-mode-stopped-working-in-idea-with-kotlin
Kotlin 에서 Java 8 Default Methods 사용 방법
Java 8 부터 interface에도 body를 가진 Default Methods 를 지원.
import java.time.*;
public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
default ZonedDateTime getZonedDateTime(String zoneString) {
return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
}
}
위 getZonedDateTime 처럼 interface를 구현한 클래스들에서 쉽게 사용할 수 있는 유틸성 메소드다.
그 전에는 이런 유틸성 메서드들은 따로 유틸리티 클래스를 만들어서 쓰던가, 인터페이스를 구현한 추상 클래스에 넣어서 쓰던지 하는 방법을 써야됬다.
아무는 Default Method 쓰면 좀 편해지는 부분이 있다.
하지만 Kotlin 에서 Default Method를 지원하지 않는다.
@JvmDefault 라는 Annotation 을 통해 지원하긴 한데, 컴파일 옵션 추가가 필요하고, 아직 실험적인 단계의 메서드다.
기존 코드를 변경하는 경우에는 @JvmDefault 를 사용하고 하거나 companion object 로 사용하는 방법이 있다.
interface TimeClient {
fun setTime(hour: Int, minute: Int, second: Int)
companion object {
fun getZonedDateTime(zoneString: String): ZonedDateTime {
return ZonedDateTime.of(LocalDateTime.now(), ZoneId.of(zoneString));
}
}
}
아에 Kotlin 으로 작업할 경우에는 Default Method와 비슷하게 funtion body 를 작성해주면 된다.
interface TimeClient {
fun setTime(hour: Int, minute: Int, second: Int)
fun getZonedDateTime(zoneString: String): ZonedDateTime {
return ZonedDateTime.of(LocalDateTime.now(), ZoneId.of(zoneString));
}
}
class TimeChecker: TimeClient {
override fun setTime(hour: Int, minute: Int, second: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
Kotlin 개발 유용한 링크
공식 문서가 굉장히 잘 되어 있다.
스프링 문서도 잘 되있음!
공식 문서 : https://kotlinlang.org/docs/reference/
Spring Kotlin 문서 : https://docs.spring.io/spring/docs/current/spring-framework-reference/languages.html#kotlin-resources
Lombok 사용 중 일경우 참고 : https://dzone.com/articles/migrating-from-lombok-to-kotlin
Lombok 으로 작성된 코드를 Kotlin 코드에서 접근할 수 없다.
Lombok은 컴파일 시 Annotation Processor 에 의해 동작하는데 Kotlin 컴파일시 Annotaion Processor 를 사용하지 않는다.
Spring one 에서 발표된 Kotlin 관련 영상 : https://www.youtube.com/results?search_query=spring+one+kotlin
Intellij 멀티 커서(멀티 라인 커서)
한 2년전에 패치 됬던가..
노트패드에도 있었던 멀티 라인 선택 기능..
가끔씩 여러라인 한번에 고칠 필요가 있는데..이때 유용.
Intellij 공식 용어는 Multicursor 인듯.
https://www.jetbrains.com/help/rider/Multicursor.html
Shift+Alt+Insert 로 활성화 후에 선택하고. 한번더 선택 하면 Multicursor 모드 해제 됨.