📢 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()
}
📢 *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"))))
}
✅ 코틀린의 다른것이 궁금할땐 아래 링크 확인
@evergreen_tree
좋은 글입니다