본문 바로가기
[Effective Java] 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. - 메소드 오버라이딩으로 인한 파급 효과를 분명하게 문서화해야 한다. 같은 클래스의 다른 메소드들이 호출하는지에 대해 반드시 문서화해야 한다. ( self-use ) - 각각의 public 이나 protected 메소드 및 생성자가 어떤 오버라이드 가능한 메소드를 호출하는지, 어떤 순서로 하는지, 호출한 경로가 다음 처리에 어떤 영향을 주는지에 대해서도 반드시 문서화해야 한다. 오버라이드 가능하다는 것은 final 이 아니면서 public 이나 protected 인 경우를 의미한다. - 관례적으로 오버라이드 가능한 메소드를 호출하는 메소드에는 문서화 주석의 제일 끝에 그런 호출에 대한 설명을 추가한다. 그리고 설명의 시작은 "이.. 2016. 11. 1.
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. - 상속은 코드를 재사용하는 강력한 방법이다. 그러나 일을 하는데 가장 좋은 도구는 아니다. 잘못 사용하면 부실한 소프트웨어를 초래한다. - 동일 프로그래머가 서브 클래스와 수퍼 클래스의 구현을 관장하는 같은 패키지 내에서 상속을 사용하는 것은 안전하다 상속을 위해 특별히 설계되고 문서화된 클래스를 확장(extends) 하기 위해 상속을 사용하는 것도 안전하다. 그러나 다른 패키지에 걸쳐 일반적인 실체 클래스로부터 상속을 받는 것은 위험하다. - 상속은 캡슐화(encapsulation) 을 위배한다. 올바른 동작을 위해 서브 클래스는 자신의 수퍼 클래스가 구현하는 상세 내역에 의존한다. 수퍼 클래스의 구현 내역은 소프.. 2016. 10. 27.
[Effective Java] 클래스와 그 멤버의 접근성을 최소화하자. [Effective Java] 클래스와 그 멤버의 접근성을 최소화하자. - 잘 설계된 모듈과 그렇지 않은 것을 구분 짓는 가장 중요한 잣대는, 모듈 자신의 내부 데이터 및 그 외의 상세한 구현 부분을 다른 모듈로부터 어느 정도로 숨기느냐에 달려 있다. - 모듈은 자신의 API 를 통해서만 다른 모듈과 상호작용한다. 정보 은닉(information hiding) 또는 캡슐화(encapsulation)이 그것이다. - 정보 은닉은 시스템을 구성하는 모듈들 간의 결합도를 낮추어(decoupling) 모듈 별로 개발, 테스트, 최적화, 사용 및 수정이 가능하도록 한다. 또한 이렇게 하면 병행 개발 ( parallel development ) 를 할 수 있어 시스템 개발이 빨라진다. 모듈을 더 빨리 파악할 수 있.. 2016. 10. 17.
[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.
반응형