코틀린 4

[KOTLIN] 연산자 오버로드를 할때는 의미에 맞게 사용

연산자 오버로딩 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법 (자바에서 Iterable 객체에 대해 for Loop를 사용할 수 있는 것 과 비슷함) 산술 연산자 오버로딩 자바는 원시 타입이 String에 대해서만 산술 연산자를 지원하지만 코틀린은 다른 클래스에서 산술연산자를 오버로딩하면 그대로 사용할 수 있음 이항 산술 연산자 오버로딩 data class Point(val x: Int, val y: Int) { operator fun plus(other: Point) : Point{ return Point(x + other.x, y + other.y) } } val p1 = Point(10, 20) val p2 = Point(30, 40) println(p1 + p2) // Point(..

KOTLIN 2022.07.03

[KOTLIN] NULLABLE UNIT 을 리턴하지 말라 (이펙티브코틀린)

코틀린 Unit, Nothing 타입 //Unit 예시 fun report() { // 아무것도 반환하지 않으면 return Unit 이 반환된다. } //Nothing 예시 //fail에서 Exception이 발생하면 user는 Nothing 타입이 됨 //Error: Type mismatch: inferred type is "User" but "Nothing?" was expected var user = if ( isPass() ) 42 else fail("Not Ready") Unit : 함수가 끝났으나 아무 것도 반환하지 않은 경우 Nothing : 함수가 끝이 나지 않은 경우 Unit을 리턴하면 안되는 이유 // Unit? 을 이용하는 경우 fun verifyKey(key: String): Un..

KOTLIN 2022.07.03

[KOTLIN] LATEINIT / LAZY

LateInit 변수에 객체를 할당하는 것을 선언과 동시에 하지 않고 할당하는 작업을 뒤로 미루게 해줌 Nullabled 하지 않는 변수를 선언하면서 할당하는 작업을 뒤로 미루고 싶을 때 사용 LateInit은 mutable 변수만 가능하기 때문에 var키워드 가진 변수에만 사용이 가능함 LateInit 예제 fun main() { val lateInit = LateInitSample() println(lateInit.getLateInitText()) lateInit.text = "할당완료" println(lateInit.getLateInitText()) } class LateInitSample { lateinit var text: String fun getLateInitText(): String { /..

KOTLIN 2022.05.22

[KOTLIN] OBJECT 키워드

Object 키워드 Object 키워드는 object expression(객체 표현식) 이랑 object declartion(객체 선언) 두가지 방법으로 사용 object expression으로 익명 클래스의 객체를 생성할 때 사용 object declaration으로 사용시 접근 시점에서 하나의 객체만 생성됨 코틀린은 Object 키워드를 통해 싱글턴 패턴을 쉽게 사용 가능함 object declaration과 companion object를 이해하기 위해 작성 Object declaration object Car { fun print() { println("자동차") } } object 키워드를 붙여서 생성해주면 싱글톤 패턴이 적용됨 코틀린은 object declaration을 통해 내부적으로 thr..

KOTLIN 2022.05.07