-
[Java]Singleton Pattern에 대하여Just do it. 2020. 6. 28. 21:11반응형
git blog address : https://egjeon.github.io/
사실 tistory에 글을 올리기 전에 git에 내용 정리를 먼저 하였다.
내가 리스펙 하시는 분께서, git은 개발과 별개로 필수적으로 알아야 할 내용이기 때문에 찐 강의를 추천해주셨다.
정말 좋은 강의였다.
그리고 사실 내용 전부는 이해하지 못했지만 이전에, 현재도 생각 없이 하던 행위? 들이 비로소 조금이나마 정리가 되었고,
나는 프로젝트 repository용으로만 사용해야만 하는 줄 알았고, 정말 바보였다.
git을 블로그처럼 사용하는 것은 그분을 통하여 알게 되었다. 준우 님 짱. 다른 분들도 이 강의를 통하여 조금이나마 도움이 되면 좋겠다.
https://opentutorials.org/course/2708
Singleton Pattern에 대하여
현업에서, 협업 유틸 등을 만들거나, 할 때에 유용하게 쓰인다. 단 하나만 존재하는 인스턴스를 사용하는 패턴을 우리는
Singleton pattern이라고 부른다.
생성자는 private으로, static으로 유일한 객체를 생성해준다.
외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드를 구현해준다.new 연산자를 이용하여 여러 객체가 생성될 때에 문제가 될 수 있는 객체를 Singleton Pattern으로 방지해 줄 수 있다.
100번 불러도 똑같은 주소를 참조한다.
싱글톤 패턴 유틸로는, 날짜는 하나의 값을 참조하여야 하기 때문에, Calendar클래스를 생각할 수 있다.
Calendar호출 시 , new 하여 메모리에 직접적으로 인스턴스를 생성하지 않고Calendar calendar Calendar.getInstance(); new로 메모리에 올리지 않고, 이와 같은 문법으로, 사용하듯이
우리도 필요한 유틸을 만들 때에, 이러한 패턴으로 만듦으로써, 몇 번을 호출하여도, 변하지 않는 값을 확인할 수 있다.우선 예제로 만들어 둔 클래스를 main class에서 호출할 시에, 같은 주소 값이 할당되는 것을 알 수가 있다.
싱글톤 패턴 예제
//Class Company를 만든다고 가정하자 public Class Company{ private static Company instance = new Company(); // 인스턴스를 static으로 생성 해줌. private Company(){} // default 생성자가 불리지 않게 은닉시켜주어 선언해준다. public static Company getInstance(){ // getInstance의 이름을 가진 메서드를 정의 해준다. if(instance == null) instance = new Company(); // NULL일 경우가 없지만 체크하여 생성자가 new로 메모리에 올라가지 않은상태로 호출 당할 시에 , 한번 더 메모리에 올리는 작업을 한다. return instance; //반환. } }
public class Main { public static void main(String[] args) { //Company company1 = new Company();//The constructor Company() is not visible Error! Company company1 = Company.getInstance(); Company company2 = Company.getInstance(); System.out.println(company1); System.out.println(company2); } }
위의 예제만 보아도 확실히 알 수 있듯이, private 생성자를 만들어 둠으로써, 외부에서 인스턴스 생성이 불가능하게 함을 알 수 있다.
하나의 객체만 존재함으로써, 위의 첨부한 이미지처럼 같은 주소 값을 참조한다.
반응형'Just do it.' 카테고리의 다른 글
[Java] 자바 입출력 - 직렬화(Serialization) (0) 2020.09.08 [Java] 데코레이터 패턴 (Decorator Pattern) (0) 2020.09.08 REST란? REST API,RESTful 에 대하여. (0) 2020.06.10 [JAVA] 스레드, 멀티스레드에 대하여 알아보자. (0) 2020.04.15 [자료구조] 빅오 표기법 Big - O notation에 대하여 알아보자. feat. JAVA 소스 (0) 2020.04.10