728x90
반응형
By 백기선.코딩으로 학습하는 GoF의 디자인 패턴
Singleton
1. 개념 및 구현 방법
2. 패턴 구현 깨트리는 방법
3. 안전하고 단순하게 구현하는 방법
4. 자바와 스프링에서 찾아보는 패턴
패턴 구현 깨트리는 방법
1. 리플렉션 사용
리플렉션이란? 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
더 알아보기
public class singleton {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException, ClassNotFoundException {
Settings settings = Settings.getInstance();
Constructor<Settings> constructor = Settings.class.getDeclaredConstructor();
constructor.setAccessible(true);
Settings settings1 = constructor.newInstance();
System.out.println(settings == settings1);
}
}
2. 직렬화 & 역직렬화 사용
직렬화란?
말 그대로 객체를 직렬화하여 전송 가능한 형태로 만드는 것. 객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다. 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용한다.
역직렬화란?
직렬화된 파일 등을 역으로 직렬화하여 다시 객체의 형태로 만드는 것. 저장된 파일을 읽거나 전송된 스트림 데이터를 읽어 원래의 객체 형태로 복원한다.
더 알아보기
public class singleton {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException, ClassNotFoundException {
Settings settings = Settings.getInstance();
Settings settings1 = null;
try(ObjectOutput output = new ObjectOutputStream(new FileOutputStream("settings.obj"))){
output.writeObject(settings);
}
try(ObjectInput input = new ObjectInputStream(new FileInputStream("settings.obj"))){
settings1 = (Settings) input.readObject();
}
System.out.println(settings == settings1);
}
}
// Serializable 상속
public class Settings implements Serializable {
private Settings() { }
}
728x90
반응형
'Design Patterns > 생성(Creational)' 카테고리의 다른 글
[FactoryMethod]장점과 단점 (0) | 2022.05.20 |
---|---|
[Singleton]4. 자바와 스프링에서 찾아보는 패턴 (0) | 2022.04.08 |
[Singleton]3. 안전하고 단순하게 구현하는 방법 (0) | 2022.04.07 |
[Singleton] 1. 개념 및 구현 방법 (0) | 2022.04.04 |
[디자인패턴]Strategy Pattern01_추상클래스와 인터페이스 (2) | 2021.01.28 |