개발/JAVA
JAVA의 Static과 Singleton 패턴 쉽게 이해하기
예니03
2025. 2. 20. 08:49
반응형
자바를 배우다 보면 static과 Singleton 패턴이라는 개념을 자주 접하게 됩니다. 처음에는 어렵게 느껴질 수 있지만, 한 번 이해하면 아주 유용하게 활용할 수 있어요! 이번 글에서는 간단한 예제를 통해 static과 Singleton 패턴이 무엇인지 알아보겠습니다.
1. Singleton 패턴이란?
Singleton 패턴은 클래스의 인스턴스를 하나만 생성하고, 어디서든 이 인스턴스를 공유하도록 하는 디자인 패턴입니다. 프로그램에서 하나의 객체만 필요할 때 사용하면 좋습니다. 예를 들면 데이터베이스 연결, 설정 관리, 로깅 시스템 등이 있습니다.
Singleton 패턴 구현하기
// Singleton.java
package com.javaex.oop.staticmember;
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// private 생성자 -> 외부에서 new Singleton() 불가능!
}
public static Singleton getInstance() {
return instance; // 유일한 인스턴스 반환
}
}
위 코드에서 private 생성자를 사용해 외부에서 객체를 생성하지 못하게 막았습니다. getInstance() 메서드를 통해 항상 같은 객체를 반환하도록 했습니다.
Singleton 패턴 테스트하기
// SingletonApp.java
package com.javaex.oop.staticmember;
public class SingletonApp {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println("s1 = " + s1);
System.out.println("s2 = " + s2);
// 두 객체가 같은지 확인
System.out.println("s1 == s2 ? " + (s1 == s2)); // true
}
}
실행 결과
s1 = com.javaex.oop.staticmember.Singleton@15db9742
s2 = com.javaex.oop.staticmember.Singleton@15db9742
s1 == s2 ? true
두 개의 변수를 만들었지만 같은 객체를 가리키고 있습니다! 즉, Singleton 패턴이 잘 적용되었습니다.
2. Static 키워드란?
static 키워드는 클래스에 속하는 변수나 메서드를 만들 때 사용합니다. 즉, static이 붙은 변수나 메서드는 객체를 생성하지 않아도 사용할 수 있습니다.
Static 변수와 인스턴스 변수 차이점
// StaticEx.java
package com.javaex.oop.staticmember;
public class StaticEx {
public static int refCount; // static 변수 (공유됨)
public static String classVar; // static 변수
public String instanceVar; // 인스턴스 변수
// static 블록 (클래스 로딩 시 한 번만 실행)
static {
refCount = 0;
classVar = "Static Member";
System.out.println("클래스 영역 초기화");
}
// 생성자
public StaticEx() {
refCount++;
System.out.println("refCount: " + refCount);
}
}
refCount와 classVar는 static 키워드가 붙어 있기 때문에 모든 객체가 공유하는 변수입니다.
Static 변수 테스트하기
// StaticExApp.java
package com.javaex.oop.staticmember;
public class StaticExApp {
public static void main(String[] args) {
StaticEx s1 = new StaticEx();
System.out.println("refCount: " + StaticEx.refCount);
StaticEx s2 = new StaticEx();
System.out.println("refCount: " + StaticEx.refCount);
StaticEx s3 = new StaticEx();
System.out.println("refCount: " + StaticEx.refCount);
}
}
실행 결과
클래스 영역 초기화
refCount: 1
refCount: 2
refCount: 3
refCount 변수가 모든 객체에서 공유되기 때문에, 새로운 객체가 생성될 때마다 값이 증가하는 것을 확인할 수 있습니다.
3. Static과 Singleton 패턴의 차이점
구분 | Singleton 패턴 | Static 변수 |
객체 생성 | 단 하나의 객체 유지 | 객체 생성 없이 사용 가능 |
메모리 사용 | 필요할 때만 메모리를 차지 | 프로그램 종료 전까지 메모리 유지 |
상태 유지 | 상태를 가질 수 있음 | 보통 상태 없이 공유 데이터 저장 |
사용 예시 | 데이터베이스 연결, 설정 관리 | 상수, 유틸리티 메서드 (Math.PI, System.out) |
마무리
이번 글에서는 Singleton 패턴과 static 키워드에 대해 알아보았습니다.
- Singleton 패턴은 하나의 인스턴스만 유지하는 디자인 패턴으로, 데이터베이스 연결, 설정 관리 등에 유용합니다.
- static 키워드는 클래스에 속하는 변수와 메서드를 만들 때 사용하며, 객체를 생성하지 않아도 접근할 수 있습니다.
둘의 차이를 잘 이해하면 프로그램을 더 효율적으로 설계할 수 있습니다! 🚀
반응형