본문 바로가기

분류 전체보기556

Kotlin] 13. invoke? 자바랑 다르게 코틀린은 정말 신기한 함수가 있는데, invoke라는 함수이다. 앞서 계속 말했지만 코틀린은 간단한 코드를 지향하는 함수이다. 예시를 본다. fun main(args: Array): Unit { val person = Person("Kotlin") person() } class Person(var name: String) { operator fun invoke() { println("name : $name") } } 결과 : name : Kotlin 뭔가 이상한 점이 보이지 않나? person이라는 객체를 선언해놓고, 굳이 객체 내의 함수 이름인 invoke를 호출하지 않아도 invoke 내부의 함수가 호출이 된다. 즉, invoke를 이용해 자주 호출해야 하는 함수를, 객체의 이름+()만.. 2020. 12. 7.
Kotlin] 12. 번호 붙은 접은 연산자 fun main(args: Array): Unit { val person = Person("Kotlin", "2020-02.15") println(person[0]) println(person[1]) println(person[-1]) person[0] = "Java" println(person.name) } class Person(var name: String, var birthday: String) { operator fun get(position: Int): String { return when (position) { 0 -> name 1 -> birthday else -> "알 수 없음" } } operator fun set(position: Int, value : String) { when(po.. 2020. 12. 7.
Kotlin] 11. 연산자 오버로딩 자바는 연산자 오버로딩을 제공하지 않는다. 그러나 코틀린은 연산자 오버로딩을 지원한다. 자주 쓰는 다섯개의 연산 기호만 대표적으로 본다. + plus - minus * times / div % rem 그럼 왜 이런걸 할까? 연산 대상이 숫자가 아닐 경우 쓴다. 예시를 본다. fun main(args: Array): Unit { val pt1 = Point(3, 7) val pt2 = Point(2, -6) val pt3 = pt1+pt2 val pt4 = pt3*6 val pt5 = pt4/3 pt3.print() pt4.print() pt5.print() } class Point(var x: Int = 0, var y: Int = 0) { operator fun plus(other:Point) : Po.. 2020. 12. 7.
Kotlin] 10. getter, setter 자바와 다르게 코틀린은 getter, setter을 선언해줄 필요가 없다. 그러나, 선언하고 임의로 값을 변경할 수도 있다. fun main(args: Array): Unit { val person = Person() person.age = -30 println(person.age) } class Person{ var age : Int = 0 get() { return field } set(value) { field = if(value >= 0) value else 0 } } 기존이라면, class Person{ var age : Int = 0 get() { return field } set(value) { field = value } } 가 생략된 값이 있는 것이다. 여기서 field는 프로퍼티 값이 .. 2020. 12. 7.
반응형