본문 바로가기

개발/Java

[Java] Singleton 과 static 차이

반응형

소개

Singleton 과 static의 차이를 설명하려고 한다.
이 글을 쓰게 된 이유: Singleton은 spring boot에서 bean의 개념이라고 다들 말하는데 객체를 하나만 생성한다는 것에 궁금증이 생겼다.
Static이랑 다를게 뭐지? 라는 생각이 들어 이 글을 쓰게 되었다.

SINGLETON vs STATIC

싱글톤(Singleton)과 static은 둘 다 객체나 메서드에 대한 개념이지만, 그 사용 목적과 동작 방식에서 차이가 있습니다.

  • 목적: 클래스의 인스턴스가 오직 하나만 생성되도록 하는 디자인 패턴입니다. 주로 객체의 공유나 중앙 집중적인 관리를 위해 사용됩니다.

  • 특징:

    • 클래스의 인스턴스가 하나만 존재하므로, 여러 곳에서 해당 인스턴스에 접근하여 데이터를 공유할 수 있습니다.
    • 주로 디자인 패턴으로 사용되며, Spring과 같은 프레임워크에서는 빈(Bean)으로 등록되어 싱글톤 스코프로 사용됩니다.
  • 예제:

      public class SingletonExample {
          private static SingletonExample instance;
    
          private SingletonExample() {
              // private 생성자로 외부에서의 인스턴스 생성을 막음
          }
    
          public static synchronized SingletonExample getInstance() {
              if (instance == null) {
                  instance = new SingletonExample();
              }
              return instance;
          }
      }
    

  • 목적: 클래스 레벨에 속하는 필드나 메서드를 나타냅니다. 객체의 생성과는 무관하게 클래스가 로드될 때 생성되어 클래스 내부에서 공유됩니다.

  • 특징:

    • 객체의 인스턴스와 무관하게 클래스 자체에 속하므로, 해당 클래스의 모든 인스턴스에서 동일한 값이 공유됩니다.
    • static 키워드가 붙은 필드나 메서드는 클래스명으로 직접 접근할 수 있습니다.
  • 예제:

      public class StaticExample {
          public static int sharedValue = 0;
    
          public static void increment() {
              sharedValue++;
          }
      }
    

  • 싱글톤은 주로 객체 인스턴스를 하나만 생성하여 여러 곳에서 공유할 때 사용되며, 디자인 패턴의 일종입니다.
  • static은 클래스 레벨에 속하는 필드나 메서드를 나타내며, 객체와 무관하게 클래스가 로드될 때 생성되어 클래스 내에서 공유됩니다. 클래스의 인스턴스와 관련이 없는 경우에 사용됩니다.
  • 각각의 사용 목적과 상황에 따라 싱글톤과 static을 적절히 선택하여 사용해야 합니다.
반응형