오늘 한 일
백준 실버 단계 3문제 풀기- 싱글톤 패턴 공부
자바 강의
공부하면서 궁금한 점
싱글톤 패턴(Singleton)
싱글톤 패턴은 하나의 객체를 이용해 정보를 보관, 공유, 관리하기 위해 사용한다.
한 번의 메모리 할당으로 관리하며,
이렇게 되면 여러 클래스에서 사용하더라도 공유가 되기 때문에 동기화에 용이하다.
public class Company {
private static Company instance;
private String name;
//synchronized는 멀티 스레드시 동시에 명령을 실행해야할 때 기다리도록 한다
public static synchronized Company getInstance() {
if(instance == null){
instance = new Company();
}
return instance;
}
private Company(){}
}
싱글톤을 사용하기 위한 다양한 방법이 있지만,
배운 것을 토대로 사용하겠다.
저 상황에서 intance가 null일 때 생성하도록 해두었는데 저렇게 되면 멀티 스레드 에서 문제가 발생할 수 있다.
동시에 객체를 사용하기위해 getInstance를 사용한다면 생성이 2번 되는 것이다.
이를 해결하기 위해 Synchronized를 사용한다.
Synchronized란 여러개의 스레드가 한개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는
해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근 할 수 없도록 막는 개념이다.
하지만 Synchronized 키워드를 너무 남발하면 오히려 프로그램 성능저하를 일으킬 수 있다.
Synchronized 키워드를 사용하면 자바 내부적으로 메서드나 변수에 동기화를 하기 위해 block과 unblock을 처리하게 되는데 , 이런 처리들이 너무 많아지게 되면 오히려 프로그램 성능저하를 일으킬수 있는 것이다.
사용 방법으로는 2가지가 있는데
1. 메서드에서 사용
위의 코드처럼 함수 자체에 사용하는것
2. 객체 변수에 사용
public static synchronized Company getInstance() {
if(instance == null){
synchronized(Company.class) {
instance = new Company();
}
}
return instance;
}
이렇게 2가지 방법이 있다.
내일 할 일
- 백준 3문제 풀기
- 자바 인강 듣기
- 자율 공부
'TIL' 카테고리의 다른 글
23.01.04 TIL (0) | 2023.01.05 |
---|---|
23.01.03 TIL (0) | 2023.01.04 |
22.12.30 TIL (0) | 2022.12.30 |
22.12.29 TIL (0) | 2022.12.30 |
22.12.27 TIL (0) | 2022.12.27 |