it 서적 독후감/이팩티브 자바 4

[ITEM 18] 상속보다는 컴포지션을 사용하라

컴포지션은 합성을 뜻한다.  상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니다 잘못 사용하면 오히려 오류를 내기 쉬운 소프트웨어를 만들게 된다 확장을 할 목적으로 설계하였고 문서도 잘 정리가 되어있으면 괜찮다 하지만 구체 클래스를 패키지를 경계를 넘어, 즉 다른 구체 클래스를 상속 받는것은 위험하다.  상속은 캡슐화를 깨뜨린다 다르게 말하면 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스 동작에 이상이 생긴다. 바로 코드 예를 보자면 직접 HashSet을 상속 받은 코드 import java.util.Collection;import java.util.HashSet;import java.util.Set;public class InstrumentedHashSet extends HashSet ..

[ITEM 17] 변경 가능성을 최소화 하라

이번 이팩티브 자바에서 소개하는 챕처는 꽤나 긴편이다중복된 이야기가 자주 나오지만 그 이유는 중요하기 때문에 반복하고 강조하는것이다 해당 챕터를 읽고 내가 생각하는 조슈아 블로크가 독자들에게 전달하고 싶은 키워드는 바로 캡슐화이다.캡슐화는 모든 소프트웨어의 기본 근간이 되는 아주 중요한 개념이다 캡슐화를 통해 많은 장점을 가질 수 있다.  객체의 변경 가능성을 최소화 하면 코드의 변경이 유연하고 쉬워진다이렇게 들으면 뭔가 논리적으로 안맞는것 같지만 사실이다캡슐화를 통해 얻을 수 있는 가장 큰 장점 중 하나는 객체들간의 결합도를 낮출 수 있다.  책 OBJECT의 저자 조영호는 기능을 수정하는데 클래스 하나 이상 수정을 해야한다면 그건 결합도가 높다고 말하기도 했다. 결합도는 한 모듈이 변경되기 위해서 다..

[ITEM 16] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

간혹 단순히 여러 값을 담은 인스턴스가 필요한 객체를 생성할 때 이렇게 작성하는 경우가 있다.public class PointV1 { public double x; public double y;} 나의 경우에는 코딩테스트 코드 작성할때 getter, setter 메서드로 호출하는것이 너무 귀찮아서 이렇게 한적은 있지만실제로 어플리케이션 개발 때는 절대 사용하지 않는 클래스 설계다.. 이 코드의 문제점은 다음과 같다생성자를 통해 값을 셋팅하지 않아 필수값을 누락할 수 있다생성자를 통해 값을 셋팅하지 않아 x,y의 불변식이 무너질 수 있다.외부 공개 클래스인데 내부 상태를 완전히 노출되어 언제 객체가 이상하게 작동해도 이상할 점이 없다캡슐화의 이점을 얻을 수 없다. (객체의 자율성을 보장하지 못한..

[ITEM 15] 클래스와 멤버의 접근 권한을 최소화 하라

잘 설계된 컴포넌트와 어설프게 설계된 컴포넌트의 차이는 내부 구현 정보를 외부로 부터 얼마나 잘 숨겼느냐다정보은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다.  기본원칙은 간단하다 모든 클래스와 멤버의 접근성을 가능한 좁혀야 한다.  자바의 접근제한자는 다음과 같다public : 모든 곳에서 접근 가능protected : 같은 패키지에서는 자유롭게 접근 가능 | 다른 패키지에 있는 경우에는 하위 클래스(상속 관계)에서만 접근 가능.package-private :같은 패키지 내에서만 접근 가능, 다른 패키지에서는 접근 불가능.private : 해당 클래스에서만 접근 가능멤버 접근성을 좁히지 못하게 방해하는 제약 한가지 있다. 상위 클래스의 메서드를 재정의할 때는 그 접근 수준을..