본문 바로가기
728x90

Object5

Item 12. toString을 항상 재정의하라 Object의 기본 toString() 메서드는 다음과 같다. 1 2 3 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } Colored by Color Scripter cs 따라서 기본 toString() 메서드를 그냥 사용한다면 유의미한 정보를 얻기 어렵다. 따라서 모든 하위 클래스에서 toString을 재정의 해야 한다. toString() 메서드를 직접 호출할 일은 드물다. 하지만, 객체를 println, printf, 문자열 연결 연산자(+), assert 구문에 넘길 때, 디버거가 객체를 출력할 때 자동으로 불린다. 또 한, 에러 로깅에도 사용할 수 있다. 따라서 toS.. 2022. 5. 8.
Chapter 7. 객체 분해 사람은 문제를 해결하기 위해 단기 기억을 사용한다. 하지만 단기 기억의 용량은 한정되 있고 이 용량을 초과하는 순간 문제 해결 능력이 저하되며 인지 과부화(cognitive overload)가 발생한다.  인지 과부화를 줄이는 방법은 추상화이다. 세부 사항을 줄이고 가장 본질적인 부분만 남기면 된다. 즉, 한번에 다뤄야 하는 문제의 크기를 줄이면 된다. 하나의 큰 문제를 작은 문제로 나누는 것이 분해(decomposition)이다.  분해의 목적은 큰 문제를 인지 과부화 없이 단기 기억 안에서 한 번에 처리할 수 있는 규모의 문제로 나누는 것이다. 여기서 말하는 "한 번에 처리할 수 있는 규모"는 가장 작은 단위로서의 개별 항목이 하는 하나의 청크(chunck)를 의미한다. 청크는 더 작은 청크를 포함할.. 2022. 2. 2.
Chapter 5. 책임 할당하기 데이터 중심 설계는 객체들 간의 협력을 고려하기 보다는 상태를 우선적으로 고려하기 때문에 제대로된 캡슐화를 하지 못한다. 이는 결국 높은 결합도를 야기하고 코드 변경이 어려워진다. 따라서 객체지향 설계에서는 책임 중심 설계가 적절하다. 책임 중심 설계에서 가장 어려운 부분은 어떤 객체에게 어떤 책임을 할당할 것인가 이다. 책임 할당 과정은 일종의 트레이드오프이다. 동일한 문제를 해결할 수 있는 다양한 책임 할당 방법이 존재하며 상황에 따라 최적의 책임 할당 방식이 다르다. 따라서 최적의 책임 할당을 위해서 다양한 관점에서 설계를 평가할 수 있어야 한다. GRASP 패턴은 책임 할당의 어려움을 해결해 준다. GRASP 패턴을 이해하면 응집도, 결합도, 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를.. 2022. 1. 17.
Chapter 3. 역할, 책임, 협력 객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 클래스, 상속, 지연 바인딩 역시 중요하지만 이들은 구현에 치우쳐져 있기 때문에 객체지향 패러다임의 본질과는 거리가 있다. 객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다. 객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다. 애플리케이션 기능 구현을 위해 객체들 간의 필요한 역할, 책임, 협력을 고려하지 않고 구현을 한다면 변경이 어렵고 유연하지 못한 코드가 나온다. 따라서 완성도 높은 코드를 작성하기 위해서는 높은 응집도, 중복 없는 상속 계층을 구현하는 것 보다도 역할, 책임, 협력에 대한 고려가 우선시 되어.. 2022. 1. 6.
728x90