728x90
반응형
public enum Settings{
INSTANCE;
Settings(){
}
private Integer number;
public Integer getNumber(){
return number;
}
public void setNumber(Integer number){
this.number = number;
}
}
// 줄인것 // 리플랙션에 안전한 코드
public enum Settings{
INSTANCE;
}
public class App{
public static void main(String[] args) throws NoSuchMethodException{
Settings settings = Settings.INSTANCE;
Constructor<Settings> constructor = Settings.class.getDeclaredConstructor();
constructor.setAccessible(true);
Settings settings1 = Settings.getInstance();
System.out.println(settings == settings1);
}
}
- show byte code를 보면 기본 생산자 못가져옴
public class App{
public static void main(String[] args) throws NoSuchMethodException{
Settings settings = Settings.INSTANCE;
Settings settings1 = null;
Constructor<?>[] declaredConstructors = Settings.class.getDeclaredConstructors();
for(Constructor<?> constructor : declaredConstructors){
constructor.setAccessible(true);
settings1 = (Settings) constructor.newInstance("INSTANCE");
}
System.out.println(settings == settings1);
}
}
- 모든 생성자 가져와서 확인해봐도 리플랙스를 막음 , enum은 리프랙션에서 만들 수 없어서 막을 수 있음
- 그래서 유일한 인스턴스가 보장이 되는것임
- 단점은 미리 만들어진다는 점
- 상속을 쓰지 못함, 오로지 컴파일 할때 enum만 상속 가능
enum의 직렬화 역직렬화
public class App{
public static void main(String[] args) throws NoSuchMethodException{
Settings settings = Settings.INSTANCE;
Settings settings1 =null;
try(ObjectOutput out = new ObjectOutPutStreamd(new FileOutPutStream("settings.obj"))){
out.writeObject(settings);
}//객체가 파일에 써짐, 직렬화
try(ObjectInput in = new ObjectInputStream(new FileInputStream("settings.obj"))){
settings1 =(Settings) in.readObject();
}//역직렬화
System.out.println(settings == settings1);
}
}
- enum으로 되어있는것은 역직렬화하더라도 같은 인스턴스임
복습
- 자바에서 enum을 사용하지 않고 싱글톤 패턴을 구현하는 방법은?
- private 생성자와 static 메소드를 사용하는 방법의 단점은?
- enum을 사용해 싱글톤 패턴을 구현하는 방법의 장점과 단점은?
- static inner 클래스를 사용해 싱글톤 패턴을 구현하라.
728x90
반응형
'CS Study > 디자인패턴' 카테고리의 다른 글
2021.11.15_팩토리메소드패턴01.패턴소개 (0) | 2021.11.15 |
---|---|
2021.11.14_05.자바와스프링에서찾아보는패턴 (0) | 2021.11.14 |
2021.11.14_03.싱글톤패턴구현방법을깨트리는방법 (0) | 2021.11.14 |
2021.11.14_02.멀티쓰레드환경에서안전하게구현하는방법 (0) | 2021.11.14 |
2021.11.11_싱글톤패턴1-싱글톤패턴을가장단순히구현하는방법 (0) | 2021.11.11 |
댓글