모듈이 재사용 가능하려면 두가지를 만족해야 하는 거 같음


첫째는 모듈과 연관된 컨텍스트가 없고 단순해야 함

그런 모듈 여럿을 여러가지 방식으로 조합해서 다양한 기능을 만들 수 있을 때

재사용이 가능하다고 볼 수 있음


둘째는 모듈들의 (입)출력이 어떤 표준화된 형식만을 지원해야 함

그래야만 모듈들간의 조합이 가능함.


결론은 단순한 모듈의 조합을 통해 시스템을 만들 수 있을 때,

그 모듈들이 재사용된다는 것.



이렇게 보면 언어나 패러다임과 상관 없이 재사용성을 이룩할 수 있음

다만 언어에 따라서 그게 엄청 까다로울 수 있다는 거지


- OOP의 경우 기본적으로 접근 제한자 같은 것으로 상태를 숨기는데

상태는 연관된 모든 모듈에 컨텍스트를 부여해서 엮어버릴 수 있음

상태를 숨기기 때문에 객체라는 모듈은 단순해보이지만 사실은 그렇지 않음

- C 같은 언어의 경우도 상태쪽은 비슷하지만 모듈의 최소 단위는 일단은 함수임

근데 이 언어는 함수 합성이 불가능해서 모듈을 조합하기가 쉽지 않음

- 단순한 모듈과 조합의 측면에서 봤을 땐 함수형 프로그래밍이 그나마 우월함.

순수함수가 모듈의 기본단위이기에 단순해지기 쉽고(물론 함슬람으로도 개좆같은 코드 짜기 쌉가능 내가 해봄)

함수 합성이나 하스켈러 같은 타입박이들이 좋아하는 컴비네이터가 굉장히 많아서 조합이 용이함

컴비네이터는 oop에서 디자인 패턴 같은 건데 좀 더 작고 코드로 표현이 가능한 느낌.


OOP에서도 이제는 상속 거르고 composition을 권장한다는 거 알거임

이것도 같은 맥락인 거 같음



내가 블로그에 쓴 글, 창발적 구조




https://youtu.be/Tb823aqgX_0

그러면 어떤 식으로 짜면 단순한 모듈들의 조합을 통해서 기능을 만들 수 있을까?

여러가지 테크닉이 있지만 가장 기본적인 건 바텀-업 사고방식이라고 생각함


자세한 건 영상에서 보시길...