본문 바로가기
Java

[JAVA] Static과 Singleton 패턴

by 임혁진 2025. 1. 11.

StaticSingleton 패턴은 Java에서 객체와 데이터를 효율적으로 관리하기 위한 중요한 개념입니다.


1. Static 개념 및 활용

Static은 객체마다 공유되는 동일한 값을 가지거나, 객체 생성 없이 클래스 레벨에서 직접 접근해야 할 때 사용하는 키워드입니다.

Static 멤버 변수

  • Static 변수는 객체들이 공유하는 값입니다.
  • 일반 변수는 각 객체마다 고유한 값을 가지지만, Static 변수는 클래스 레벨에서 생성되며 모든 객체가 동일한 값을 참조합니다.
public class Count {
    public int a; // 일반 변수
    public static int b; // 정적 변수
}

 

예제: Static 변수 사용

Count c1 = new Count();
c1.a++; // 객체별로 증가
c1.b++; // 모든 객체가 공유

Count c2 = new Count();
c2.a++; 
c2.b++; // c1, c2 모두 같은 값을 공유

System.out.println("c1.b: " + c1.b); // Static 변수는 동일
System.out.println("c2.b: " + c2.b);

결론:

  • Static 변수는 객체와 무관하게 클래스명.변수명으로도 접근 가능합니다.
  • 객체 생성 없이도 사용할 수 있어 공유된 값을 관리하는 데 유용합니다.

Static 메소드

  • Static 메소드는 정적 변수만 사용할 수 있습니다.
  • 일반 변수는 객체를 생성한 후에만 접근할 수 있습니다.
public static int method2() {
    b++; // Static 변수 접근 가능
    Count c = new Count(); // 객체 생성 후
    c.a = 10; // 일반 변수 접근
    return b;
}

Static 메소드의 특징

  1. 클래스 레벨에서 호출 가능 (클래스명.메소드명).
  2. 정적 변수만 직접적으로 사용 가능.
  3. 객체 생성 후 일반 변수도 간접적으로 사용 가능.

Static 초기화 블록

  • Static 변수의 초기화 작업을 수행하는 블록으로, 클래스가 메모리에 로드될 때 단 1회 실행됩니다.
static {
    company = "LG";
    System.out.println("Static 초기화 블록 실행");
}

2. Singleton 패턴

Singleton 패턴은 객체를 하나만 생성하도록 제한하는 디자인 패턴입니다.

Singleton 구현 단계

  1. 정적 멤버 변수로 클래스의 유일한 객체를 생성.
  2. **생성자에 private**를 붙여 외부에서 객체 생성을 막음.
  3. 정적 메소드로 객체를 반환.
public class Person {
    // 1. 유일한 객체 생성
    private static Person instance = new Person();
    
    // 2. 생성자 private 선언
    private Person() {}
    
    // 3. 객체 반환 메소드
    public static Person getInstance() {
        return instance;
    }
}

 

사용 예제

Person p1 = Person.getInstance();
Person p2 = Person.getInstance();

System.out.println(p1 == p2); // true (같은 객체를 참조)

Singleton의 장점

  1. 메모리 절약: 객체를 하나만 생성하므로 메모리 낭비를 줄임.
  2. 데이터 공유: 여러 곳에서 동일한 데이터를 사용할 수 있음.
  3. 글로벌 접근: 어디서든 동일한 인스턴스를 호출 가능.

Static vs Singleton

 

Static vs Singleton

 

특징 Static Singleton
접근 방식 클래스명으로 직접 접근 getInstance() 메소드로 접근
객체 생성 객체 생성 불필요 객체를 한 번만 생성
데이터 공유 모든 객체가 공유 하나의 인스턴스로 데이터 공유
수명 프로그램 종료 시까지 유지 인스턴스가 참조되지 않으면 GC 대상

요약

  • Static: 클래스 단위로 동작하며, 객체 생성 없이 공유 데이터를 관리.
  • Singleton: 특정 클래스의 객체를 하나만 생성해, 데이터의 일관성을 보장.