의식의 흐름 #0.
모듈화를 생각하기에 앞서 나의 코드를 보자.
눈앞에서 흩날리고 있는 코드들 속에서 공통적인/반복적인 부분을 뽑아 내서 중복부터 제거하고. haha. DRY !
의식의 흐름 #1.
개발자는 역할과 책임을 특징 짓고 그것에 따라 적절히 분리할 수 있어야 해. 관찰력
이 있어야해.
왜냐하면? 무엇
인가를 찾아낼 수 있어야 해.
우리가 찾아야 할 대상은 다음과 같은 일련의 문장들로 표현될 수 있어.
무엇 ?
= 클라이언트에게 알리지 말아야 할 비밀
= 클라이언트가 알 필요가 없는 사항
= 변경될 가능성이 높은 부분
= 복잡하고 어려운 부분
= 세부적인 사항들 및 구현
= 실제 작업해야 할 부분
이런 것들을 찾아내어서 잘 숨기고, 변경될 가능성이 낮은 더 일반적인 개념으로 추상화하여 클라이언트에게 제공되어야 해.
결국 변경에 대비한 적절한 설계를 하라는 것이고 변경이 일어났을때 파급효과를 지역적으로 가두는 것. 그리고 그것이 OCP
를 잘 지키는 것 이라고 생각해.
의식의 흐름 #2.
그런데, 여기서 또 중요한 게 있어. 이 추상화를 적절하게
할 줄 알아야 한 다는 것이야. 추상화 레벨을 어디까지 높여야 할 지 판단하는 것은 순전히 개발자의 몫이야.
해당 모듈의 추상화 레벨이 높을 수록 그 모듈의 책임은 많아지고, SRP
를 위반하게 될 것 이라 생각해. 반면 너무 낮다면 모듈의 책임은 적어지지만 필요 이상으로 많은 모듈화가 될 수도 있지. 그것은 너무 많은 변경에 대한 대비를 한 것이고 곧 YAGNI
라는 말을 듣게 될테지.
데이타를 제공하는 모듈의 역할을 (= 모듈의 추상화 레벨) 을 어디까지 가져가는 것이 좋을까? 데이타를 준다? 파일로부터 데이타를 준다? 텍스트파일로 부터 데이타를 준다? 그것을 결정하는 것은 개발자야. 이 모듈의 클라이언트와 모듈과의 역할과 책임을 잘 분배하고 아주 아주 잘 생각해보자구.
의식의 흐름 #3.
클라이언트는 해당 모듈의 구체적인 구현(비밀 !!)은 모르고 모듈이 제공한 인터페이스 통해 모듈과 메시지를 주고 받아야해 ! 그 내부를 알 필요도 없고, 알아서도 안돼 !
의식의 흐름 #4.
결국 모두 같은 가치를 바라보는 용어들이라고 생각해.
모듈화.. 추상화… 캡슐화... 역할과 책임의 적절한 분배... 변경에 대비하는 설계...
의식의 흐름 #5.
결국 우리의 지향점은! 일반론만 펼치는 정치인들 같은 뉘앙스로 말하자면.
갑작스런 설계 변경 또는 기능 확장에도 유연하게 대응 가능한 소프트웨어를 만들어야 해
'Development > ETC' 카테고리의 다른 글
객체지향 개발 5대 원칙 : SOLID 좋은 글 (0) | 2017.07.09 |
---|---|
넷플릭스 마이크로 서비스 가이드 (0) | 2017.06.24 |
MySQL 원격 접속용 계정 생성 (0) | 2017.01.28 |
enum 수정 후 deploy 시 문제점. (0) | 2017.01.05 |
스레드 안전성이란? (0) | 2016.12.08 |