ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 싱글톤 패턴을 통해 배운 코드 통제의 중요성
    카테고리 없음 2023. 10. 29. 13:01

     

    객체 지향 프로그래밍을 할 때, 객체를 생성하는 대표적인 방법은 클래스를 이용하여 생성하는 것이다.

    아래는 클래스로 Human 객체를 생성하는 코드이다.

    class Human {
    	public String name;
        	public int age;
        
            public Human (String name, int age) {
                this.name = name;
                this.age = age;
            }
    }
    
    
    Human randomGuy = new Human("simon", 10);
    Human randomGirl = new Human("marry", 12);

     

    위 예시에서 알 수 있는 점은, 두 Human 객체가 서로 다른 이름과 나이를 가지고 있다는 점이다.

    서로 다른 사람이니 각자만의 이름과 나이를 가지고 있는게 당연해 보인다.

    여기서는 사람을 대상으로 했기 때문에,  Human 객체가 여럿 생성되는 것이 어색하지 않고, 사람 앞에 '서로 다른' 이라는 표현이 들어가는것 또한 이상할 게 없어 보인다.

     

    그런데, 이런 객체지향 프로그래밍 세상에 태양이 들어간다면 어떨까?

    위의 개념을 그대로 태양에 도입할 수는 없다.

    왜냐하면 이 우주에 태양은 단 하나만 존재하기 때문이다.

    '서로 다른' 이라는 형용사가 태양 이라는 고유명사 앞에 붙는 건 말이 되지 않는다. (심지어 '고유' 명사 라는 표현을 쓴다)

     

    클래스는 기본적으로 생성자를 통해 여러 객체를 생성할 수 있도록 디자인되어 있지만, 태양의 예시처럼 시스템 내에 단 하나의 객체만 존재해야 하는 경우에는 싱글톤 패턴을 쓸 수 있다. 위에서 이야기한 태양 객체를 싱글톤 패턴을 통해 구현해보자.

     

    class Sun {
    	private static Sun instance = new Sun();  // 유일하게 생성한 태양 객체
    	static float degreeAsCelsius = 6000;
        
            private Sun () {	// private 외부에서 Sun 의 객체를 생성할 수 없게 억제
    
            }
    
            public Sun getInstance() { // 유일한 Sun 객체를 얻어오는 메소드
            	if(instance == null) {
    	            return new Sun();
                	}
                	return instance;
            }
        
    }
    
    
    boolean IsSunUnique = Sun.getInstance() == Sun.getInstance() // true

     

    Sun 클래스 외부의 시스템에서는 Sun 객체를 마음대로 생성할 수 없다.

    다만 이미 생성된 Sun 객체를 조회하거나, 아직 존재하지 않는 Sun 객체를 딱 한 번 만들 수 있을 뿐이다.

    이를 통해 Sun 객체는 시스템 전체에 단 하나만 존재하게 되었다.

     

    싱글톤 패턴에 대해서 설명한 여러 글들을 보고, 내 나름대로 이해한 바를 정리해보았다.

    항상 new 생성자() 키워드로 객체를 새로 생성하는 코드에서 뭔가 위화감을 느낀 적이 많았는데,

    어느 객체가 시스템 내에서 유일해야 하는 경우에도 객체를 추가로 생성하는 실수를 막을 수 있게 해준다는 점이 맘에 들었다.

     

    역시 설계가 잘 된 프로그램은 요구사항 변화에 유연하게 반응하면서도, 코드의 변경에 있어서는 최대한의 통제를 가하는 것이 중요하다고 생각하는 요즘이다.

     

     

     

     

Designed by Tistory.