본문 바로가기
[Java] writeObject 와 readObject 는 무엇인가? [Java] writeObject 와 readObject 는 무엇인가? 참조 : http://www.javablogging.com/what-are-writeobject-and-readobject-customizing-the-serialization-process/ - serialize 하고 싶은 객체에 Serializable interface 만 implements 해주면 serialize 가 가능하다. -ObjectOutputStream 을 이용하여 stream 형태로 만들어 file 에 쓰거나 전송할 수 있다. - transient 나 static 으로 마크되지 않은 필드들은 모두 serialized 된다. - 기본적인 serialization 에 추가적으로 어떤 조치를 취하고 싶다면 아래와 같이 w.. 2016. 10. 25.
[Effective Java] 가변성을 최소화 하자. [Effective Java] 가변성을 최소화 하자. -불변 클래스는 자신의 인스턴스가 갖는 값을 변경할 수 없는 클래스. - 불변 클래스는, 가변 클래스에 비해 설계와 구현 및 사용이 더 쉽다. 에러 발생이 적으며 보안이나 사용 측면에서 더 안전하다. - 불변 클래스를 만들 때는 다음 다섯 가지 규칙을 따르자. 1. 객체의 상태를 변경하는 그 어떤 메소드도 제공하지 않는다. 2. 상속을 할 수 없도록 하자. ( class 에 final 을 주어 막을 수 있다. ) 3. 모든 필드를 final 로 지정한다. 4. 모든 필드를 private 으로 지정한다. 5. 가변 컴포넌트의 직접적인 외부 접근을 막자. 생성자와 접근자 메소드 및 readObject 메소드에서 해당 객체의 방어 복사본을 만들어 사용하도록.. 2016. 10. 24.
[Effective Java] public 클래스에서는 public 필드가 아닌 접근자(accessor) 메소드를 사용한다. public 클래스에서는 public 필드가 아닌 접근자(accessor) 메소드를 사용한다. - 어떤 클래스가 자신이 속한 패키지의 외부에서 접근 가능하다면 무조건 접근자 메소드를 제공하자. - 만일 패키지 전용 클래스거나 private inner class 라면 데이터 필드를 노출해도 아무 문제가 없으며 ( 클래스 설계를 잘 했다는 가정 하에 ), 접근자 메소드를 사용하는 것보다 코드를 알아보기 쉽다. - public 클래스에서 내부 필드를 외부로 노출하는 것은 결코 좋은 발상이 아니지만 필드가 불변이라면 그나마 덜 해롭다. Summary public 클래스는 자신의 가변 필드를 절대로 외부에 노출시키지 않아야 한다. 논란의 여지는 있으나 불변 필드를 노출하는 것은 그나마 덜 해롭다. 패키지 전용 또.. 2016. 10. 21.
[Java] Generic explicit type parameter 이야기 [Java] Generic explicit type parameter 이야기 참조 : http://shanhe.me/2011/09/11/explicit-type-parameters-for-generic-methods 참조 : http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html - 자바 7, 8 로 version up 이 되면서 조금 더 강화된 compiler 로 type inference 도 강화되어 explicit type parameter 를 지정할 일이 거의 없다. -public static Map toHashMap(Map map) {return new HashMap(null == map ? Collections.em.. 2016. 10. 18.
[Effective Java] 클래스와 그 멤버의 접근성을 최소화하자. [Effective Java] 클래스와 그 멤버의 접근성을 최소화하자. - 잘 설계된 모듈과 그렇지 않은 것을 구분 짓는 가장 중요한 잣대는, 모듈 자신의 내부 데이터 및 그 외의 상세한 구현 부분을 다른 모듈로부터 어느 정도로 숨기느냐에 달려 있다. - 모듈은 자신의 API 를 통해서만 다른 모듈과 상호작용한다. 정보 은닉(information hiding) 또는 캡슐화(encapsulation)이 그것이다. - 정보 은닉은 시스템을 구성하는 모듈들 간의 결합도를 낮추어(decoupling) 모듈 별로 개발, 테스트, 최적화, 사용 및 수정이 가능하도록 한다. 또한 이렇게 하면 병행 개발 ( parallel development ) 를 할 수 있어 시스템 개발이 빨라진다. 모듈을 더 빨리 파악할 수 있.. 2016. 10. 17.
[Effective Java] Comparable 인터페이스의 구현을 고려하자. [Effective Java] Comparable 인터페이스의 구현을 고려하자. - compareTo 메소드는 Comparable 인터페이스에 존재하는 메소드이다. compareTo 메소드는 equals 메소드와 유사한 특성을 갖는다. 차이점은 두 객체가 동일한지 비교에 덧붙여 순서까지 비교할 수 있으며, 제네릭 타입을 지원한다. - Comparable interface 를 구현하면, Arrays.sort 와 같은 메소드를 손쉽게 쓸 수 있고, TreeSet 과 같은 크기 비교를 사용하는 Collection 들에서도 손쉽게 사용할 수 있다. - 자바 라이브러리의 모든 값 클래스들은 Comparable 인터페이스를 구현한다. - 알파벳 순, 숫자 순, 날짜 순과 같은 자연율을 갖는 값 클래스를 작성한다면 .. 2016. 10. 14.
WeakHashMap 에 대해 제대로 이해하자. WeakHashMap 에 대해 제대로 이해하자. - WeakHashMap 은 일반적인 HashMap 과 동일하지만 key 가 weak reference 된 형태이다. - WeakHashMap 을 가장 잘 이해하는 용어는 이렇다. "더 이상 일반적인 방법인 key 로 value 를 retrive 할 수 없을 때 key/value pair 를 제거한다." 따라서 string 은 WeakHashMap 의 key 로 적합하지 못하다. string 은 JVM 에 의해 다른 곳에 store 되어 항상 strong reference 로 남을 것이다. 다시 말하자면 string 을 key 로 사용할 것이라면 WeakHashMap 을 쓸 이유가 없다. - Primitive Boxing object 들도 key 로 사용하.. 2016. 10. 13.
[android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아. [android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아. -애석하게도 대부분의 개발자들이 manifest 에 configChanges 속성을 통해 orientation 값만 설정해주면 모든게 해결되는 줄 안다. 하지만 그렇지 않다. Configuration Change 는 여러 경우에 발생된다. 기본적으로 configChanges 에 들어가는 값들의 상황이 그렇고, 언어가 변경되거나, dock 에 연결되거나, font 크기가 바뀌거나 등의 조건으로 destroy-recreate 되곤 한다. 또한 리소스, 메모리 관리 측면에서 Activity 가 destroy 되고 create 되도록 하는 것이 좋다. - 예전부터 개발을 해온 사람이라면 Activity 에 on.. 2016. 10. 12.
[Effective Java] clone 메소드는 신중하게 오버라이드 하자. [Effective Java] clone 메소드는 신중하게 오버라이드 하자. - Cloneable 인터페이스는 복제를 허용하는 객체라는 것을 알리는 목적으로 사용하는 믹스인 인터페이스( mixin interface ) 이다. 믹스인 인터페이스이기 때문에 자신이 clone method 를 가지고 있는 것도 아니다. Object 의 clone 은 Cloneable 을 implement 하지 않으면 사용할 수 없다. - Cloneable 을 implements 한 class 에 clone 을 호출하면, 해당 객체의 복제본을 만들어 반환한다. 복제 객체는 원본 객체와 같은 필드를 가지며 각 필드의 값도 복사된다. 하지만 reference 를 가진 녀석들은 deep copy 가 아닌 soft copy 를 수행한다.. 2016. 10. 10.
반응형