사실


OCP,ISP,DIP,LSP는 진짜 딱 정해서 이거다 말할 수 있는거 같은데


OOP의 핵심인 SRP는


단일 책임이고, 여기서 책임은 특정기능의 변경에 대해서 단일하게 해야하는데, 이 단일한 책임이라는 것이 결국 팀내 합의에 의해서 만들어지는 느낌


그래서 진짜 존나 궁금해서 엘런케이가 스몰토크 관련해서 쓴 글이랑 OOP 관련된 객체 지향 개념 설립자의 이야기를 봤는데


메시징, 캡슐화, 동작 바인딩 이라고 인터뷰했던데 생각해보면 우리가 SOLID라고 말했던 원칙은 원 객체지향자가 창안한 개념이 아니라 후대에 덧붙여진 개념.


결국 OOP의 엄격한 정의는 아무데도 없음.


OOP의 시작 자체는 변수 할당을 결합한 기법이고, 특정 상태 변수를 해당 함수 호출(this 키워드)에 바인딩한 함수 모음을 호출하는 것이 시작이었다고 하던데...


그럼 OOP는 무엇이냐. 라고 물어보면 항상 나오는 대답이


저 5원칙 이야기(SOLID)인데 사실 이것도 후대에 덧붙여진것도 이것도 SRP에 대해서 여전히 어느정도의 모호성이 있음 .공리로 정리된게 아니라서

SOLID는 후세에 로버트 마틴이 제안한 가이드 라인인데, OOP의 가이드라인인데,


이게 수학처럼 '엄밀한' 공리로 작동하는게 아닌 그냥 일종의 사례임

~~이렇게 하면 좋겠다라는거. 결국 우리가 생각하는 단일 책임 원칙은 모호함.


사실 객체 간의 상호작용은 특정 메서드라는 하위 루틴을 통해 정리되며, 객체의 모듈성은 다른 애플리케이션간의 이전성을 이야기

라고 나는 보고 있긴한데


이것도 결국은 엄밀한 내용은 아닌듯


그래서 이런 '지향'에 대한 개념을 찾아봤는데, 실제로는 일정의 구분이고 사람들간에 쓰이는 일종의 사회적 약속임


그래서 혹자는 OOP가 완전히 구현되지 못했지만 이러한 개념이 언어의 이념을 주도한다고 하더라.


그런면에서 봤을때 결국 어떤 관점이나 이런것을 참고만 하면되지 현재 개념만 존재하는 것을 완전히 구현하겠다고 애쓰는게 병신같이 느껴질때가 있음


일단은 기본적으로 OOP 스러운 코드를 쓸때, 나는 책임의 범위부터 상정하는데 이게 제일 지루하고 힘든 작업인듯


그래서 가끔 OOP라는 걸 설명해보라 라고 하면 나는 좀 당황스러움


명확한 정답은


'엘런 케이는 메시징, 캡슐화,동적 바인딩이라고 말했지만, 아직 완성된 실제 구현 사례는 없고, 개념만 존재하는 것' 이라고 말할 수 있고


결국 OOP 패러다임이란 공리와 정의의 모음이 아닌 


기본적으로 책임 범위와 역할분담에 대한 명확한 합의가 필요한


유연한 설계 철학임이 분명한데


마치 이걸 하나의 무조건 지켜야하는 철칙이라는 개념으로 이야기하니까 마찰이 일어나는게 아닐까


이렇게 말하면 나보고 다들 병신이라고 하니까


참 어려운 문제임