SRP가 어떻게 OOP의 핵심이냐
OOP 없이도 SRP 지키면서 프로그래밍 할 수 있다.
사실 맞는 말이기도하고, 틀린 말이기도 함
이렇게 말하면 왜 SOLID 원칙에서 SRP를 이야기했느냐를 말해야하는데
SRP이야기는 이거임
책임의 명확화
-> 책임의 해석차이
책임이 있다-> 그 책임을 가지는 '개체(or 객체)'가 있다라는 이야기임
즉 SRP는 객체 정의의 시도라고 이야기할 수 있음.
문제는 이 객체 정의의 시도가 객체를 완전히 정의할 수 없기때문에
SRP는 SOLID에서 중요한 개념이 아니다라는 지적한 상황임.
이 말도 존나 맞는 말임. 근데 왜 내가 이 말에 동의하지 않느냐 라는 거는
'개체(객체)'의 모호성을 해결하지 못해서 OOP가 정의되지 않았다는게 엄밀한 정의이기때문. 그래서 SRP를 내가 이야기한거
왜 이 소리를 하냐고? 한번 이야기해봄
03년도 앨런 케이는 객체지향 프로그래밍이라는 용어를 처음 씀.
이후에 앨런 케이는 인터뷰에서
OOP,는 메시징, 캡슐화 동적 바인딩을 이야기함
자, 이렇게말하면 현대의 형태와는 좀 동떨어짐
이제 여기서 우리는 Booch라는 사람의 이야기를 꺼내야함
1. OOP는 객체 지향 프로그래밍은 알고리즘이 아닌, 객체를 논리적 구성 요소로 사용함
2. 각 객체는 어떤 클래스의 인스턴스
3. 클래스는 상속관계를 통해서 서로 관련되어 있다
어쨌건 보통 3요소를
캡슐화-상속-다형성을 이야기함.
우리가 흔히 이야기하는 객체 지향이라는 시작점이 여기임
OOP는 그간 발전해왔고 30년에 가까운 시간 동안 발전해오면서
상속보다는 구성을 사용하라는 조언도 생김. 어쨌건.
즉 125.128 엉님께서는 그걸 지적한거, 즉 OOP ->3가지 요소를 이야기해야하는데 SOLID 같은 가이드라인을 핵심이라고 해? 이 병신새끼야!
틀린말은 아닌데, 또 완전히 엄밀하게 맞말도 아니라고 나는 생각함.
근데 왜 내가 굳이 SRP에 대해서 생각해봤고 이야기를 해봤냐
여기서 '객체(개체)'에 대해서 봐야함
(이때는 AI에 대한 불신이 강해서 AI 연구는 구라라고 까는거에 대해서 OOP를 깜)
OO라는 건 실존하지 않는다는 인터뷰임.
C++에 대한 표준 템플릿 라이브러리를 만든 Alexander Stepanov가 이렇게 말함.
OOP는 철학적으로 타당하지 않으며 방법론적으로도 틀렸다고 말함.
이유는 모든 것이 '객체(개체)'라고 말하는 것이 잘못됐기때문.
모든 것이 객체다라고 말하는 것은 그냥 아무말도 하지 않은거랑 똑같다고 함.
자 이러한 관점에서 이제 다시 내가 말했던 개소리로 돌아가보자
결국 OOP에서의 핵심은 여기서 Obejct라는 것이 제대로 정의되지 않았다는것.
'함수(Function)'이 정의된 것과 다르게 Obejct를 무엇으로 정의할 것이냐에 대해서 아무도 엄밀한 정의를 말 못함.
그럼 이제 내가 한 개소리로 돌아가보자
SRP는 무엇이냐? -> 단일 책임 원칙이다.
SRP는 결국 그럼 책임이라는 것을 둔다->오브젝트를 정의한다라는 시도임
그런 의미에서 한말이고, 후대에서 SOLID 원칙(Principle 같은 강한말을 쓰는)을 쓰는것에 대해서 SRP의 정의의 모호성을 이야기한 것은 그부분을 이야기한거
따라서 125.128 엉님께서는 SRP가 없어도 OOP로 코딩 할 수 있다 라고 말하는건 틀린말은 아님.
오히려 엄밀하게 맞는 말임. 이 성님 말이 맞음.
하지만 엄밀히 말해서 객체라는 구성이 결국은 프로젝트 당사자들간의 합의가 필요하다라는게 내 말의 논지임
근데 문제는 Object가 그것이 무엇인지 정의하는 것이 중요한데, 이 시도의 기준점이 SRP고
그 사용자 집단의 합의하에 발생하는 행위라는것이라는게 내 글의 이야기라는 것.
내가 저 앞의 배경설명 자체를 싹다 생략했다는거 이해함.
공산주의도 개념적으로 있지만은 이거 실제로 구현됐다고 하진 않잖아. 그런 소리에서 한거임
어쨌건 니 말이 맞는데, 너무 공격적이라고 지랄한거고 나도 그냥 프갤서 개소리 가볍게 적은게 념글가서 어느정도 사과함
Summary: OO is a great idea but has been implemented in a way which obfuscates what is really happening. Inheritance sucks because you have to trace objects back to the source to see what fields and methods they contain rather than just read what they contain. Encapsulation is pointless if you can access private fields with public methods anyways. Program procedurally rather than creating objects for everything.
나뿐만 아니라 이렇게 말하는 교수가 많기때문에 나도 예전에 봤던 강의에서 기억나서 말했던것.
여튼 뭐 저렇게 빡칠만한건가 싶기도하고 이해는 함
이런 쓸모없는거 싸워봤자 사실 뭐 코드 한줄 더쓰는게 낫긴한데 알려주지도 않고 화내가지고 글 하나써본다
쎾쓰
왜 싸움?
념글가서 싸워야하니까 개추좀
걍 뭐 생각없이 적은거 개추 박혀서 념글 갔는데, 그거가지고 화내길래 변명해보려고
쎾쓰
개추 구걸해서 념글줌