Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
Tags
- sqlite
- CollapsingToolbarLayout
- Algorithm
- hilt
- recyclerview
- Behavior
- Android
- 안드로이드
- 백준
- CustomView
- ViewModel
- room
- HTTP
- 알고리즘
- 알림
- 코틀린
- notification
- onLayout
- Navigation
- CoordinatorLayout
- activity
- Coroutine
- onMeasure
- kotlin
- DataBinding
- lifecycle
- BOJ
- AppBarLayout
- View
- LiveData
Archives
- Today
- Total
개발일지
Kotlin in A..Z (18) - companion object, object, 싱글톤 본문
싱글톤
싱글톤 패턴이란 전역 변수를 사용하지 않고 객체 하나만 생성하여 어디서든 참조할 수 있는 패턴입니다.
객체가 서로 동일한 정보를 가질 때 하나의 메모리만 유지해서 메모리 낭비를 막을 수 있습니다.
- object
- object는 접근 시점에서 하나의 객체가만 생성됩니다. 그렇기 때문에 주 생성자, 부 생성자를 정의할 수 없습니다.
- object 객체를 초기화 하기 위해선 init블록을 사용하면 되고 접근할 때 처음에만 실행됩니다.
- 자바에서 object를 접근하려면 INSTANCE 키워드를 사용하면 됩니다. (자바파일에서)
코드
object Math {
fun sum(vararg args: Int): Int {
var result = 0
for(num in args) {
result += num
}
return result
}
}
fun main() {
println(Math.sum(1, 2, 3))
}
결과
6
- object 표현식
코드
open class Man {
open fun fly() {
println("I Can't Fly")
}
}
fun main() {
val superman = object : Man() {
override fun fly() {
println("I Can Fly")
}
}
superman.fly()
}
결과
I Can Fly
- companion object
자바에서 static의 나열이 아닌 하나의 객체로 취급하여 좀더 명확한 의미를 지니고 싱글톤 패턴에 적합하다.
- static처럼 동작할 뿐 사실 static이 아닌 객체이다 (Companion 키워드로 접근 가능)
- 클래스 내 딱 하나만 쓸 수 있다.
- 인터페이스 내에도 정의할 수 있다.
- 상속 관계에서 companion 멤버는 가려진다.
- 코틀린 파일에 멤버 변수는 @JavaField를 명시하고, 멤버 함수는 @JavaStatic을 명시하면 자바 파일에서도 사용할 수 있다.
코드
class Parent {
companion object {
fun action() {
println("Parent")
}
}
}
class Child {
companion object {
fun action() {
println("Child")
}
}
}
fun main() {
Parent.action()
Child.action() // Child Companion Object의 action을 호출
Child.Companion.action() // 객체 처럼 사용
}
결과
Parent
Child
Child
- 이름이 있는 companion object
코드
class Base {
// companion object에 이름 붙이기
companion object Test {
fun action() {
println("Base Test")
}
}
}
fun main() {
Base.Test.action()
Base.action() // 이름을 생략하여 호출 가능
}
결과
Base Test
Base Test
- const val
상수 표현식으로 primitive type과 String형에만 사용가능하며 컴파일 시간에 상수처리를 하는 표현식이다.
object, companion object, main함수 밖에만 사용할 수 있다.
코드
const val start = 0
const val end = 5
fun main() {
for(i in start..end) {
println(i)
}
}
결과
0
1
2
3
4
5
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (20) - 추상 클래스 (0) | 2020.07.17 |
---|---|
Kotlin in A..Z (19) - 인터페이스 (0) | 2020.07.17 |
Kotlin in A..Z (17) - 지연 초기화와 by 위임 (0) | 2020.07.15 |
Kotlin in A..Z (16) - 프로퍼티 getter, setter (0) | 2020.07.15 |
Kotlin in A..Z (15) - 가시성 지시자 (0) | 2020.07.15 |
Comments