자바의 싱글톤 패턴

      자바의 싱글톤 패턴에 댓글 없음

우테코 3주차 로또(수동) 미션을 하면서, 1주차에 썼던 enum을 또 어떻게 써먹을 수 있을지 고민을 해 보았다.

프로그래밍 요구사항 중: java enum을 적용해 프로그래밍을 구현한다.

우선 생각난 것은 한 번씩만 생성되면 되고 또 숫자 범위 등에 대해 검증이 필요한 로또 번호를 enum으로 만드는 것이었는데, 아무리 생각해도 깔끔한 코드라고 보기엔 어려웠다.

…그래서 1주차에는 등수와 상금을 표시할 때만 enum을 사용하고 그냥 로또 번호는 원시값인 int로 두고 로또 한 장에 해당하는 Lotto 클래스에서 여섯 개의 번호를 모두 검증하게끔 만들었다.

1주차 마무리와 함께 코로나19로 인한 재택수업이 결정되고, 루터회관에 모인 마지막 날에 1주차 페어였던 시카가 싱글톤 패턴에 대한 이야기를 해 주며 같이 만들었던 LottoMachine 클래스에 적용시킨 모습을 보여 주었다. 싱글톤 객체의 정의가 무엇인가. 찾아 보았다.

싱글톤 패턴이란 객체를 하나만 생성하여 생성된 하나의 객체를 어디에서든 참조하도록 하는 것이다.

즉 유틸리티 클래스를 만들거나, 불필요하게 매번마다 45개의 공을 모두 생성할 필요 없이 45개의 공이 포함된 인스턴스를 한 번만 생성하고, 공이 필요할 때 꺼내서 쓰도록 하자는 것이다.

싱글톤 패턴을 적용시킨 클래스는 생성자가 private이어야 한다. 단 하나의 인스턴스 이외의 새로운 인스턴스를 만들지 못하도록!

생성자의 내용을 보다시피 LottoMachine 객체는 단 한 번 생성될 때 1번부터 45번까지의 로또 번호(LottoNumber) 객체를 만들어 리스트에 넣고 가지고 있어야 한다.

생성자가 막혀 있는데 생성은 어떻게 하는가? 이건 이 쪽에서 담당한다.

LottoMachine의 정적 메소드인 LottoMachineSingletonHolder가 인스턴스를 만든다. 이 메소드는 getInstance()를 통해 호출된다.

LottoMachine을 사용할 땐 이렇게 getInstance()를 통해 매번 같은 인스턴스를 불러오게 된다.

댓글 남기기