개발/도서 스터디

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 절차지향 

https://usefultoknow.tistory.com/entry/%EC%A0%88%EC%B0%A8%EC%A7%80%ED%96%A5Procedural-Programming-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5Object-Oriented-Programming-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90

728x90
반응형