클린 코드[Clean Code] TIL #7. 객체와 자료구조

 

DAY 7 - 22/05/03
오늘 읽은 범위 : 6장. 객체와 자료구조

책에서 기억하고 싶은 내용

"자료 추상화"

  • 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다!
  • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
  • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.( p. 119 )
  • 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체지향 코드에서 쉽다.( p. 122 )

"디미터 법칙"

  • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
  • 객체라면 내부 구조를 숨겨야하므로 확실히 디미터 법칙을 위반한다. 반면, 자료구조라면 당연히 내부 구조를 노출하므로 디미터 법칙이 적용되지 않는다.( p.123 )

"자료 전달 객체'

  • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조체를 때로는 자료 전달 객체(DTO)라 한다.( p.126 ) 

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

이번 장을 공부하면서 느꼈던 점은 소프트웨어 설계 이론에는 굉장한 철학이 담겨있다는 것이었다.
특히 동작 설계를 클래스 외부에 맡길 것인지, 아니면 클래스 메서드에서 강제하게 만들 것인지에 대한 주제는 자바를 공부하면서도, 한번도 깊게 생각해봤던 적이 없는 것 같다.( 반성.. )
개념을 학습했다에만 집중했지 이 개념이 무엇을 말하고자하는가를 깊게 생각해본적이 없었다.
 
개발 과정을 돌아보면 객체를 생성할 때 아무 생각없이 자료구조처럼 생성한 적도 있는 것 같고,
그러면서 자연스레 객체지향 원칙도 무시하며 개발을 했던 것 같다.
기초적인 것을 굉장히 중요하다고 생각했던 나로서는 발전적인 방향으로 학습을 하지 못했던 것 같아 아쉽기도 했다.
 
빠르게 개발해서 결과를 내는 것보다도 첫 단계부터 기본 설계 원칙에 따라 깔끔하게 구현을 해나가는 것이 완성도는 물론이고 추후 유지보수에서도 훨씬 좋은 결과를 낼 수 있을 것이라 생각한다.
앞으로는 이전과는 다르게 배운대로 원칙을 생각하며 개발할 수 있는 개발자가 되도록 노력해보자.

궁금하거나, 잘 이해되지 않는 내용

"디미터의 법칙"

 

디미터의 법칙은 Demeter라는 프로젝트를 수행하던 개발자들에 의해 소개되었다고 한다.

 

getter, setter 메서드와 같이 멤버 변수를 외부로 공개하는 메서드의 경우는 객체가 어떤 자료를 가지고 있는지 알 수가 있다.

 

예를 들어 객체 A에 멤버 변수 a가 있고, getter setter 메서드 getA(), setA()가 구현되어있다 가정한다.

객체 B에서 객체 A의 getA() 메서드를 호출하게 되면, B는 A가 멤버 변수 a를 가지고 있다는 것을 알게 된다.

 

위의 예시처럼 특정 객체가 가지고 있는 자료의 조회 함수를 통해서 정보를 얻게되면 객체 간의 결합도가 높아지게 된다.

만약 A 객체의 a변수를 수정하게 되면 B 객체도 마찬가지로 수정해주어야 하는 등의 관계가 생성되게 된다.

 

이런 결합도를 없애기 위해 정보를 얻고자 하는 객체에 요청을 보내 해당 응답을 하도록 구현해야 한다는 것이 디미터의 법칙이다.