DevBook
-
CH01. 디자인 패턴 소개와 전략 패턴DevBook/헤드퍼스트 디자인패턴 2024. 3. 31. 20:37
여기서 학습할 내용 디자인 패턴의 활용 분야와 디자인 패턴으로 얻을 수 있는 장점 몇 가지 핵심적인 객체지향 디자인 원칙을 살펴본 후, 한 가지 패턴을 정해 디자인 원칙이 어떤 식으로 작동하는지 알아보기 패턴을 잘 사용하려면 패턴을 머릿속에 집어넣은 다음 어플리케이션에 어떻게 적용할지 파악해야 한다. 디자인 패턴은 코드가 아닌 경험을 재사용하는 것이기 때문이다. ## 예시로 문제 상황 살펴보기 매숑이는 오리 시뮬레이션 게임을 만드는 회사에 다니고 있다. 이 게임에는 헤엄도 치고 꽥꽥 소리도 내는 매우 다양한 오리가 등장한다. 이 시스템을 처음 디자인한 사람은 표준 객체지향 기법을 사용해 Duck 이라는 슈퍼클래스를 만든 다음, 그 클래스를 확장해 서로 다른 종류의 오리를 만들었다. 시간이 흘러 오리가 나..
-
아이템14. Comparable을 구현할지 고려하라DevBook/Effective Java 2023. 5. 7. 22:52
📍상황 public interface Comparable { int compareTo(T t); } Comparable 인터페이스는 compareTo() 메서드를 제공함 Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻함 --> 해당 순서대로 정렬이 가능함 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자 *compareTo 메서드의 일반 규약 equals 규약과 똑같이 반사성, 대칭성, 추이성을 충족해야 함 따라서 기존 클래스를 확장한 구체 클래스에서 새로운 값 컴포넌트를 추가했다면 compareTo 규약을 지킬 방법이 없음 우회법도 equals와 동일하게 확장하는 대신 독립된 클래스를 만들고, 이 ..
-
아이템13. clone 재정의는 주의해서 진행하라DevBook/Effective Java 2023. 5. 7. 21:02
📍상황 Cloneable은 복제해도 되는 클래스임을 명시하는 용도인 mixin 인터페이스지만, 아쉽게도 의도한 목적을 제대로 이루지 못했음 clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고, protected로 선언됨 --> Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없음 리플렉션을 사용하면 가능하지만, 100% 성공하는 것은 아님 --> 해당 객체가 접근이 허용된 clone 메서드를 제공한다는 보장이 없기 때문임 하지만 Cloneable 방식은 널리 쓰이고 있어 잘 알아두는 것이 좋음 이번 아이템에서 다룰 내용 clone 메서드를 잘 동작하게끔 해주는 구현 방법 언제 재정의해서 사용해야 하는지, 가능한 다른 선택지는 무엇인지 📍방법 Clo..
-
아이템12. toString을 항상 재정의하라DevBook/Effective Java 2023. 5. 7. 16:28
📍상황 Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없음 단순히 클래스_이름@16진수로_표시한_해시코드 를 반환함 toString의 일반 규약 '간결하면서 사람이 읽기 쉬운 형태의 유익한 정보'를 반환해야 함 모든 하위 클래스에서 이 메서드를 재정의해야 함 장점 - toString을 잘 구현한 클래스는 디버깅하기 쉬움 toString 메서드는 객체를 println, printf, assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 호출됨 즉, 직접 호출하지 않더라도 다른 어딘가에서 쓰일 것임 toString을 제대로 재정의하지 않는다면 쓸모없는 메시지만 로그에 남을 것임 📍방법 1. toString은 그 객체가 가진 주요 정..