We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
버그와 보안 문제
프록시 패턴(serialization proxy pattern)
ex) Period 클래스용 직렬화 프록시
private static class SerializationProxy implements Serializable { private final Date start; private final Date end; SerializationProxy(Period p) { this.start = p.start; this.end = p.end; } private static final long serialVersionUID = 452376890235478394258L; // 아무값이나 상관없다. }
다음으로, 바깥 클래스에 writeReplace 메서드를 추가한다.
private Object writeReplace() { return new SerializationProxy(this); }
private void readObject(ObjectInpuStream stream) throws InvalidObjectException { throw new InvalidObjectException("프록시가 필요합니다."); }
ex) readResolve 메서드
private Object readResolve() { return new Period(start,end); // public 생성자를 사용한다. }
private static class SerializationProxy <E extends Enum<E>> implements Serializable { private final Class<E> elementType; private final Enum<?>[] elements; SerializationProxy(EnumSet<E> set) { elementType = set.elementType; elements = set.toArray(new Enum<?>[0]); } private Object readResolve() { EnumSet<E> result = EnumSet.noneOf(elementType); for (Enum<?> e : elements) result.add((E)e); return result; } private static final long serialVersionUID = 4578194361234063217489L; }
The text was updated successfully, but these errors were encountered:
kmswlee
No branches or pull requests
직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라
버그와 보안 문제
가 일어날 가능성이 커진다는 뜻프록시 패턴(serialization proxy pattern)
이다.직렬화 프록시 패턴(serialization proxy pattern)
ex) Period 클래스용 직렬화 프록시
다음으로, 바깥 클래스에 writeReplace 메서드를 추가한다.
ex) readResolve 메서드
EnumSet의 직렬화 프록시
직렬화 프록시 패턴의 한계
예를 들어, Period를 내 컴퓨터에서 실행해보니 방어적 복사 때보다 14% 느렸다.
핵심정리
The text was updated successfully, but these errors were encountered: