본문 바로가기
Programming/Kotlin

[Kotlin] 코틀린 뽀개기 - object 완벽 정리

by 코딩의성지 2019. 12. 9.

하이하이 !!! 오늘은 object라는 키워드를 완벽하게 정리해보려고 한다.

 

사실 이전에 우리가 object를 쓴 적이 있다. 그런데... 혹시 기억안나는 사람 손! 

 

오 없네~~~ ㅎㅎㅎ 부끄러워서 손 안드신분은 이거 보고 오자.

 

https://devkingdom.tistory.com/59?category=816253

 

[Kotlin] 코틀린 뽀개기 - 중첩 클래스 (Nested Class) 사용하기

안녕~~!! 여러분 오늘은 코틀린에서 중첩 클래스를 사용하는 방법에 대해 공부해 볼거다!! 중첩 클래스 (Nested Class) 중첩 클래스는 클래스 안에 클래스가 있는 것을 의미한다. 밖에 있는 클래스를 OuterClass..

devkingdom.tistory.com

우리는 분명히 분명히 !! 익명 중첩 클래스를 만들때 object를 사용하는 걸 배웠었다. 오늘은 저번에 썼던 저 object에 대해 공부해 볼것이다.

 

object 란?

 

이 키워드는 따로 이름이 존재하지 않는 객체를 의미한다고 생각하면 된다. object를 사용하면 따로 클래스 없이 객체를 생성할 수 있다. 아래 예제를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fun main(args: Array<String>) {
    var obj1 = object {
        var temp1 = "hi"
        var temp2 = 7
        var temp3 = 1.1
 
        fun objectMethod() {
            print("object method")
        }
    }
 
    println(obj1.temp1)
    println(obj1.temp2)
    println(obj1.temp3)
    obj1.objectMethod()
}
 

 

자 보면 obj1 이라는 객체에 object라는 키워드를 이용해서 마치 클래스를 선언하듯이 마술같이 객체를 만드는 것을 볼 수 있다. ㅎㅎㅎ

 

추상클래스나 인터페이스에서의 object 활용

 

우리가 익명 중첩클래스를 공부 했을 때, 익명 중첩 클래스를 사용하면  추상클래스나 인터페이스에 정의된 메서드를 오버라이딩 해서 사용하려고 할때 상속받은 클래스를 따로 안 만들고 사용 할 수 있다고 공부했었다. 이제 아래 예제를 보면  좀 더 이말이 와닿을 거라 생각한다.

 

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
fun main(args : Array<String>) {
    var temp1 = object : AbstaractClass() {
        override fun abstractMethod() {
            println("abstarct method 구현")
        }
    }
 
    var temp2 = object : Interface {
        override fun interfaceMethod() {
            println("interface method 구현")
        }
    }
 
    temp1.abstractMethod()
    temp2.interfaceMethod()
}
 
abstract class AbstaractClass {
    abstract fun abstractMethod()
}
 
interface Interface {
    fun interfaceMethod ()
}
 
 
 

위의 코드를 보면 추상클래스나 인터페이스를 따로 생성하지 않고 바로 객체로 만드는 것을 볼 수 있다. ㅎㅎ 이전에 배웠던 익명 중첩클래스는 파라미터에 저 object 객체를 넣어준 것이다. ㅎㅎ 이제 이해 되지?

 

static 처럼 사용하는 object

 

object의 는 java의 static 과 비슷한 개념이라 할 수 있다. object 키워드로 객체를 만들면 객체의 이름으로 바로 멤버나 메서드에 접근할 수 있다. 아래 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fun main(args : Array<String>) {
    println(Object.var1)
    Object.method1()
}
 
object Object {
    var var1 = "변수"
 
    fun method1() {
        println("메서드")
    }
}
 
 
 
 

딱 봐도 !! Java 의 static 같지 않은가 ㅎㅎ

 

object 키워드로 Factory method 만들기

 

object 키워드를 이용하면 팩토리 메서드도 만들 수 있다. 아 팩토리 메서드란, 메서드 에서 객체를 생성해서 리턴하는 걸 의미한다. ㅎㅎ 잘 모르겠으면 구글링해서 팩토리 메서드에 대해 공부좀 해보길 권한다.

 

1
2
3
4
5
6
7
8
9
10
11
fun main(args: Array<String>) {
    var temp = FactroyClass.create()
}
 
class FactroyClass {
    companion object {
        fun create() : FactroyClass {
            return FactroyClass()
        }
    }
}
 

아 팩토리 메서드를 구현할 때는 companion 이라는 키워드가 필요하니 꼭 명심하도록하자 !

오늘은 object에 대해 알아보았다. 궁금한 점 있으면 댓글로 말해주라 ! 그럼 모두들 즐거운 코딩하자 !

반응형

댓글