'Java > Design Pattern' 카테고리의 다른 글
| [Java] 팩토리 패턴 (Factory Pattern) - 디자인 패턴 (0) | 2025.01.13 |
|---|---|
| [Java] 싱글톤 패턴 (Singleton Pattern) - 디자인 패턴 (3) | 2025.01.13 |
| [Java] 팩토리 패턴 (Factory Pattern) - 디자인 패턴 (0) | 2025.01.13 |
|---|---|
| [Java] 싱글톤 패턴 (Singleton Pattern) - 디자인 패턴 (3) | 2025.01.13 |

Singleton 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다.
이 패턴은 전역 접근을 제공하며, 여러 스레드에서 안전하게 사용할 수 있도록 구현할 수 있습니다.
--> 공유(접근)해야 될 데이터나 클래스로서 어디서나(클래스) 접근이 용이하도록 만든 패턴.
프로젝트 구조

animal
|-- Animal (인터페이스)
public interface Animal {
void printDescript();
}
animal
|-- Cat (클래스)
public class Cat implements Animal {
@Override
public void printDescript() {
System.out.println("야옹야옹");
}
}
factory
|-- AnimalFactory (팩토리 클래스)
[메모] create() 메소드가 static 이면 main함수에서 호출될 때 더 쓰기가 편하다.
예를 들어, 현재 코드처럼 static이라면
main함수 안에서는 AnimalFactory.create("멍멍이") 이렇게 쓰기만 하면 되는데,
static이 아니라면 main 함수에서 호출하기 위해서
AnimalFactory af = new AnimalFactory();
af.create("멍멍이")
이렇게 써야 한다.
public class AnimalFactory {
public static Animal create(String name) {
if (name.equals("야옹이")) {
return new Cat();
}
else if (name.equals("멍멍이")) {
return new Dog();
}
else if (name.equals("황소")) {
return new Cow();
}
return null;
}
}
main
|-- MainClass
public class MainClass {
public static void main(String[] args) {
/*
// 하나씩 생성
Animal ani1 = AnimalFactory.create("멍멍이");
Animal ani2 = AnimalFactory.create("야옹이");
Animal ani3 = AnimalFactory.create("황소");
ani1.printDescript();
ani2.printDescript();
ani3.printDescript();
*/
// 식별자(=이름)을 배열에 미리 넣고, ArrayList에 인스턴스 삽입
List<Animal> animalList = new ArrayList<>();
String[] names = { "멍멍이", "황소", "황소", "멍멍이", "야옹이", "야옹이", "야옹이", "멍멍이" };
// Factory 클래스를 사용해서 인스턴스 생성 후 ArrayList에 삽입
for (String name : names) {
Animal ani = AnimalFactory.create(name);
animalList.add(ani);
}
// 메소드 호출
for (Animal a : animalList) {
a.printDescript();
}
}
}
| [사이트] 22개 디자인 패턴 - Refactoring Guru (1) | 2025.01.24 |
|---|---|
| [Java] 싱글톤 패턴 (Singleton Pattern) - 디자인 패턴 (3) | 2025.01.13 |

Singleton 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다.
이 패턴은 전역 접근을 제공하며, 여러 스레드에서 안전하게 사용할 수 있도록 구현할 수 있습니다.
--> 공유(접근)해야 될 데이터나 클래스로서 어디서나(클래스) 접근이 용이하도록 만든 패턴.
public class Singleton {
// 클래스의 유일한 인스턴스를 저장할 정적 변수
private static Singleton single = null;
// 전달(이용)하고자 하는 변수 or 객체를 멤버로 가짐
int number;
List<Integer> list;
// 생성자를 private으로 선언하여 외부에서 인스턴스를 생성할 수 없도록 함
private Singleton() {}
// 인스턴스를 반환하는 정적 메서드
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
1. Singleton 패턴에서 사용되는 Static의 맥락:
static으로 선언된 변수는 클래스의 인스턴스와 관계없이 클래스에 속하는 변수.
즉, 클래스가 로드될 때 메모리에 할당되며, 그 값이 null이라 하더라도 인스턴스를 생성하지 않고도 접근이 가능
2. getInstance() 메소드
if문이 딱 한 번만 실행된다는 것이 포인트임.
- single 변수를 null로 초기화했기 때문에 메소드가 최초 1회 실행될 때 if문이 실행됨
- 이 때 메모리 주소가 할당됨
- 한 번 메모리 주소가 할당된 이후로부터는, if문이 실행되지 않음
- 바뀌지 않는 메모리 주소를 리턴해줌
| [사이트] 22개 디자인 패턴 - Refactoring Guru (1) | 2025.01.24 |
|---|---|
| [Java] 팩토리 패턴 (Factory Pattern) - 디자인 패턴 (0) | 2025.01.13 |