public class Calc {
private static Calc current; //
static이 쓰이는 이유
private이 쓰이는 이유
public static Calc getInstance() {
// 외부에서 getInstance()로 반환
if( current == null ) {
// 초기값이 null이므로 최초로 호출된 경우
current = new Calc();
} // 객체 선언 1번
return current;
} // 초기값이 null이 아니고
// 이미 호출된 경우엔 그대로 반환
public static void freeInstance() {
current = null;
} // 객체에 null을 대입하면 메모리에서 삭제된다.
current 객체를 private으로 지정하였기 때문에, 객체를 메모리에서 간접적으로 할당하고 삭제하기 위한 메서드가 필요
객체를 메모리에서 제어하기 위해 null 사용
public class Calc {
private static Calc current;
public static Calc getInstance() {
if( current == null ) {
current = new Calc();
}
return current;
}
public static void freeInstance() {
current = null;
}
private Calc() { } // 싱글톤 객체 생성
기본생성자를 private형태로 정의
예시
public class Calc {
// ------싱글톤 객체를 생성하기 위한 준비 시작 -------------
private static Calc current;
public static Calc getInstance() {
if( current == null ) {
current = new Calc();
}
return current;
}
public static void freeInstance() {
current = null;
}
private Calc() { }
// ----------싱글톤 객체를 생성하기 위한 준비 끝 ----------
// ----------이 객체가 구현해야하는 기능 -----------------
public int plus(int x, int y) {
return x + y;
}
public int minus(int x, int y) {
return x - y;
public class Main01 {
public static void main(String[] args) {
Calc c1 = Calc.getInstance();
System.out.println( c1.plus(20, 10) );
// 참조처리를 생략하고 직접 사용하는 경우
System.out.println( Calc.getInstance().minus(20, 10) );
}
}
// 결과 : 30,10