본문 바로가기

분류 전체보기155

Kotlin in Action #7. 연산자 오버로딩과 기타 관례 'Kotlin in Action' 책을 학습하고 정리한 내용입니다. 7. 연산자 오버로딩과 기타 관례 언어 기능을 타입에 의존하는 자바와 달리 코틀린은 함수 이름을 통한 관례에 의존한다는 점이 특징이다. 이러한 관례를 선택한 이유는 기존 자바와 호환성을 맞춰야 하는데, 코틀린 쪽에서 자바 인터페이스를 변경할 수 없기 때문이다. 코틀린은 기존 자바 코드를 바꾸지 않음에도 새로운 기능을 부여할 수 있다. 산술 연산자 오버로딩 코틀린에서 관례를 사용하는 가장 단순한 예는 산술연산자이다. 자바에서는 원시 타입과 String 타입에 대해서만 + 연산자를 사용할 수 있다. 코틀린에서는 다른 클래스에 대해서도 산술연산자를 사용할 수 있게 기능을 정의할 수 있다. 이항 산술 연산 오버로딩 Plus data class를.. 2021. 8. 16.
Kotlin in Action #6. 코틀린 타입 시스템 'Kotlin in Action' 책을 학습하고 정리한 내용입니다. 6. 코틀린 타입 시스템 null 가능성 코틀린에서는 null에 문제점을 컴파일 시점으로 옮겼다. null이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 미리 감지 할 수 있기 때문에 실행 시점에 발생할 수 있는 가능성을 줄였다. null이 될 수 있는 타입 자바의 차이점으로 코틀린은 타입 시스템이 null이 될 수 있는 타입을 명시적으로 지원한다. 타입 이름 뒤에 물음표를 붙이면, 타입의 변수나 프로퍼티에 null 참조를 저장할 수 있다. 물음표가 없는 타입은 null 참조를 할 수 없으며, 컴파일 시 에러가 발생한다. val number1: Integer? = null val number2: Integer =.. 2021. 8. 16.
@Id와 @Convert가 같이 있을 때 정상 동작하지 않는 이유 문제 상황 Entity에서 테이블의 컬럼이 String 타입인 것을 LocalDate 타입으로 변경하려고 했습니다. 기존에 정의 되어 있는 Converter 구현체가 있었기 때문에 @Convert 어노테이션을 사용해서 적용했는데, 실제로 Converter로 로직을 타지 않고 java.sql.Date 클래스의 valueOf 메서드가 호출되고 있었습니다. java.sql.Date 클래스의 valueOf 메서드는 문자열 날짜 값을 파싱할 때, 날짜 형식이 yyyy-[m]m-[d]d가 아니면, IllegalArgumentException 에러를 던지고 있습니다. 테이블에 저장되어 있는 값이 마침 yyyymmdd로 저장되어 있어서 계속 에러가 발생했습니다. class LocalDateConverter : Attr.. 2021. 8. 16.
Kotlin에서 SLF4J Logger 객체 생성 방법 Java에서는 Logger 객체를 직접 개발자가 생성하지 않고, Lombok의 @Slf4j 어노테이션을 클래스 레벨에 붙여서 사용합니다. Kotlin에서는 Lombok을 잘 사용하지 않기도 하고, Logger 객체를 생성하는 다양한 방법이 있지만 현재 프로젝트에서는 간단하게 아래와 같은 코드로 사용하고 있습니다. class TestClass { private val log = LoggerFactory.getLogger(javaClass) fun testMethod() { log.info("test log") } } 매번 LoggerFactory를 사용하는 동일한 코드를 반복하기 싫으면, 아래 링크를 통해 3가지 방법은 참고 할 수 있습니다. https://www.reddit.com/r/Kotlin/com.. 2021. 8. 16.
zsh, 환경 변수 추가 (Kotlin에서 환경 변수 값 가져오기) 1.terminal 실행한 뒤, 환경 변수 설정 $ echo 'export GH_USERANME=jayden-lee' >> ~/.zshenv 2.변경 사항 반영 $ source ~/.zshenv 3.환경 변수 설정 테스트 $ echo $GH_USERNAME Kotlin 에서 환경 변수 값 가져오기 fun main() { val ghUsername = System.getenv("GH_USERNAME") println(ghUsername) // jayden-lee } 2020. 4. 4.
Logback JSON 포맷으로 출력하기 의존성 추가 build.gradle 파일에 아래 의존성을 추가한다. compileOnly("ch.qos.logback.contrib:logback-jackson:0.1.5") compileOnly("ch.qos.logback.contrib:logback-json-classic:0.1.5") JsonLayout 설정하기 logback.xml 파일에 로그 메시지를 JsonLayout으로 출력되도록 설정한다. 추가적으로 JacksonJsonFormatter을 설정하면 Json 로그 메시지가 Json Formatter가 적용되어 출력된다. yyyy-MM-dd'T'HH:mm:ss.SSSX Etc/UTC true true 2020. 2. 28.