목록직렬화 (2)
초보개발자 긍.응.성
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dfuNgm/btqPZKmfKP0/wt0VkyF8GOrpD1wxyQG5Sk/img.png)
객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 직렬화가 품고 있는 위험과 그 위험을 최소화하는 방법을 배워보자. 자바 직렬화의 대안을 찾으라 직렬화는 위험하니 피해야 한다. ObjectInputStream의 readObject는 객체 그래프가 역직렬화된다. 역직렬화를 통하면 클래스 패스 안의 모든 타입의 객체를 만들어 그 타입들 안의 모든 코드를 수행할 수 있다. 즉, 그 타입들의 코드 전체가 공격 범위에 들어간다는 뜻이다. 직렬화 위험을 회피하는 가장 좋은 방법은 아무것도 역질렬화 하지 않는 것이다. 새로운 시스템에서 자바 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cY7uxt/btqFnPFvHlB/6i34ULcPlmJAHlBZdlqWPk/img.png)
싱글턴 (Singleton) 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 mock 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방법 싱글턴을 만드는 방식은 보통 아래를 따른다. 생성자는 private 으로 감춘다 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 마련한다. public static 멤버는 두 가지 방법으로 구현 가능하다. 하..