Just do it.

[Java]Singleton Pattern에 대하여

노력은배신안함 2020. 6. 28. 21:11
반응형

 

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 생성자를 만들어 둠으로써, 외부에서 인스턴스 생성이 불가능하게 함을 알 수 있다.

하나의 객체만 존재함으로써, 위의 첨부한 이미지처럼 같은 주소 값을 참조한다.

 

 

 

 

반응형