본문 바로가기

Android/Kotlin

코틀린 object

코틀린에서 object는 클래스를 정의하면서 동시에 객체(인스턴스)를 생성한다.

대표적으로 싱글턴 객체를 만드는 예를 살펴보자.

OOP에서 객체가 하나만 필요한 경우가 많다. 이때 싱글턴 패턴을 통해 이를 구현한다.

 

자바에서는 보통 클래스 생성자를 private로 제한하고 정적인 필드에 그 클래스의 유일한 객체를 저장하는 싱글턴 패턴을 통해 이를 구현한다. 아래 코드를 참조하자.

class SingletonCls {
    private static SingletonCls singletonCls;
    private StingletonCls(){}
    public static SingletonCls instance() {
    	if (singletonCls == null) {
        	singletonCls = new SingletonCls()
        }
        return singletonCls;
    }
    
    public String getUserName() {
    	return "홍길동";
    }
}

class Memeber {
	void Test() {
    	String userName = SingletonCls.instance().getUserName()
        System.out.println(userName)
    }
}

>> 홍길동

 

코틀린은 객체 선언 기능을 통해 싱글턴을 기본 지원한다. 객체 선언은 object 키워드로 시작한다.

아래 코드를 참조하자.

object Member {
    val members = mutableListOf<Member>()
    
    fun getMemberCount() = members.size
    fun existMember(name: String): Boolean() {
		...
    }
}

Member.getMemberCount
Member.existMember

일반 클래스 객체와 달리 싱글턴 객체는 생성자 호출 없이 즉시 만들어진다. 따라서 생성자 정의가 필요가 없다.

변수와 마찬가지로 클래스 이름 뒤에 마침표(.)를 찍으면 객체에 속한 함수나 프로퍼티에 접근할 수 있다.

 

object 클래스도 클래스나 인스턴스를 상속할 수 있다. 어떤 공통적인 기능을 하는 클래스를 필요할 때마다 생성하는 것이 아닌 공통으로 하나만 있으면 된다. 예를 들어 "yyyy-MM-dd"형식의 날짜를 Date로 반환하는 기능을 살펴보자.

object ChangeStringToDate : SimpleDateFormat() {
    override fun parse(date: String): Date? {
    	...
    }
}

val date = ChangeStringToDate.parce("1999-12-31")

 

자바에서는 다음과 같이 사용이 가능하다.

ChangeStringToDate.INSTANCE.parce("1999-12-31")

 

코틀린 객체 선언은 자바 클래스로 컴파일된다. 이때 인스턴스 필드의 이름은 항상 INSTANCE다. 위 코드에서 INSTANCE의 필드 타입은 ChangeStringToDate다. 자바 코드에서 코틀린 싱글턴 객체를 사용하려면 정적 INSTANCE 필드를 통하면 된다.

'Android > Kotlin' 카테고리의 다른 글

Kotlin 뒤로 버튼을 한번 더 누르면 종료됩니다.  (0) 2022.11.02
코틀린 널에 대해서  (0) 2022.10.26
코틀린 원시 타입  (0) 2022.10.26
코틀린 클래스, 코틀린 프로퍼티  (0) 2022.10.26
코틀린은 무엇인가?  (0) 2022.10.25