절차지향적 프로그래밍하는 애들이 공격하는게 그거고
OO는 엄밀히 정의되지 않았다
이거고
Booch가 OO에 대해서 처음에
캡슐화
상속
다형성
이라고 정의함.
스몰토크의 앨런 케이는 여기서 일단 빼기로 하자. 왜냐면 사실 그때 형태랑 지금 형태랑 다르니까.
사실 OOP라고하는데 좀 말이 안되거든
애초에 OO의 초장에 존재하는 상속-> 캡슐화를 깸. 그리고 Object라는 걸 깸.
이것도 뭐 문제가 있다하는 양반들 많은데, 어쨌건 'Object'는 공리에서 나온 것이 아닌 개념적 도구에서 나온거.
결국 객체지향 프로그래밍은 일종의 사고방식이고, 원칙- 모범 사례 중심의 실무적인 프로그래밍 기법임.
Booch가 초기에 캡슐화 상속 다형성 이야기하고나서 이게 OO다 했는데, OO가 공격을 많이 받음.
근데 결국 지배적 패러다임이 되서 GOF(Gang of Four)부터 시작해서 패턴 프로그래밍부터 시작해서 이 기반을 바탕으로 많은 책들이 나옴.
우리가 흔히 팩토리 패턴, 빌더 패턴 이런 것들이 그 부산물임.
그 과정에서 C.마틴(클린 코드의 저자가 맞음)이 SOLID의 첫 개념을 주창했고, 이걸 페더라는 사람이 SOLID라는 앞글자로 만들어서
객체지향의 principle이다. 원칙이다해서 OOP->SOLID 원칙을 지킨것이다. 라고 이야기한거
왜냐하면 OO자체가 Object라는것을 대체 어떻게 정의하는가에 대한 논란은 꾸준히 있어왔음.
절차지향 하는 애들이 OO까는이유가 그거임.
그래서 이거에 대한 실무 가이드를 원칙이다.
규칙이다해서 SOLID라고 이름따고 원칙이라 만든거
S-> 캡슐화
L->다형성
I->캡슐화
D->다형성
그래서 기본 원칙인 캡슐,상속,다형성에서 SOLID가 파생된거고, 실제적으로 OO라는게
구체적 개념으로 면밀하게 정의되지 않기때문에 타자간의 이해를 바탕으로 합의 되는 관계니까. 여기서 SRP 이야기를 꺼낸거.
그리고 요즘은 상속보다 컴포지션 주로 이야기하더라. 어쨌건 그건 중요하지 않고.
생각해보면 Object에서 모든 것을 오브젝트라고하는데, 솔직히 이 개념은 좀 말도 안된다는거 너희들도 동의하잖아.
하지만 실체하는 무언가는 없어도 추상적인 무언가를 우리는 이해할 수 있는 정도의 능력이 있고
그러다보니 그런 이야기에서 적은건데 내가 너무 많은걸 생각없이 적은게 있긴함.
여기 애들은 그런 거 몰라 뭘 혼자 열심히 떠듬?
자꾸 꼬투리 잡는 것 같은데, i가 왜 캡슐화고 d가 왜 다형성이야? oop에서 solid가 파생되었다는 것도 이해가 안돼. 오히려 마틴은 solid가 oop에만 국한되는 게 아니라고 명시했고 oop가 모호함으로 비판받아서 solid가 만들어졌다는 얘기도 없는데
I가 캡슐화랑 연관있음. 왜냐하면 기능적 정의로 어디까지 잡느냐로 알고 있어서 나중에 분석하는거고 사실 솔리드가 OOP에만 국한되는게 아니라고 명시는 했지만 사실 OOP 프로그래밍 기반을 설명할떄 보통 OOP로 합의해서 그럼. 니 말이 더 정확한 지적이 맞음. 근데 기본적으로 해외 커뮤니티에서 사용될때하는거라 니 말이 조금 더 엄격한거긴함
OOP가 모호함으로써 SOLID가 만들어졌다는 얘기는 없지만,OOP 책이 Booch책 나오고나서 이후의 다른 책들이 나오고 OOP를 설명하기위해서 나온거라서, 그때당시 지배적인 패러다임이었어서 그런거긴함. 여튼 뭐 나도 이건 해외쪽에서 들은거 거의 그대로 이야기한거라. 다만 이것도 약간 잘못된 설명이 있을수밖에 없음. 결국 내가 하고자 하는 말은 어떤 관점이든 뭐든 수학적 공리가 엄밀하진 않더라도 개념적 정의는 있다 이거니까
다만 니 말대로 막붙인다고 막붙이는건 아닌데, 기본적으로 해외서 OOP 설명할때 주로 SOLID 가져오듯이 그런 개념에서 이야기한거.
다만 수학정 공리가 엄밀하지 않으니까 애매한 부분이 있다 이걸 설명하려고 했던거였음 원문은
병신들 천지네 열심히 좀 해라