728x90
Singleton 패턴은 자바에서 많이 사용한다.
먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고 (static) 그 메모리에 객체를 만들어 사용하는
디자인 패턴을 의미한다.
즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해주는 것이다.
Singleton 예제(baseball)
package singleton;
import java.util.ArrayList;
import java.util.List;
import dto.HumanDto;
public class Singleton {
private static Singleton s = null;
public List<HumanDto> list = new ArrayList<HumanDto>();
private Singleton() {
}
public static Singleton getInstance() {
if(s == null) {
s = new Singleton();
}
return s;
}
}
Singleton 예제
package singleton;
public class SingletonClass {
private static SingletonClass sc = null;
public int sNumber;
public String name;
//외부에서 접근 불가능
private SingletonClass() {
}
public static SingletonClass getInstance() {//생성은 여기서만 가능
if(sc == null) { // 한번만 실행됨
sc = new SingletonClass();
}
return sc;
}
}
위 코드에서는 sc라는 전역변수로 선언하는데 static을 줌으로써 인스턴스화 하지 않고 사용할 수 있고
접근 제한자가private으로 되있어서 직접적인 접근은 불가능하다.
또한 생성자도 private 로 되어 있어 new를 통한 객체 생성도 불가능하다.
결국 getInstance 메서드를 통해서 해당 인스턴스를 얻을 수 있게 된다.
위의 예제는 아주 작은 규모에서 사용할 수 있는 싱글톤 패턴이다.
그렇다면 싱글톤 패턴을 사용하는 이유는?
위에서도 언급된 바와 같이 한번의 객체 생성으로 재 사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.
또한 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이하다.
이렇게만 보면 싱글턴이 좋아보일 수 있지만 문제점도 존재한다.
728x90
'JAVA' 카테고리의 다른 글
[java] byte, short, int, long (0) | 2021.02.07 |
---|---|
for-each (0) | 2021.02.07 |
19일차// BaseBall 팀 DAO, DTO 개념을 이용해 파일 입출력// ArrayList + Singleton (0) | 2021.02.04 |
18일차// BaseBall 팀 DAO, DTO 개념을 이용해 파일 입출력// ArrayList (0) | 2021.02.03 |
17일차//HaspMap, TreeMap (0) | 2021.02.02 |