본문 바로가기
공부내용

TIL_클린코드_6장_객체와 자료 구조

by 바나나하나 2022. 5. 3.
반응형

TIL (Today I Learned)

2022.05.03

오늘 읽은 범위

6장. 객체와 자료 구조

책에서 기억하고 싶은 내용

자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. -119페이지

개발자는 객체가 포함하는 자료 를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. -119페이지

(자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. - 122페이지

절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다. -122페이지

복잡한 시스템을 짜다 보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이때는 클래스와 객체 지향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이때는 절차적인 코드와 자료 구조가 좀 더 적합하다.

디미터 법칙은 잘 알려진 휴리스틱으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. - 123페이지

기차 충돌 ex) final Strin goutputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

일반적으로 조잡하다 여겨지는 방식이므로 피하는 편이 좋다.

절반은 객체, 절반은 자료 구조인 잡종구조 -124페이지

이런 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다. 양쪽 세상에서 단점만 모아놓은 구조다. 그러므로 잡종 구조는 되도록 피하는 편이 좋다. - 125페이지

자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조체를 때로는 자료 전달 객체 Data Transfer Object, DTO라 한다. DTO는 굉장히 유용한 구조체다. 특히 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하다. - 126페이지

객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다. 자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다. (어떤) 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다. 우수한 소프트웨어 개발자는 편견 없이 이 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다. - 127~128페이지

 

오늘 읽은 소감은? 떠오르는 생각

기차충돌, 디미터법칙이라는 용어를 새로 알게되었다. 얼마전까지 맡아서 진행하던 유지보수 업무에서 보았던 코드에서 기차충돌 형태로 나오는 코드들을 보았었다. 여러 객체에서 반환하는 객체의 메소드를 찾아가며 애를 먹었던 것 같은데 이제 개발자로 일을 하기 시작한지 얼마 되지 않아서 이런 형태가 좋지 않은 것인지, 내 실력이 좋지 않은 것인지 구분이 가지 않았는데 이 책을 읽으면서 이런 코드는 만들지 말아야겠다는 것을 알게 되는 것 같다. 

객체지향이라는 개념을 배우면서 '절차지향은 좋지 않은 것'이라는 느낌을 가지고 있었다. 이 책을 읽으면서 때에 절차지향이 갖고 있는 장/단점과 객체지향이 가지는 장/단점이 서로 보완적이라는 것을 알게 되었다. 절대적으로 한 쪽이 좋고 나쁘다고 말할 수 없고 결국 상황에 따라서 어떤 장점을 가져가야할지를 고민해야하는게 개발자의 몫이라는 것을 알게 되었다. 

반응형

댓글