본문 바로가기

Kotlin53

[Kotlin in Action] 7.4 구조 분해 선언과 component 함수 // 구조 분해>>> val p = Point(10, 20)>>> val (x, y) = p>>> println(x)10>>> println(y)20내부에서 구조 분해 선언은 다시 관례를 사용한다. 구조 분해 선언의 각 변수를 초기화하기 위해 componentN이라는 함수를 호출한다. 여기서 N은 구조 분해 선언에 있는 변수 위치에 따라 붙는 번호다.data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 컴파일러가 자동으로 componentN 함수를 만들어준다. 다음 예제는 데이터 타입이 아닌 클래스에서 이런 함수를 어떻게 구현하는지 보여준다.class Point(val x: Int, val y: Int) { operator fun component1() = x operator fun co.. 2025. 3. 27.
[Kotlin in Action] 7.3 컬렉션과 범위에 대해 쓸 수 있는 관례 7.3.1 인덱스로 원소에 접근: get과 setmutableMap[key] = newValue코틀린에서는 인덱스 연산자도 관례를 따른다. 인덱스 연산자를 사용해 원소를 읽는 연산은 get 연산자 메소드로 변환되고, 원소를 쓰는 연산은 set 연산자 메소드로 변환된다. Map과 MutableMap 인터페이스는 그 두 메소드가 이미 들어있다. // get 관례 구현하기operator fun Point.get(index: Int): Int { return when(index) { 0 -> x 1 -> y else -> throw IndexOutOfBoundsException("Invalid coordinate $index") }}>>> va.. 2025. 3. 27.
[Kotlin in Action] 7.2 비교 연산자 오버로딩 equals나 comapreTo를 호출해야 하는 자바와 달리 코틀린에서는 == 비교 연산자를 직접 사용할 수 있어서 비교 코드가 equals나 compareTo를 사용한 코드보다 더 간결하며 이해하기 쉽다. 7.2.1 동등성 연산자: equals코틀린은 == 연산자 호출을 equals 메소드 호출로 컴파일 한다.!= 연산자를 사용하는 식도 equals 호출로 컴파일 된다. ==와 !=는 내부에서 인자가 null인지 검사하므로 다른 연산과 달리 null이 될 수 있는 값에도 적용할 수 있다.// equals 메소드 구현하기class Point(val x: Int, val y: Int) { override fun equals(obj: Any?): Boolean { // Any에 정의된 메소드를 오버라이.. 2025. 3. 26.
[Kotlin in Action] 7.1 산술 연산자 오버로딩 코틀린에서 관례를 사용하는 가장 단순한 예는 산술 연산자다. 자바에서는 원시 타입에 대해서만 산술 연산자를 사용할 수 있고, 추가로 String에 대해 + 연산자를 사용할 수 있다.그러나 다른 클래스에서도 산술 연산자가 유용한 경우가 있다. 예를 들어, BigInterger 클래스를 다룬다면 add 메소드를 명시적으로 호출하기보다는 + 연산을 사용하는 편이 더 낫다. 컬렉션에 원소를 추가하는 경우에도 += 연산자를 사용할 수 있으면 더 좋다. 코틀린에서는 그런 일이 가능하다. 7.1.1 이항 산술 연산 오버로딩data class Point(val x: Int, val y: Int)Point에서 지원하고픈 첫 번째 연산은 두 점을 더하는 연산이다. 이 연산은 두 점의 X 좌표와 Y 좌표를 각각 더한다. 다.. 2025. 3. 26.
[Kotlin in Action] 6.3 컬렉션과 배열 6.3.1 null 가능성과 컬렉션컬렉션 안에 null 값을 넣을 수 있는지 여부는 어떤 변수의 값이 null이 될 수 있는지 여부와 마찬가지로 중요하다. 변수 타입 뒤에 ?를 붙이면 그 변수에 null을 저장할 수 있다는 뜻인 것처럼 타입 인자로 쓰인 타입에도 같은 표시를 사용할 수 있다. 타입 인자 안에서 ?가 하는 일을 이해하기 위해 파일의 각 줄을 읽어서 숫자로 변환하기 위해 파싱하는 다음 예제를 보자.// null이 될 수 있는 값으로 이뤄진 컬렉션 만들기fun readNumbers(reader: BufferedReader): List { val result = ArrayList() // null이 될 수 있는 Int 값으로 이뤄진 리스트를 만든다. for (line in reader.. 2025. 3. 26.