Clean Code 06장. 객체와 자료 구조
TIL(Today I Learn)
2024.06.30
오늘 읽은 범위
6장. 객체와 자료 구조
책에서 기억하고 싶은 내용을 써보세요.
자료 추상화
private 변수와 함께 getter()와 setter()를 제공하는 것은 구현을 노출하는 것이다.
추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다.
개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다.자료구조와 객체의 비대칭성
- 차이점1
- 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.
- 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
- 차이점2
- 절차적인 코드는 기존 자료 구조를 변경하지 않으면서도 새 함수를 추가하기 쉽다.
- 객체지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.
- 차이점3
- 절차적인 코드는 새로운 자료구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다.
- 객체지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.
- 디미터 법칙
- 클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출한다.
- 클래스 C의 또 다른 메서드를 호출할 수 있다.
- f가 생성한 객체의 메서드를 호출할 수 있다.
- f에 인수로 넘어온 객체의 메서드를 호출할 수 있다.
- C 인스턴스 변수에 저장된 객체의 메서드를 호출할 수 있다.
- 위 객체에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안 된다!
- 자료 전달 객체
- DTO(Data Transfer Object)
- 자료 구조체의 전형적인 형태는 public 변수만 있고 함수가 없는 클래스
- DB와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하게 사용 가능
- 흔히 DB에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환할 때 사용
- 빈(Bean)
- 빈은 private 변수를 getter/setter 함수로 조작
- 일부 객체지향 순수주의자나 만족시킬 뿐 별다른 이익을 제공하지 않음
- 활성 레코드
- DTO의 특수한 형태
- public 변수가 제공되거나 private 변수에 getter/setter 함수가 있는 자료구조
- save 또는 find 같은 함수도 제공
- 활성 레코드는 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과
- 결론
- 객체는 동작을 공개하고 자료를 숨긴다.
- 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기 쉽다.
- 기존 객체에 새 동작을 추가하기 어렵다.
- 자료 구조는 별다른 동작 없이 자료를 노출한다.
- 기존 자료 구조에 새 동작을 추가하기 쉽다.
- 기존 함수에 새 자료 구조를 추가하기 어렵다.
- 새로운 자료 타입을 추가하는 유연성이 필요하다면 객체를 사용!
- 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적 코드를 사용!
- 우수한 소프트웨어 개발자는 직면한 문제에 최적인 해결책을 선택한다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
단순하게 클래스에 private 변수만 추가한다고 클래스의 기본 원칙을 지키는 것아니다.
내부 구현을 감추면서도 추상화된 데이터를 효과적으로 조작하는 메소드를 작성할 수 있어야 한다.디미터 법칙을 항상 머릿속에 집어 넣고, 기차 충돌(train wreck)과 같은 코드를 만들지 않아야 한다.
함수가 자신과 직접적으로 관련된 객체하고만 소통하도록 기능을 구현할 수 있어야 한다.자료 구조, 클래스, DTO, 활성 레코드의 개념과 용도를 구분하지 않고 코드를 작성해왔다.
내가 구현하고자 하는 기능의 용도에 맞게 설계하여 클린 코드를 작성할 수 있어야 한다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
This post is licensed under CC BY 4.0 by the author.