반응형
싱글톤이란
객체의 인스턴스가 오직 하나만 생성되어 사용하는것
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {} // 생성자는 외부에서 생성못하게 private 지정
public static Singleton getInstance() {
return instance;
}
}
위 코드는 싱글톤이 유지되는 인스턴스이다.
장점
- 무분별한 객체 인스턴스를 생성하지 않아도 된다.
- 메모리 측면에서 굉장히 효율적
- 이미 만들어진것을 사용하다보니 사용속도에서도 이점
- 클래스 인스턴스이기때문에 데이터 공유하기에 쉽다.
싱글톤 주의점
싱글톤 사용하여 공유필드를 사용하면, 문제가 생긴다.
1. StatefulService.java
private int price;
public void order(String name, int price){
System.out.println("name = " + name + ", price = " + price);
this.price = price;
}
public int getPrice(){
return price;
}
2. StatefulServiceTest.java
@Test
void statefulServiceSingleton(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
StatefulService statefulService1 = ac.getBean("statefulService", StatefulService.class);
StatefulService statefulService2 = ac.getBean("statefulService", StatefulService.class);
//A사용자 1만원 주문
statefulService1.order("userA", 10000);
//B사용자 2만원 주문
statefulService2.order("userB", 20000);
int price = statefulService1.getPrice();
//결과는 뒤에 주문한 20000이 나오게된다.
System.out.println(price);
}
위에서 아래로 변경된 공유하는 필드가 없는 무상태로 만들어야한다.
1. StatefulService.java
public int order(String name, int price){
return price
}
2. StatefulServiceTest.java
@Test
void statefulServiceSingleton(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
StatefulService statefulService1 = ac.getBean("statefulService", StatefulService.class);
StatefulService statefulService2 = ac.getBean("statefulService", StatefulService.class);
//A사용자 1만원 주문
int userAPrice = statefulService1.order("userA", 10000);
//B사용자 2만원 주문
int userBPrice = statefulService2.order("userB", 20000);
//결과는 A사용자가 주문한 금액을 그대로 return 받기 때문에 공유되지 않아 10000이 나온다.
System.out.println(userAPrice);
}
반응형
'공부 > 과거 자료' 카테고리의 다른 글
[Java] 클래스메서드, 인스턴스메서드 (0) | 2022.07.14 |
---|---|
[Spring] 의존관계 자동 주입 (0) | 2022.07.14 |
[Spring] ComponentScan (0) | 2022.07.14 |
[Spring] @Configuration, @Bean, Application (0) | 2022.07.13 |
[Spring] DI 란 (0) | 2022.07.13 |