ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Singleton Pattern 싱글톤 패턴
    JAVA/JAVA 2020. 2. 11. 17:19

    Singleton Pattern 싱글톤 패턴

    객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴

    • 객체를 하나만 생성한 뒤 공유해서 사용
    • 웹에서 자주 사용되는 기법
      동시접속을 효율적으로 처리할 수 있음
    • 메모리 절약 목적

    Design Pattern 디자인 패턴

    객체 지향 프로그램을 어떻게 구현해야
    좀 더 유연하고 재활용성이 높은 프로그램으로 만들 수 있는지를 정리한 내용

    • 프로그램 특성에 따른 설계 유형을 이론화한 것
    • 특정 알고리즘이나 프로그래밍 언어를 위한 라이브러리가 아니라
      객체 지향적으로 설계하는 방법을 설명한 것

    싱글톤 패턴 작성법 with 예제

    단계 ①_생성자에 private 부여

    컴파일러가 기본 생성자를 만들지 못하게 하고
    외부 클래스에서 임의로 해당 클래스의 인스턴스를 생성하지 못하도록 함

    package j200211;
    
    public class SingTest {
        // 생성자에 private 부여
        private SingTest() {
        }
    
    }

    단계 ②_클래스 내부에 static으로 유일한 인스턴스 생성

    프로그램 내에서 사용할 인스턴스가 하나는 필요하기 때문에
    클래스 내부에서 인스턴스 생성 후 외부에서 접근하지 못하도록
    pivate 접근 제어자 부여

    package j200211;
    
    public class SingTest {
    
        // 유일한 인스턴스 생성, 공유를 위해 static으로 지정
        private static SingTest st = new SingTest(); 
    
        private SingTest() {
        }
    
    }

    단계 ③_외부에서 참조할 수 있는 public 메소드 작성

    private으로 설정된 유일한 인스턴스를
    외부에서도 사용할 수 있도록 public 메소드 작성

    외부 클래스에서 해당 클래스의 인스턴스를 생성할 수 없기 때문에
    인스턴스 반환 메소드는 반드시 static으로 선언해야 함

    package j200211;
    
    public class SingTest {
    
        private static SingTest instance = new SingTest();
    
        private SingTest() {
        }
    
        // 외부에서 인스턴스를 참조할 수 있도록 getInstance() 메소드 작성
        public static SingTest getInstance() {
        
            // synchronized: 객체 참조시 작업이 중복되지 않도록 함
            synchronized (SingTest.class) {
            
                // instance가 없다면 instance 변수에 객체 생성
                if (instance == null) {
                    instance = new SingTest();
                }
                
                // instance 정적 멤버 변수 반환 → 외부 참조 가능
                return instance;
            }
    
        }
    
    }
    

    단계 ④_실제 사용 코드 작성

    package j200211;
    
    public class Test {
    
        public static void main(String[] args) {
            // 객체 생성, SingTest 클래스의 인스턴스를 반환 받음
            SingTest st1 = SingTest.getInstance();
            SingTest st2 = SingTest.getInstance();
    
            // 동일한 인스턴스인지 비교
            if (st1 == st2) {
                System.out.println("st1 주소: " + st1);
                System.out.println("st2 주소: " + st2);
                System.out.println("같은 인스턴스 입니다.");
            }
            /*
            st1 주소: j200211.SingTest@15db9742
            st2 주소: j200211.SingTest@15db9742
            같은 인스턴스 입니다.
            */
        }
    
    }

    디자인 패턴 중 하나인 싱글톤 패턴에 대해 알아보았습니다.

    싱글톤 패턴은 객체를 하나만 생성한 뒤 그것을 공유해서 사용하도록 하는 설계 방식을 의미합니다.

    메모리 절약과 동시 접속 처리에 자주 쓰이는 패턴이라고 하니 알아둘 필요가 있겠습니다.

    또한 디자인 패턴의 경우 객체 지향 프로그래밍 언어라면 대동소이하게 참조할 수 있기 때문에

    다른 객체 지향 언어를 배울 때에도 도움이 될 수 있을 것입니다.

    댓글

Designed by Tistory.