코틀린 인 액션

    [코틀린 인 액션] 7장 정리: 연산자 오버로딩

    7.1.1 이항 산술 연산자 오버로딩 1. 연산자를 오버로딩하는 함수 앞에는 꼭 operator가 있어야 함 식 함수 이름 a * b times a / b div a % b mod(1.1부터 rem) a + b plus a - b minus 2. operator 변경자를 추가해 plus 함수를 정의하면, + 기호로 덧셈이 가능 data class Point(val x: Int, val y: Int) fun main(args: Array) { val point = Point(1, 3) println(point.plus(point)) } operator fun Point.plus(other: Point): Point { return Point(x + other.x, y + other.y) } 7.1.3 단항..

    [코틀린 인 액션] 6장 정리: null 다루는 방법

    6.1.3 안전한 호출 연산자 1. 호출하려는 값이 null이 아니면 일반 메서드 호출처럼 작동 2. 호출하려는 값이 null이라면 호출이 무시되고 null이 결과 값 fun main(args: Array) { printAllCaps("abc") printAllCaps(null) } fun printAllCaps(s: String?) { val allCaps: String? = s?.uppercase() println(allCaps) } 2. ?. 연산자를 사용하여 안전한 호출 연쇄 class Address(val streetAddress: String, val city: String, val country: String) class Company(val name: String, val address: ..

    [코틀린 인 액션] 5장 정리

    5.1.2 람다와 컬렉션 1. 라이브러리 함수를 사용하여 프로퍼티를 비교해 값이 가장 큰 원소 찾기 // 루프 사용 class Person(val name: String, val age: Int) fun main(args: Array) { val people = listOf(Person("Alice", 29), Person("Bob", 31)) findTheOldest(people) } fun findTheOldest(people: List) { var maxAge = 0 var theOldest: Person? = null for (person in people) { if (person.age > maxAge) { maxAge = person.age theOldest = person } } printl..

    [코틀린 인 액션] 4장 정리

    4.1.4 내부 클래스와 중첩된 클래스 1. 클래스 A 안에 정의된 클래스 A는 중첩 클래스 - 내부 클래스 선언을 위해서는 inner 키워드 사용 class Outer { private val bar: Int = 1 class Nested { fun foo() = 3 } inner class Inner() { fun foo() = bar } } val demo = Outer.Nested().foo() val demo2 = Outer().Inner().foo() 2. Nested 클래스는 Outer 클래스의 내부 클래스가 아니므로 프로퍼티에 접근 불가능 class Outer { private val bar: Int = 1 class Nested { fun foo() = bar // ERROR } inne..

    [코틀린 인 액션] 3장 정리

    3.4.2 가변 인자 함수 1. 인자의 개수가 정해지지 않은 인자(vararg)로 메서드 호출 시 원하는 개수만큼 값을 인자로 넘겨 사용 가능 fun main(args: Array) { val ls = arrayOf(1,2,3) val ls2 = arrayOf(*ls,4,5,6) printNumbers(*ls2.toIntArray()) } fun printNumbers(vararg numbers: Int) { for (n in numbers) { println(n) } } 2. 스프레드 연산자(*)를 통해 배열을 풀어 각 원소가 인자로 전달되도록 함 fun main(args: Array) { val ls = intArrayOf(1,2,3) printNumbers(*ls) } fun printNumbers..

    [코틀린 인 액션] 2장 정리

    2.1.3 변수 기본적으로 모든 변수를 val 키워드를 사용해 불변 변수로 선언할 것, 나중에 꼭 필요할 때만 var로 변경 초기화 식을 사용하지 않고 변수를 선언하려면 변수 타입을 명시 val answer: Int answer = 42 3. val 참조 객체는 불변일지라도 그 참조가 가르키는 객체의 내부 값은 변경될 수 있음 val languages = arrayListOf("Java") languages.add("Kotlin") 2.2.2 커스텀 접근자 1. 프로퍼티 게터 선언을 통해 클라이언트가 프로퍼티에 접근할 때마다 게터가 프로퍼티 값을 매번 다시 계산 fun main(args: Array) { val rect = Rectangle(3,3) val rect2 = Rectangle(3,5) pri..