User.java
package kr.co.kihd.singleton;
public class User {
//1)해당 클래스 자신의 타입으로 정적 멤버 선언과 동시에 생성함.
private static User singleton = new User();
//기본생성자 접근제어자 private로 변경
//2)해당 클래스를 외부에서 new 연산자로 인스턴스를 생성 못하게 막아놓은것.
private User() {
}
//3)해당 클래스 멤버의 주소를 넘겨주기(공유)
//외부에서 호출할수 있는 getter() 메서드를 제공
public static User getInstance() {
return User.singleton;
}
}
UserTest.java
package kr.co.kihd.singleton;
import java.util.Calendar;
import java.util.Date;
public class UserTest {
public static void main(String[] args) {
//User user1 = new User();
User user1 = User.getInstance();
User user2 = User.getInstance();
System.out.println(" user1의 주소 : " + user1);
System.out.println(" user2의 주소 : " + user2);
//Object 클래스의 equals() : 주소 비교
if(user1.equals(user2)) {
System.out.println("같은 객체 입니다.");
}else {
System.out.println("다른 객체 입니다.");
}
//객체의 == 연산자 : 주소값 비교연산
if(user1==user2) {
System.out.println("같은 객체 입니다.");
}else {
System.out.println("다른 객체 입니다.");
}
/*
* 싱글톤 패턴을 사용하는 이유:
* 단 하나의 인스턴스를 생성해서 서로 공유를 원하고자할 때 사용
* ex) 사용자 환경설정, 커넥션 풀(DB연동 리소스), 스레드풀, OS의 시간이나 날짜등.
*/
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);
}
}