[Java]Singleton Pattern에 대하여
git blog address : https://egjeon.github.io/
just my story
No effort betrayed.
egjeon.github.io
사실 tistory에 글을 올리기 전에 git에 내용 정리를 먼저 하였다.
내가 리스펙 하시는 분께서, git은 개발과 별개로 필수적으로 알아야 할 내용이기 때문에 찐 강의를 추천해주셨다.
정말 좋은 강의였다.
그리고 사실 내용 전부는 이해하지 못했지만 이전에, 현재도 생각 없이 하던 행위? 들이 비로소 조금이나마 정리가 되었고,
나는 프로젝트 repository용으로만 사용해야만 하는 줄 알았고, 정말 바보였다.
git을 블로그처럼 사용하는 것은 그분을 통하여 알게 되었다. 준우 님 짱. 다른 분들도 이 강의를 통하여 조금이나마 도움이 되면 좋겠다.
https://opentutorials.org/course/2708
지옥에서 온 Git (새 수업으로 대체) - 생활코딩
이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.�
opentutorials.org
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 생성자를 만들어 둠으로써, 외부에서 인스턴스 생성이 불가능하게 함을 알 수 있다.
하나의 객체만 존재함으로써, 위의 첨부한 이미지처럼 같은 주소 값을 참조한다.