Notice
Recent Posts
Recent Comments
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 알고리즘
- 자바
- DataBinding
- 아키텍처패턴
- 백준
- bitmasking
- 싸피
- 투포인터
- tomtoc
- 탐탁삼성파우치
- 삼성역량테스트
- 안드로이드
- 등산로조성
- 삼성청년sw아카데미
- 코틀린
- #충무로맛집#골목식당#스테이크#
- Java
- 코딩테스트
- 탐탁노트북파우치
- 비트마스킹
- lateinit
- MVVM
- Android
- kotiln
- nullalble
- 안드로이드#코틀린#디자인패턴#싱글턴패턴#개발#앱개발
- Kotlin
- ssafy서울
- Higher-Order
- 삼성파우치
Archives
공상하는 개발자
[안드로이드/kotlin] 싱글톤 패턴 사용해보기 본문
반응형
※ 싱글톤 패턴이란?
- 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 디자인 패턴이다.
- 애플리케이션의 시작부터 종료까지 한 번의 생성으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용 할 수 있다.
- 싱글턴의 인스턴스는 전역적으로 사용되기 때문에 다른 클래스의 인스턴스들이 데이터를 공유 변경이 가능하다는 장점이 있다.
- 쉽게 말하면 한 번의 선언으로 모든 클래스에서 전역으로 사용 가능한 필드나 메서드를 만드는 것. (아무데서나 접근 가능한 필드나 메소드) ex) 유저 로그인 아이디
♬ 자바와 코틀린의 싱글턴 패턴
- 자바에서는 인스턴스 변수를 선언하고 생성자 및 정적 메서드를 추가하는 작업을 추가한다.
- 코틀린에서는 단 한 줄로 처리된다.
◈ 자바 코드
public final class SingleTon {
private static Singleton instance = null;
private Singleton() { }
public static synchronized Singleton
getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
◈ 코틀린 코드(한 줄이면 된다.)
object Singleton
☆ 여기서 잠깐! 정적 메서드란??
- static으로 선언한다.
- 클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출이 불가능하다.
- 유틸리티 함수를 만드는데 유용하게 사용된다.
★ object를 쓴 예
object GithubServicelmpl {
private const val BASE_URL = "https://api.github.com"
private val retrofit:Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service:GithubService = retrofit.create(GithubService::class.java)
}
▲ Companion object VS object
자바와 동일한 방식으로 사용하는 방법 : Companion object
class BBQ {
companion object {
const val chicken = "delicious"
fun wing() {
// Do something
}
}
}
companion object 내에 선언된 속성과 함수는 (클래스 이름).(필드/함수 이름) 형태로 바로 호출이 가능하다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ... Something ...
// BBQ.chicken() 함수 호출
BBQ.chicken()
}
결국 companion object는 클래스 내부에서 선언되고, object 클래스 외부에서 선언된다.
참고 출처 : https://takhyeongmin.github.io/2019/06/24/CompanionObjectVsObject/
https://takhyeongmin.github.io/2019/06/24/WhyUseSingleton/
반응형
'개발 > 안드로이드' 카테고리의 다른 글
[아키텍쳐 패턴] 2탄 : MVP 패턴 적용하기 (0) | 2020.01.19 |
---|---|
[아키텍처패턴] 1탄 : Model 분리하기 (0) | 2020.01.12 |
[안드로이드/android] PullRefreshLayout 을 이용한 당기면 피드 업데이트 구현 (0) | 2019.07.30 |
[안드로이드/android] 이미지 파일 이름 지정하기 (0) | 2019.07.30 |
[안드로이드/android] FCM 푸시알람 구현 (0) | 2019.07.22 |
Comments