반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Bbaktaeho

코틀린(Kotlin) 9. 연산자와 연산자 오버로딩(3) 본문

프로그래밍 (Programming)/코틀린 (Kotlin)

코틀린(Kotlin) 9. 연산자와 연산자 오버로딩(3)

Bbaktaeho 2019. 1. 30. 20:18
반응형

인덱스 연산자)

배열은 인덱스를 사용해서 저장된 요소를 불러오거나 변경할 수 있다.

인덱스 연산자인 [] 는 get()과 set() 함수로 오버로딩되므로 우리가 정의하는 컬렉션 클래스에서도 get()과 set()을 정의하여 인덱스 연산자를 오버로딩할 수 있다. 여기서 get() 은 요소의 값을 읽고, set() 은 해당 요소를 변경한다.

표기

코드

설명

arr[i]

arr.get(i)

arr의 인덱스 i 의 값

arr[i] = b

arr.set(i,b)

arr의 인덱스 i 의 값을 b로 변경

invoke 연산자)

함수를 호출할 때는 이름에 괄호를 붙여 사용한다. 그런데 클래스의 인스턴스도 이런 방법으로 호출 가능하다.

이때는 괄호연산자->() 를 오버로딩한 invoke() 함수에 operator 키워드를 지정하여 해당 클래스에 정의하면 된다. 그리고 그 클래스의 인스턴스를 생성한 후 참조 변수에 괄호를 붙여서 호출하면 invoke() 함수가 실행된다.

표기

코드

a()

a.invoke()

a(i)

a.invoke(i)

예제를 보자.

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
    val s = school("인천대학교")
    s(1,"임태호"//클래스의 인스턴스(객체) s로 괄호연산자를 사용
}
class school(val schoolName: String) {
    operator fun invoke(grade: Int, name: String){
        println(schoolName + " " + grade + "학년 " + name)
    }
}
cs

출력은

1
인천대학교 1학년 임태호
cs

s(1,"임태호") 이 코드가 s.invoke(1,"임태호") 로 변환된다.

타입 확인 연산자)

객체의 타입을 확인할 때 코를린 언어에서는 is를 사용한다.(자바는 instanceof 연산자를 사용한다)

표기

설명

a is 타입

a가 타입인가?

a !is 타입

a가 타입이 아닌가?

예제를 보는 게 좋겠죠?

1
2
3
4
5
6
7
8
9
10
fun main(args: Array<String>) {
    val s = school("인천대학교")
    if (s is school) println("타입이 맞다")
    else println("타입이 틀리다")
}
class school(val schoolName: String) {
    operator fun invoke(grade: Int, name: String){
        println(schoolName + " " + grade + "학년 " + name)
    }
}
cs

1
타입이 맞다
cs

또 다른 예제 1

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
    val obj = Tire() //객체를 생성
    if (obj is Car) println("타입이 맞다")
    else println("타입이 틀리다")
    if (obj is Tire) println("타입이 맞다")
    else println("타입이 틀리다")
}
open class Car {}
class Tire : Car() {} //클래스를 상속받을 때 "클래스이름()" 인터페이스는 "인터페이스이름"
cs

1
2
타입이 맞다
타입이 맞다
cs

또 다른 예제 2

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
    val obj = Car() //객체를 생성
    if (obj is Car) println("타입이 맞다")
    else println("타입이 틀리다")
    if (obj is Tire) println("타입이 맞다")
    else println("타입이 틀리다")
}
open class Car {}
class Tire : Car() {} //클래스를 상속받을 때 "클래스이름()" 인터페이스는 "인터페이스이름"
cs

1
2
타입이 맞다
타입이 틀리다
cs

참고로 open 키워드는 해당 클래스가 상속 가능하도록 할 때 지정하는 키워드이다.


반응형