절차지향적 프로그래밍하는 애들이 공격하는게 그거고


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에서 모든 것을 오브젝트라고하는데, 솔직히 이 개념은 좀 말도 안된다는거 너희들도 동의하잖아.


하지만 실체하는 무언가는 없어도 추상적인 무언가를 우리는 이해할 수 있는 정도의 능력이 있고


그러다보니 그런 이야기에서 적은건데 내가 너무 많은걸 생각없이 적은게 있긴함.