자바 60

[Kotlin] 코틀린,자바 컬렉션과 nullability, 변경 가능성

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability 와 Collection 컬렉션에 대해 nullable 을 적용할 때는 조심해야 한다. 리스트 자체가 nullable 인지, 원소가 nullable 인지, 혹은 둘 다 nullable 인지를 잘 고려하자. nullable 값으로 이뤄진 컬렉션 예제 fun readNumbers(reader: BufferedReader): List { val result = ArrayList() // Int? 값으로 이뤄진 리스트 생성 for (line in reader.lineSequence()) { try { val number = line.toInt() result.add(number..

Kotlin 2024.01.22

[Kotlin] Nullability(널 가능성) - 2

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전 글에서 이어진다. 이전 글 : https://sh1mj1-log.tistory.com/211 [Kotlin] Nullability(널 가능성) - 1 Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability(널 가능성)은 NPE(`NullPointerException`) 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코 sh1mj1-log.tistory.com 지연 초기화할 프로퍼티 실제로는 not-null 인 프로퍼티인데 생성자 안에서 not-null 값으로 초기화할 방법이 없는 경우가..

Kotlin 2024.01.18

[Kotlin] Nullability(널 가능성) - 1

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability(널 가능성)은 NPE(`NullPointerException`) 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코틀린과 다른 최신 언어에서 null 에 대한 접근을 런타임에서 컴파일 타임으로 옮겼다. 그래서 컴파일 시 NPE 여부를 미리 검사하여 NPE 예외 가능성을 줄인다. 이번 글은 볼륨이 꽤 되어서 두 개의 글로 나누어서 설명한다. 다음 글: https://sh1mj1-log.tistory.com/212 [Kotlin] Nullability(널 가능성) -2 Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금..

Kotlin 2024.01.18

[Kotlin] 자바 함수형(SAM) 인터페이스 활용

kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린으로 개발을 할 때 대다수의 API 는 코틀린이 아닌 자바로 작성된 API 일 것이다. 그런데 코틀린 람다를 자바 API 에 사용해도 아무 문제가 없다. 코틀린에서는 자바 메서드에 람다를 넘길 수 있다. 안드로이드 개발시 많이 사용하는 `Button` 클래스는 `setOnClickListener` 메서드를 사용하여 버튼의 리스너를 설정한다. public class Button { public void setOnClickListener(OnClickListener l) { ... } } 여기서 `OnClickListener` 인터페이스는 `onClick` 이라는 메서드만 선언된 인터페이..

Kotlin 2024.01.16

[Kotlin] data class: toString, equals, hashCode, copy, componentN

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 어떤 클래스가 데이터를 저장하는 역할만을 수행한다면 `toStirng`, `equals`, `hashCode` 를 반드시 오버라이드 해야 한다. 다행히, 여러 IDE 에서는 자동으로 그런 메서드를 정의해주는 기능이 있다. 그런데 코틀린에서는 더 편하다. data class(데이터 클래스) `data` 라는 변경자를 클래스 앞에 붙이면 필요한 메서드를 컴파일러가 자동으로 만들어준다. `data` 변경자가 붙은 클래스를 데이터 클래스라고 한다. `Client` 를 데이터 클래스로 data class Client(val name: String, val postalCode: Int) 이제 `Cli..

Kotlin 2024.01.10

[Kotlin] inner class & nested class 자바와 비교해서 (feat. 직렬화)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 자바처럼 코틀린에서도 클래스 안에 다른 클래스를 선언할 수 있다. 이것으로 `helper 클래스`를 캡슐화하거나, 코드 정의를 그 코드를 사용하는 곳 가까이에 두고 싶을 때 유용하다. 클래스 A 안에 다른 클래스 B 를 정의할 때 B 는 두 가지 유형으로 나뉜다. `nested class` 바깥쪽 클래스에 대해 참조를 저장하지 않는다. `inner class` 바깥쪽 클래스에 대한 참조를 저장한다. 자바와 달리 코틀린에서는, 안쪽에 있는 클래스는 디폴트로 바깥쪽 클래스 인스턴스에 대한 접근 권한이 없는 `nested class` 이다. 직렬화를 통해 inner / nested class 테..

Kotlin 2024.01.06

[Kotlin] 가시성 변경자 public, internal, protected, private

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린에서는 기본적으로 public (visibility modifier 가시성 변경자) visibility modifier(가시성 변경자)는 클래스 외부 접근을 제어한다. 코틀린에서도 자바와 같은 가시성 변경자를 가진다. `public`, `protected`, `private` 변경자가 모두 있다. 하지만 코틀린의 기본 가시성은 `public` 이다. 코틀린에서는 최상위 선언에 대해 `private` 을 허용한다. 클래스, 함수, 프로퍼티 등이 최상위 선언으로 가능하다. `private` 최상위 선언은 그 선언이 들어있는 파일 내부에서만 사용 가능하다. 참고로 자바에서는 클래스를 `pr..

Kotlin 2024.01.05

[Kotlin] 문자열 & 정규식

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린 문자열은 자바 문자열과 같다. 모든 코틀린 문자열을 자바 메서드에 넘겨도, 자바 문자열을 코틀린 메서드에 넘겨도 괜찮다. 특별한 변환도 필요없고 별도의 `Wrapper`(래퍼)도 필요 없다. 코틀린의 다양한 확장 함수 덕분에 표준 자바 문자열을 더 쉽게 다룰 수 있다. 문자열 나누기 코틀린에서의 문자열을 구분 문자열에 따라 나누는 작업을 알아보자 먼저 자바의 `split` 메서드를 간단히 사용해보자. public void splitString() { String str = "12.345-6.A"; String[] strings = str.split("."); for (String s..

Kotlin 2024.01.04

[Kotlin] 중위 호출 & 구조 분해 선언

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. infix call(중위 호출) 우리는 맵을 만들 때 `mapOf` 함수를 사용해서 아래처럼 만들어 왔다. val map = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 그런데 여기서 `to` 는 코틀린의 특별한 키워드가 아닌 일반 함수라고 했다. 이 코드는 infix call(중위 호출)이라는 특별한 방식으로 to 라는 일반 메서드를 호출한 것이다. 중위 호출 시에는 수신 객체와 유일한 메서드 인자 사이에 메서드 이름을 넣는다. (`[수신 객체] [메서드 이름] [유일한 메서드 인자]`) 이 중위 호출이 가능한 메서드는 일반 호출로도 사용..

Kotlin 2024.01.03

[Kotlin] 컬렉션 처리 API 확장 & 가변 인자(vararg) 함수

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 자바 컬렉션 API 확장 이전에 코틀린 컬렉션은 자바와 같은 클래스를 사용하지만 더 확장된 API 를 제공한다고 했다. @Test fun collectionExtension() { val strings: List = listOf("first", "second", "fourteenth") println(strings.last()) // fourteenth printed val numbers: Collection = setOf(1, 14, 2) println(numbers.max()) // 14 printed } 이런 코드가 어떻게 작동할까? 어떻게 자바 라이브러리의 컬렉션에 대해 코틀린에서 ..

Kotlin 2024.01.03