싱글톤 패턴 :
싱글톤 패턴의 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
즉, 클래스가 만들 수 있는 인스턴스 개수가 최대 하나인 패턴인 것이다.
사용법 :
생성된 인스턴스는 getinstance( ) 를 통해 접근한다.
인스턴스를 생성할 클래스의 생성자와 변수는 private 으로 선언한다.
인스턴스에 접근할 메서드는 public 으로 선언한다.
외부 클래스에서는 new를 통한 인스턴스 생성은 불가하다.
class cat {
// private static cat cat = new cat();
private static cat kitty = null;
private cat() {
System.out.println("키티 인스턴스 생성");
}
public static cat GetInstance() {
if (kitty == null) {
kitty = new cat();
}
return kitty;
}
}
public class SingleTone1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("싱글톤 첫번째 get instance 호출");
cat c = cat.GetInstance();
System.out.println("싱글톤 두번째 get instance 호출");
cat c1 = cat.GetInstance();
if (c == c1) {
System.out.println("동일한 싱글톤");
}
}
}
위의 예시 코드에서는 cat 클래스가 싱글톤으로 구현되어 있다. GetInstance() 메서드를 호출하면, cat 클래스의 인스턴스가 최초 한 번 생성되고 이후에는 같은 인스턴스가 계속해서 반환되도록 되어 있다. 이를 가능하게 하는 것은 private static cat kitty = null;와 private cat() {} 코드.
private static cat kitty = null;은 cat 클래스의 인스턴스를 담을 수 있는 정적 변수로, 처음에는 null로 초기화된다. private cat() {}는 cat 클래스의 생성자로, 외부에서 new cat()으로 인스턴스를 생성할 수 없도록 private으로 선언되어 있다.
따라서, cat class 외부에서 cat cc = new cat();이렇게 객체를 생성 하는 것은 불가능하다.
GetInstance() 메서드는 kitty 변수가 null인 경우에만 cat 인스턴스를 생성하고, 그렇지 않은 경우에는 이미 생성된 cat 인스턴스를 반환합니다. 이를 통해 cat 클래스의 인스턴스가 하나만 생성되도록 보장할 수 있다.
싱글톤 패턴 장점 :
- 하나의 인스턴스만 존재하므로 메모리를 절약할 수 있다.
- 인스턴스가 여러 곳에서 동시에 수정될 경우 발생할 수 있는 문제를 예방할 수 있다.
- 인스턴스의 생성 및 소멸 시점을 제어할 수 있다.
싱글톤 패턴 단점 :
- 멀티스레드 환경에서 동시에 GetInstance() 메서드를 호출하면 인스턴스가 두 번 생성될 수 있다.
→이를 방지하기 위해서는 동기화 처리가 필요 - 싱글톤 인스턴스는 전역 상태를 가지므로, 다른 객체와의 결합도가 높아질 수 있다.
→유지보수와 테스트를 어렵게 만듬 - 객체 지향적인 설계 원칙 중 하나인 "단일 책임 원칙"을 위반할 수 있다.
→한 클래스가 여러 역할을 수행하게 될 수 있습니다.
// 나름 열심히 이해해 보려고 했는데 혹시 틀린게 있음 말해주세요
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 - 상속 (inheritance) (0) | 2023.03.01 |
---|---|
[JAVA] 객체지향 - 문자열 비교 (0) | 2023.03.01 |
[JAVA] 객체지향 - getter 와 setter (0) | 2023.02.28 |
[JAVA] 객체지향 - 접근 제어자 (0) | 2023.02.28 |
[JAVA] 객체지향 - fianl 키워드 (0) | 2023.02.28 |