🤍 TIL (Today I Learned)
- 자료 추상화
- 자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 편이 좋음
- 인터페이스 조회/설정 함수만으로는 추상화가 아님
- 자료/객체 비대칭
// 절차적인 도형
public class Square {
public Point topLeft;
public double side;
}
public class Rectangle {
public Point topLeft;
public double height;
public double width;
}
public class Circle {
public Point center;
public double radius;
}
public class Geometry {
public final double PI = 3.141592653589793;
public double area(Object shape) throws NoSuchShapeException {
if (shape instanceof Square) {
Square s = (Square) shape;
return s.side * s.side;
} else if (shape instanceof Rectangle) {
Rectangle r = (Rectangle) shape;
return r.height * r.width;
} else if (shape instanceof Circle) {
Circle c = (Circle) shape;
return PI * c.radius * c.radius;
}
throw new NoSuchShapeException();
}
}
// 다형적인 도형
public class Square implements Shape {
public Point topLeft;
public double side;
public double area() {
return side * side;
}
}
public class Rectangle implements Shape {
public Point topLeft;
public double height;
public double width;
public double area() {
return height * width;
}
}
public class Circle implements Shape {
public Point center;
public double radius;
public final double PI = 3.141592653589793;
public double area(){
return PI * radius * radius;
}
}
- 두 가지 코드는 상호 보완적인 특질을 가짐
- 절차지항적 코드
- 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉬움
- 새 자료 구조를 추가하기 어려움 -> 모든 클래스의 수정이 필요
- 객체지향적 코드
- 기존 함수를 변경하지 않으면서 새 클래스 추가하기 쉬움
- 새 함수를 추가하기 어려움 -> 모든 클래스 수정이 필요
- 결론
- 새로운 자료 타입이 필요한 경우 -> 객체 지향 기법 적합
- 새로운 함수가 필요한 경우 -> 절차적인 코드와 자료구조가 적합
- 늘 객체 지향이 옳은 것은 아님
- 절차지항적 코드
- 디미터 법칙
- 모듈은 자식이 조작하는 객체의 속사정을 몰라야 함 (객체는 자료를 숨기고 함수를 공개)
- 자료 전달 객체
- 공개 변수만 있고 함수가 없는 클래스 (DTO)
- 활성 레코드 - DTO의 특이한 형태 - get뿐만 아닌 save/finve 함수도 제공
- 활성 레코드에 비즈니스 규칙 메서드를 추가하게 되면 자료 구조도 아니고 객체도 아닌 잡종 구조가 됨
- -> 내부 자료는 활성 레코드의 인스턴스에서 설정
❤️ 오늘 읽은 범위
6장 객체와 자료구조
🩷 기록
객체 지향 구조를 지향해야 된다는 이야기들을 정말 많이 듣고, 자바를 학습 할 때부터 객체 지향의 중요성을 익히 들어온 바 있다. 클린 코드에서는 그와 반대로 절차지향과 객체 지향을 용도에 맞게 사용하라고 이야기한다.
최근 프로젝트의 구조를 만들면서 객체 지향으로 만들기 위해 abstract를 활용한 코드를 짜다가 각 클래스마다의 차이로 인해 난항을 겪은 적이 있다. '각 클래스마다 비슷한 듯 다른데 어떻게 리턴 타입을 동일하게 abstract로 만들 수 있을까', '새 함수가 필요한데 특정 클래스에서 필요하지 않는 건 어쩌지' 등의 고민이었는데, 어쩌면 객체 지향적인 방법을 굳이 고수할 필요가 있었을까 라는 의문이 들게 했다.
'BOOK Review' 카테고리의 다른 글
[클린코드] TIL - 9장 단위 테스트 (1) | 2024.07.05 |
---|---|
[클린코드] TIL - 7장 오류 처리 (0) | 2024.07.02 |
[클린코드] TIL - 5장 형식 맞추기 (0) | 2024.06.30 |
[클린코드] TIL - 2장 의미있는 이름 (0) | 2024.06.25 |
[클린코드] TIL - 4장 주석 (0) | 2024.06.25 |