본문 바로가기

개발 코딩 정보 공유/안드로이드 자바 코틀린

코틀린사용 - 자바static, 객체식, 객체선언, 컴패니언

 

코딩 공부 / pxhere

 

코틀린에서 편리한 몇가지 사용 방법


객체 선언

코틀린을 사용하다 보면 자바에서 사용하던 부분을 비슷하게 처리하려면 어떻게 해야하지?
하는 부분이 생깁니다. 자바에서 싱글턴 패턴의 구현 그리고 익명클래스 등을 살펴 보겠습니다.

 

 

public class SingleTest {
private static SingleTest instance;

private SingleTest(){
}

public synchronized static SingleTest getInstance(){
if(instance != null){
instance = new SingleTest();
}
return instance;
}

}



자바에서 싱글턴 구현은 보통 이런식이죠?
너무 장황하며, 복잡합니다.
코틀린에서는 object 키워드를 사용해서 간단하게 싱글턴 구현이 가능합니다.

 

object SingleTest{
fun testFunc(){
}
}



이것이 코틀린에서 싱글턴 객체의 전부 입니다.
이미 객체를 생성은 자동화되며, 내부에 펑션을 그저 사용하면 됩니다.

 

SingleTest.testFunc()

 

* 코틀린에 정의하고 자바에서도 동일하게 사용할수 있습니다.
객체선언의 사용에서 기본적으로 지연 초기화 속성을 가지고 있습니다.
(사용하지 않으면 초기화 하지 않음)




익명클래스

자바의 익명 클래스는 코틀린에서 객체식 이라고 표현됩니다.
사용 방법은 아래와 같습니다.(역시나 object 키워드를 이용하죠)

 

 

object : BroadCastReceiver(){
//...
}



클래스 내부에 정의해주면 됩니다. 
자바보다 오히려 이해가 쉽네요. 



캐패니언객체

코틀린에서는 자바에서 처럼 static 정적멤버를 정의 할수 없습니다.
그렇다면? 어떻게...
컴패니언 객체를 이용하면 됩니다.
클래스 안에 아래와 같이 정의 할수 있습니다.

 

companion object{
//...
}

 


컴패니언 객체의 경우 싱글턴 이며, 클래스당 하나의 객체만 허용합니다.
클래스에서는 컴패니언 객체 내부접근이 가능하며, 그 반대의 경우는 불가합니다.
아래의 코드를 한번 보겠습니다.


class car{
init{
count++ //클래스에서는 컴패니언에 접근이 가능
}

companion object{
var count:Int = 0
}

}



외부에서는 아래 와 같이 사용할수 있습니다. (자바 static 이라고 보면됩니다)

 

 

Car.count

 


클래스(outer)에 의해 컴패니언 객체가 생성되며, 이 또한 지연 초기화 속성을 가지고 있습니다.
객체의 멤버에 처음 접근할때 컴패니언객체가 생성됩니다. (Car 클래스 객체가 생성되는건 아님.)


자바와 비슷한 개념이지만 차이가 조금 있습니다.
싱글턴의 자동구현으로 편리한 사용이 가능합니다.
적재적소에 사용하면 강력한 무기가 될것 같네요.

그럼이만~