모듈이 재사용 가능하려면 두가지를 만족해야 하는 거 같음
첫째는 모듈과 연관된 컨텍스트가 없고 단순해야 함
그런 모듈 여럿을 여러가지 방식으로 조합해서 다양한 기능을 만들 수 있을 때
재사용이 가능하다고 볼 수 있음
둘째는 모듈들의 (입)출력이 어떤 표준화된 형식만을 지원해야 함
그래야만 모듈들간의 조합이 가능함.
결론은 단순한 모듈의 조합을 통해 시스템을 만들 수 있을 때,
그 모듈들이 재사용된다는 것.
이렇게 보면 언어나 패러다임과 상관 없이 재사용성을 이룩할 수 있음
다만 언어에 따라서 그게 엄청 까다로울 수 있다는 거지
- OOP의 경우 기본적으로 접근 제한자 같은 것으로 상태를 숨기는데
상태는 연관된 모든 모듈에 컨텍스트를 부여해서 엮어버릴 수 있음
상태를 숨기기 때문에 객체라는 모듈은 단순해보이지만 사실은 그렇지 않음
- C 같은 언어의 경우도 상태쪽은 비슷하지만 모듈의 최소 단위는 일단은 함수임
근데 이 언어는 함수 합성이 불가능해서 모듈을 조합하기가 쉽지 않음
- 단순한 모듈과 조합의 측면에서 봤을 땐 함수형 프로그래밍이 그나마 우월함.
순수함수가 모듈의 기본단위이기에 단순해지기 쉽고(물론 함슬람으로도 개좆같은 코드 짜기 쌉가능 내가 해봄)
함수 합성이나 하스켈러 같은 타입박이들이 좋아하는 컴비네이터가 굉장히 많아서 조합이 용이함
컴비네이터는 oop에서 디자인 패턴 같은 건데 좀 더 작고 코드로 표현이 가능한 느낌.
OOP에서도 이제는 상속 거르고 composition을 권장한다는 거 알거임
이것도 같은 맥락인 거 같음
그러면 어떤 식으로 짜면 단순한 모듈들의 조합을 통해서 기능을 만들 수 있을까?
여러가지 테크닉이 있지만 가장 기본적인 건 바텀-업 사고방식이라고 생각함
자세한 건 영상에서 보시길...
정보추. 한줄요약 : 의존성떼라 - dc App
블로그 글에서 "시스템의 안정 버전이 릴리즈된 후에는, 한번 도입된 구성 요소의 인터페이스는 변경되어서는 안 된다." 이 부분은 현실과 너무 동떨어진듯.
이게 실제로 인터페이스를 절대 안 바꾸는 라이브러리를 본적이 있음. 근데 실제 시스템의 모든 부분을 그러는건 어렵고, 최소한 잘 안 변하는 하위레벨이라도 안 바꿔야 한나 생각함
그리고 완전 존나 뻔한 건데 deprecated 된 거 맘대로 빼지 말자 뭐 이런 의미도 있음 내가 파이썬 쓰다가 뚝배기 터져봐서 그럼
코드가 좀 드러워질 순 있지만, 과거 인터페이스를 deprecated로 표시해두고 새로운 인터페이스로 alias를 거는 방식이면 어느 정도는 해결가능하다고 봄. 물론 설계부터 근본적으로 좆됬으면 힘들지만
취지도 이해하고 많은 부분 공감함. 그런데 니 말대로 하려면 설계가 완벽해야하는데, 완벽한 설계는 똑같은 일을 무수히 반복하지 않는 이상 어려우니까...
기간, 비용에 대한 제한이 없고, 참여하는 프로그래머의 수준이 높은 프로젝트라면 달성 가능해보이긴한데... 참여하는 프로그래머의 수준은 어케 높일수야 있겠는데, "기간" "비용" 제한이 문제일듯..... 아무튼 잘 읽었음 '^'
블로그에도 나와있듯이 나도 그렇게 인생을 낭비하다가
https://youtu.be/f84n5oFoZBc
이 영상을 보고 개발 방식을 바꿨음. 이건 Clojure 창시자가 발표한건데 짜기전에 생각하는 법을 설명해줌.
https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/HammockDrivenDev.md
이건 영상 대본. 내가 이 영상에 영향을 엄청 많이 받아서, 최근에는 항상 짜기 전에 생각을 많이 하는 편. 도움 많이 된 거 같음
문제를 잘 해결하는 사람이 가지고 있는 속성(아마 발표자일듯?)을 분석해서 잘 나열한 것같네... 근데 지금은 집중력이 다 떨어져서 자세히 못보겠다
저녁으로 맛난거 먹고 한숨 자고 일어나서 보세용 ㅎㅎ
구랭~ 너도 좋은 저녁 되렴
OOP가 재활용인데, oop를 자주 쓰면서 실제로 코드가 재활용된다고 느껴본적이 그렇게 많은것같진 않은듯 - dc App
OOP의 목적이 그냥 코드사이의 의존방향을 비트는거라 하는 사람도 있던데 요즘 나도 그렇게 생각함
근데 명백히 IS-A 관계일 때 composite 는 너무 돌아가는거 아니냐?