Singleton Pattern 싱클톤 패턴

김지원·2022년 6월 9일
0

Java

목록 보기
31/38

앞 게시물의 설계가 별로인 이유 :
아이언맨은 단 한명이다. new를 써서 객체화를 하게 되면 아이언맨 여러명 만들 수 있게 된다.
이 코드를 다른 개발자들에게 공유하게 되면 다른 사람이 마음대로 아이언맨을 더 만들 수 있다.
그래서 좋지 않은 코드다. 어벤져스멤버들은 단 한 명씩만 존재해야한다!

외부에서 new하면 안되고 new는 단 한번만 사용해야한다.. 아이언맨은 한명이니깐!!
=> 싱글톤 패턴!

Singleton Pattern 싱글톤 패턴

객체가 단 1개만 존재할 때 외부에서 new를 하지 못하게 막아주고 클래스 내부에서 new를 한 후 외부에서 선언이 아닌 사용만 해준다.

예시를 통해 알아보자.
single이라는 한 패키지 안에 Ironman, Stadium클래스를 만들어줬다.

private IronMan() {}
다른 클래스에서 아이언맨에 접근할 껀데 new을 하면 안되기 때문에 private으로 아이언맨의 생성자만드는 것을 막아줘야한다.

더 이상 객체를 만들 수 없게끔 (new를 할 수 없게) 만들어준다.

public static IronMan getInstance() {
	IronMan im = new IronMan();
	return im;
}

아이언맨은 객체가 단 1개이기 때문에 여기서 객체를 하나 직접 만들어줘야한다.

여기서 new한 이 객체는 외부에서 사용한다.
그러기 때문에 단 하나만 존재한다.(프로그램 실행중에는)

getInstance메서드는 아이언맨 타입을 리턴해준다.
getInstance를 통해서 아이언맨 타입의 i에 im의 주소값을 넣어준다.
어디서 접근하든 im의 주소값을 가지게 된다.

외부에서 클래스로 직접 접근할 때 메모리에 먼저올라가야하니깐 static을 붙여주자.

getInstance : 객체명 객체를 얻어온다는 의미

Ironman클래스 안에 im이라는 Ironman타입의 객체를 만들어 줬다.
이 객체를 Stadium클래스에서 사용할 것이다.


자 그럼 Stadium클래스에서 객체를 하나만 불러와보자.


Ironman클래스에서 new로 ironman 생성자를 호출하는 순간 오류가 난다.
왜냐하면 Ironman을 private로 설정해 다른 클래스 파일에서 사용하지 못하게 했기 때문이다. 즉, 객체 만드는 것을 막아둔것이다.

그렇다면 어떻게 사용을 할까?

객체를 만들어서 사용하고 싶다면 new 하지말고 미리 만들어 놓은 걸 사용해라.

클래스로 직접접근하자!

IronMan i = IronMan.getInstance();
이미 아이언맨 클래스안에 객체만들어놨고 getInstance로 받아오면 된다.

IronMan.fight();
단 한 명만(아이언맨 한명) 존재하고 걔가 "빔 발사"를 한다.

IronMan.fight();

getInstance, fight메서드를 static으로 설정해서 아이언맨으로 직접 접근할 수 있도록 했다.


walk를 여기서도 쓰고싶은데 static이 아니라서 직접 접근을 할 수가 없다.

i.walk();
i 객체를 만들어서 im주소값에 들어가보니 walk가 있더라.
그래서 그 주소값을 받은 i가 walk를 받을 수 있게된다.

이게 바로 싱글턴 패턴이다.

달력도 싱글턴 패턴이다 달력은 객체가 단 하나다. 시간이 두 개 존재하지 않는다.

0개의 댓글

관련 채용 정보