객체에 getInstance() 메소드가 있으면 Singleton 방식으로 객체를 관리하는 것 이라고 한다.
1.싱글톤패턴 : 하나의 프로그램 내에서 하나의 인스턴스만을 사용해야하는 상황에 주로 사용,
앱이 시작될때 최초한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴.
사용이유 : 메모리 낭비를 방지하기 위해, 전역 인스턴스이기 때문에, 데이터 공유가 쉽다.
문제점 : 많은 데이터를 공유시킬경우, 수정이 어려워지고 테스트하기 어려워진다.
약간의 예시를 들겠다.
public static synchronized Appdatabase getInstance(Context context){
if(instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),Appdatabase.class,"memo_Database")
.allowMainThreadQueries()
.addMigrations(MIGRATION_1_2)
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
위의 예시는, 데이터베이스를 만들어놓은 것이다. 새롭게 데이터베이스를 인스턴스화해서 가지고 오는 것보다,
싱글톤 방식으로 한개의 인스턴스로서 쉽게 불러와 간단히 사용 할 수 있다.
public class MainActivity extends AppCompatActivity {
private Appdatabase db; //db
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = Appdatabase.getInstance(this);
}
}
--------------------------------------------------------------------------------
클래스, 객체, 인스턴스, 인스턴스화의 이해를 돋기 위해 예를 잘 들어 놓은 출처
붕어빵을 만들려면 붕어빵을 찍기 위한 틀이 있어야 한다. 틀이 준비되었다면 틀에 밀가루
반죽과 팥을 집어넣고 구워준다. 적당히 구워지면 틀에서 꺼낸다. 그로서 붕어빵이 탄생!
이 과정을 Class, Object, Instance의 관점에서 살펴보도록 하겠습니다.
우선 일대일 대응을 시켜 보도록 하죠.
o 붕어빵틀 = Class o 붕어빵 = Object
o 각각의 붕어빵 = Instance o 붕어빵을 굽다 = 인스턴스(Instance)화 하다
뭔가 확~ 머릿속을 지나가지 않나요?
그럼 붕어빵이란 Class에 대해 생각해 보도록 하죠!
붕어빵틀은 ‘밀가루 반죽’과 ‘팥’이라는 변수(member variable)를 가지고 있습니다.
그리고 ‘굽다’라는 메서드(member method)를 가지고 있습니다.
이것을 일반적인 class의 표현법으로 나타내 보면..
그럼 이제 붕어빵을 구워 볼까요?
일단 붕어빵틀에 밀가루 반죽과 팥을 집어넣겠습니다. 아! 하나만 만들면 저희가 먹을 수
없으니까 6개를 만들어 보도록 하죠..
각각의 붕어빵에는 저희의 이름을 붙이도록 하겠습니다.
각각의 붕어빵에 서로 밀가루 반죽과 밭의 양을 각각 다르게 집어넣었습니다.
이제 ‘굽다()’라는 메서드를 호출해서 붕어빵을 굽겠습니다..
붕어빵이 구워지고 있습니다~ 군침이 도는군요..^^ 지금 과정이 인스턴스(Instance)화
하고있는겁니다.
캬우~ 붕어빵이 다 구워졌습니다~^^ 드디어 객체들이 만들어 진거죠!!!
붕어빵들을 살펴보면 같은 틀에서 구워졌지만 모양들이 자신만의 개성을 가지고 있죠..
그 각각의 개성을 가진 녀석들을 즉, 실제 붕어빵들을 인스턴스(Instance)라고 부르는 겁니다.
------------------
'개발언어 > JAVA' 카테고리의 다른 글
안드로이드, 자바 개념 정리 (0) | 2021.01.26 |
---|---|
안드로이드 골뱅이 쓰는이유 (0) | 2021.01.13 |
안드로이드 Room 사용법 (feat.binding) (0) | 2021.01.08 |
Room이란? (0) | 2021.01.07 |
안드로이드 TODOLIST 만들기 (feat. SQL OpenHelper) (0) | 2021.01.05 |