세상을 더 편리하게
[Kotlin] 연산자 오버로딩
Programming/Kotlin 2020. 3. 18. 16:28

연산자 오버로딩 전에 연산자 오버로딩을 알아보기전에 연산자가 작동하는 시스템에 대해 알아볼 필요가 있다. 모든 연산자는 매소드를 통해서 작동한다. 3 + 4 라는 연산을 한다고 하자. 하지만 프로그래밍상에는 3.plus(4) 라는 매소드가 작동하는 것이다. 그렇기에 연산자는 모두 매소드 형태로 작동됨을 인지해야 연산자 오버로딩을 이해하는데 편리하다. 산술 연산자 class Print(var usedPage: Int, var ink: Double) { operator fun plus(p: Print): Print { return Print(this.usedPage + p.usedPage, this.ink + p.ink) } override fun toString(): String { return "used..

[Kotlin] 내부 클래스(2)
Programming/Kotlin 2020. 3. 18. 05:15

실드 클래스 ( Sealed Class ) 실드 클래스는 다음과 같은 특성을 지닌다. 추상클래스와 같기 때문에 객체를 생성할 수 없다 생성자는 private 이여야만 한다. 실드 클래스는 같은 파일 안에서만 상속이 가능하다. 블록 안에 선언되는 클래스는 상속이 필요한 경우 open 키워드로 선언될 수 있다. sealed class Result { open class Success(val message: String) : Result() class Error(val code: Int, val message: String) : Result() } class Status : Result() class Inside : Result.Success("Status") fun eval(result: Result): S..

[Kotlin] 내부 클래스(1)
Programming/Kotlin 2020. 3. 15. 10:11

중첩 클래스 중첩 클래스는 말 그대로 클래스 내부에 들어가있는 클래스이다. class Outer{ val ov = 5 class Nested{ val nv = 10 fun greeting() = "[Nested] Hello ! $nv" } fun outside(){ val msg = Nested().greeting() println("[Outer] $msg ${Nested().nv}") } } fun main() { val output = Outer.Nested().greeting() println(output) val outer = Outer() outer.outside() } 위의 15번 줄으 ㅣ코드를 보면 Outer().Nested() 가 아닌 Outer.Nested() 가 되어있다. 즉, Nest..

[Kotlin] 데이터 클래스
Programming/Kotlin 2020. 3. 15. 07:46

데이터 클래스는 데이터 전달을 위한 객체 DTO(Data Transfer Object)라고 불립니다. 데이터 클래스는 로직을 가질 수 없습니다. (데이터 표현 데이터 비교 메소드는 제외) 코틀린 데이터 클래스에서 내부적으로 자동 생성되는 메소드는 다음과 같습니다. 프로퍼티를 위한 게터/세터 비교를 위한 equals()와 키 사용을 위한 hashCode() 프로퍼티를 문자열로 변환해 순서대로 보여주는 toString() 객체 복사를 위한 copy() 프로퍼티에 상응하는 component1() ...2 등 [ 코틀린 프로퍼티 = 필드(변수) + 게터/세터 ] data class Customer(var name: String, var email: String) { var job: String = "Unknow..