코틀린 Object -Part 2-

Ham's Velog·2022년 6월 21일
2
post-thumbnail

Companion Object

📢 Companion Object란?
→ 자바의 Static과 비슷한 개념이지만 명확히 다르다. 자바에서 Static 키워드 만으로 클래스 멤버를 하나의 독립된 객체로 여길수 없다. 하지만 Companion Object는 클래스 이름만으로 참조 접근이 가능하며 하나의 독립된 객체로 여긴다.

*Companion Object : 동반 객체

interface SampleInterface {
    companion object {
        val interfaceCOP = "Interface안의 Companion Object의 프로퍼티"
    }

    fun printUser()
}

class SampleClass {
    companion object: SampleInterface {
        val prop = "Companion object 프로퍼티"
        fun method() = "Companion object 메소드"

        override fun printUser() {
            println("SampleInterface 메소드")
        }
    }
}

fun main() {
    println(SampleClass.prop)
    println(SampleClass.Companion.method()) // 풀 로 사용할 시 가운데 Companion이 붙여짐

    val companion1 = SampleClass.Companion

    companion1.printUser()
    SampleClass.printUser()
}
  • Companion Object는 클래스 내 하나만 쓸 수 있다.
  • 인터페이스 내에도 Companion Object를 정의할 수 있다.
  • Companion Object에 이름을 지을 수 있다.
  • 상속 관계에서 Companion Object 멤버는 같은 이름일 경우 가려진다.

Object Declaration와 Singleton Pattern

📢 *Object Declaration
Object로 객체를 선언하여 싱글턴 패턴을 구현하는 것

📢 싱글턴 패턴?
객체의 인스턴스가 오직 1개만 생성되는 패턴이다. 대규모 소프트웨어보단 소규모 소프트웨어 에서 사용하기에 적합하다.

📢 싱글턴 패턴의 장점?
1. 최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지 한다.
2. 다른 클래스간 데이터 공유가 쉽다.

📢 싱글턴 패턴의 단점?
1. 구현코드가 많이 필요
2. 테스트가 어려움
3. 싱글톤의 사용은 전역상태를 만들수 있기 때문에 바람직하지 못함

*Object Declaration : 객체 선언

object DataProviderManager {
    fun registerDataProvider(provider: DataProvider) {
        // ...
    }

    val User() { 
				// ...
		}
}

fun main() {
	DataProviderManager.registerDataProvider(...)

	DataProviderManager.add(User("최상록", Job("백수", Address("GyungGido"))))
}
  • Object 객체는 생성자 사용 불가
  • Object 객체는 선언되자마자 초기화 되지않고 최초 접근시 초기화

✅ 코틀린의 다른것이 궁금할땐 아래 링크 확인
@evergreen_tree

profile
#안드로이드개발자

1개의 댓글

comment-user-thumbnail
2022년 6월 22일

좋은 글입니다

답글 달기