싱들톤패턴은 클래스 하나가 하나의 인스턴스만을 생성하게 하는 구조이다. (즉 1개를 생성하면 그 이후에는 인스턴스를 생성하지 못해야 한다.) 그리고 전역적으로 이 인스턴스를 공유할 수 있게한다.
장점
1.오직 인스턴스 1개만을 사용하게 하기 때문에 메모리를 아낄 수 있다.
2.해당 인스턴스에 대해 전역적으로 쉽게 접근 할 수 있어 공유하기 쉽다.
단점
1.결국 객체를 새로 생성하지 않고 기존에 있던 인스턴스에서 가져와야 하기 때문에 의존성이 올라가고, 코드의 유연성이 떨어진다.
2.전역적으로 사용하기 때문에 여기에 상태 값 같은게 들어가면 심각한 오류를 초래할 수도 있다.
3.private 접근제어자로 인하여 자식생성 및 상속이 어렵다.
4.인스턴스를 미리 설정해놓기 때문에 값 수정이 힘들다.
구현
아래와 같이 인스턴스를 미리 만들어 놓고 외부에서 접근(변경)하지 못하도록 막아놓는 것이다(불변객체). 혹은 생성자를 통해서만 값을 변경 할 수 있다.
해당 인스턴스에 접근하지 못하게 값을 반환하는 getter만 설정하고 setter는 설정하지 않는다.
public class singleInstance {
// 클래스 내부에 자신의 인스턴스를 정적 변수로 유지
private static singleInstance instance;
// 멤버변수 name, age
private final String name;
private final String age;
// private 생성자를 사용하여 외부에서 인스턴스화하지 못하도록 방지
// 처음부터 값을 정하거나, 생성자를 통해서만 멤버변수에 값을 설정 할 수 있다.
private singleInstance(String name, String age) {
this.name = name;
this.age = age;
}
// 인스턴스를 반환하는 정적 메소드
// 만약 인스턴스가 존재하지 않는다면, 인스턴스를 생성한다
public singleInstance getInstance() {
if (instance == null) {
instance = new singleInstance(name, age); // 처음 호출될 때만 인스턴스 생성
}
return instance;
}
}
'CS > 소프트웨어공학' 카테고리의 다른 글
애자일 선언 (Agile Manifesto) (0) | 2024.11.21 |
---|---|
디자인 패턴 (Design Pattern)이란? (0) | 2024.04.17 |