개발/도서 스터디
cleancode #6, 객체와 자료구조
방푸린
2022. 9. 28. 15:44
반응형
목표: 올바른 객체/자료구조의 사용이 무엇인지 확인, 상황에 알맞게 사용하자.
객체(object) vs 자료구조(data structure)
- 객체: 추상화 뒤로 자료(field)를 숨긴 채 자료를 다루는 함수만 공개
- 자료구조: 자료를 그대로 공개하며 별다른 함수를 제공하지 않음
- 잡종 구조(hybrid): 반반무마니 구조, 새로운 함수는 물론이고 새로운 객체를 추가하는 것도 어려움(양쪽의 단점만 모은 구조)
-> 되도록 사용하지 않도록!
객체지향 코드(OOP) vs 절차지향 코드(procedural)
객체지향 | 절차지향 | |
특징 | bottom-up 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉬움 새로운 함수를 추가하기 어려움 -> 모든 클래스를 고쳐야 |
top-down 기존 자료구조를 변형하지 않으면서 새 함수를 추가하기 쉬움 새로운 자료구조를 추가하기 어려움 -> 모든 함수를 고쳐야 |
단점 | 1. 느린 개발 속도(설계시간) 2. 느린 실행/처리 속도 |
1. 유지보수의 어려움 2. 엄격하게 순서가 정해짐 3. 프로그램 분석이 어렵다 |
장점 | 1. 생산성/유지보수가 상대적으로 쉬움 2. 자원의 재사용성 |
1. 컴퓨터 처리 방식과 유사하기 때문에 실행 속도가 빠름 |
예시 | ![]() |
![]() |
: 어떤 스타일이 항상 맞고, 항상 정답이진 않는다. 각각 상황에 알맞은 설계를 가져가는 것이 핵심.
- 새로운 자료타입을 추가하는 유연성이 필요? 객체지향적으로!
- 새로운 동작을 추가하는 유연성이 필요? 절차지향적으로!
The Law of Demeter; 디미터의 법칙
Don't Talk to Strangers
Principle of least Knowledge
"객체가 어떤 데이터를 가지고 있는가?" "객체가 어떤 메시지를 주고받는가?
: 구현을 모른 채 핵심을 조작할 수 있도록, 객체의 내부를 모르게 하라(결합도를 낮추자).
기차 충돌(train wreck)
여러 개의 dot을 사용하지 말라.
그럼, 단순히 dot이 많다고 디미터의 법칙을 어긴 것인가?
: NO, stream or 일반적인 자료구조는 dot을 사용할 수밖에
- 객체라면 내부 구조를 숨겨야 하기에 디미터 법칙을 위반한다.
- 자료구조라면 이미 노출된 내부 구조를 사용하기에 디미터 법칙을 위반하지 않는다.
- best practice: 뭔가를 하라고 해야지, 속내를 드러내면 안된다.
DTO: 공개된 변수만 있고 함수(비즈니스 로직)는 없는 클래스
활성 레코드: DTO + 탐색 함수(save, find); 자료 구조로 취급하라
-> 비즈니스 로직을 가지고 있지 않도록 주의!(잡종 구조가 되어버린다)
참고: 객체지향 vs 절차지향
728x90
반응형