객체 : 속성과 기능을 갖춘것
클래스: 속성과 기능을 정의한것
인스턴스 : 속성과 기능을 가진것중 실제하는것
자동차 (객체)
설계도 (클래스)
공장에서 만들어서 나온 자동차(인스턴스)

SingleTon: 하나만 생성해야할 객체를 위한 패턴 (Instance 생성)
package SingleTon;
public class SystemSpeaker {
static private SystemSpeaker instance; // 하나만 있어야하는 스피커
private int volume;
private SystemSpeaker() {
volume = 5;
// 다른데서 생성 못하게 하기 위해서 private
}
public static SystemSpeaker getInstance() { // getinstance 를 받기 위해서 static
if (instance == null) { // 스피커가 없으면
instance = new SystemSpeaker(); // 초기화 해줘야함
System.out.println("새로생성");
}else{
System.out.println("이미생성");
}
return instance;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
this.volume = volume;
}
}
package SingleTon;
public class Main {
public static void main(String[] args) {
SystemSpeaker speaker1 = SystemSpeaker.getInstance();
SystemSpeaker speaker2 = SystemSpeaker.getInstance();
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
speaker1.setVolume(11);
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
speaker2.setVolume(22);
System.out.println(speaker1.getVolume());
System.out.println(speaker2.getVolume());
}
}
싱글톤 패턴은 인스턴스를 한개 만들어서 다음에는 똑같은 인스턴스를 안 만들기 위해서다
만약 스피커가 100 개 있는데 싱글톤 패턴을 안쓰고 볼륨을 1 올리려면 100개 스피커를 1개씩 1을 올려야한다.
하지만 동일한 인스턴스이면 100개 여도 1개만 올려도 100개 다 올라간다. 동일한 인스턴스를 쓰기 때문이다
사용 이유는 요청마다 새로운 객체가 새롭게 생성되게 되면 메모리 성능에 대한 문제가 생기고 또한 객체를 새롭게 생성하는데
비용이 크다고 갓영한 쌤이 가르쳐주셨다 .
OCP 법칙을 위반하는 경우가 생기기 때문에 public 하고 static 한 메소드를 만들어야 한다.
private static final Systemspeaker instance = new Systemspeaker() 대신에
static final Systemspeaker instance; 이렇게 하고
밑에 Systemspeker getinstance 를 public 하게 열어둔다.
SingleTon 과 Sington Scope
Singleton -
싱글톤: 객체를 공유한다의 의미로 받아드렸다.
만약 메인 스피커의 볼륨을 조절하는 클래스를 만들었다면, 해당 객체를 만들고 볼류을 조절해야하지만,
객체가 계속해서 만들어지면 메인스피커의 본질이 흐려진다. 메인스프커가 여러개 생성되는 것이니까.
싱글톤 을 사용하면 똑같은 인스턴스에 접근한다.
SingleTone Scope
클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.
- 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다.
- 싱글톤 빈의 하나의 공유 인스턴스만 관리한다.
- private 생성자를 사용해서 임의로 new생성자를 사용하지 못하도록 막아야 한다. - 해당 bean definition과 일치하는 ID 또는 ID를 가진 빈에 대한 모든 요청은 스프링 컨테이너에서 해당 특정 빈 인스턴스를 반환한다. (스프링이 싱글톤 객체를 관리한다.)
- 스프링 컨테이너 종료시 소멸 메서드도 자동으로 실행된다.
스프링의 기본 값으 싱글톤스코프이다.
댓글