공부기록/객체지향

객체지향의 사실과 오해 - 다시 읽어보기

DGL 2021. 9. 7. 19:45

"객체지향이란 실세계를 직접이고 직관적으로 모델링할 수 있는 패러다임"

실제로 존재하는 개념이든, 추상적으로 존재하는 개념이든 코드로 옮겼을 때, 해당 개념을 '객체'로 옮길 수 있고, 그렇다면 해당 개념과 코드상에 존재하는 객체가 일치하면 일치할수록 개발자는 코드를 이해하기 쉬워지고, 개발의 속도가 엄청 빨라질 수 있다.

옛날에 읽었을 때는 이해가 잘 안가고, 그냥 그렇구나 했지만, 이제는 이해가 간다. 그러나 이게 다시 유연하고 실용적인 관점에서는 객체지향 분석, 설계를 설명하기에 적합하지 않다구?? 7장에서는 이거라고 했잖아요.. 그렇지만 클린 아키텍쳐책에도 비슷하게 나와있는 걸로 봐서는 실용적인 측면에서는 이렇게 설명하는게 적합하지 않다고 하는 듯하다.

객체지향의 목표는 실세계를 모방하는 것이 아니라, 새로운 세계를 창조하는 것.. 그것은 맞다. 완벽하게 모방할 수 없으며, 소프트웨어 객체는 능동적이다. 실세계의 객체들은 대부분 수동적이지만, 소프트웨어의 객체는 상태를 가지고, 함수를 사용하여 자신의 상태를 바꿀수 있기 때문에 현실세계의 객체와는 같을 수가 없다.. 그런데 7장에서는 안그랬잖아...요

실세계에 대한 비유가 객체지향의 다양한 측면을 이해하고 학습하는 데 매우 효과적..ㅠㅠ

상태와 행위를 캡슐화하는 소프트웨어 객체의 자율성을 설명하는 데 효과적.. 메시지를 주고 받으며 공동의 목표를 달성하기 위해 협력하는 객체들의 관계를 설명하는 데 적합하다.

결국, 실제로 어떻게 돌아가는 지 이해한후, 현실세계의 모방이라는 철학의 세계로 가는 게 올바른 학습의 단계일까..

하나의 문제를 해결하기 위해, 같이 협력하고. 객체들은 각자의 역할과 책임을 수행함.

여러사람이 같은 역할을 수행할 수있음. (이것은 나중에 상속으로 연결..)

역할은 대체 가능성을 의미( 코드를 변경하지 않고, 확장가능하다는 객체지향의 원칙.. OCP였나.. )

한사람이 여러 역할을 수행할 수 있다. ( 여러개의 인터페이스를 구현할 수 있다는..)

메시지( 함수로) 협력

클래스에 대한 중요성이 과장됨 → 실제로 중요한 것은 객체자체

코드를 담는 클래스의 관점에서 메시지를 주고 받는 객체의 관점으로 사고의 중심을 전환하는 것

클래스가 중요하지 않다는 것이 아니라, 협력 구조와 책임을 식벼하는 것에 비해 상대적으로 덜 중요하다는 것

객체지향과 인지능력

→ 사람은 인지능력의 부족을 보완하기 위하여

→ 어떠한 개념이나 대상을 '객체'로 보는 경향이 있음

(아기도 그런 성향을 가진 것으로 보아 본능적임)

링크 + 속성(애트리뷰트)= 프로퍼티

링크는 객체를 가리키는 것

속성은 일반값

현실세계의 모방 → 그렇게할 수 있으면 코드를 이해할 수 있겠지만, 모방 맞는 것 같은데 .. ㅋㅋ 완전히 같지는 않지만, 비슷하게..

완벽한 모방은 불가능하며, 새로운 세계를 창조해야함

은유라는 말이 가장 비슷한말..

근데 결국, 비슷하면 비슷할수록, 코드가 이해하기 쉬움..

단지 꼭 같게할 필요는 없고, 같을 수도 없음

 

객체는 행위를 수행하는 데 필요한 재료

행위를 수행하는데 필요한 변수들(State)가 모여있는 것인가..

자바스크립트에서는 function에서도 같은 기능을 하는데,,

 

명확한 책임을 부여해야함

→ 이 책은 약간 느끼는게

이 책은 무언가, 실제로 핵심적인 내용은 20페이지정도이고,

나머지는 이해를 돕는 부연설명으로 보인다.

그런데, 이책의 활용법은

객체지향에 대한 나만의 스크립트를 작성하는 것으로 보인다.

다음에 읽을 때는 자신의 스크립트를 작성해보자

( 오브젝트 책 다읽고 돌아오자)

자율적인 책임!!

 

 

결론

-> 오브젝트 다읽고 다시 읽기

-> 다음번에 읽을 때는, 객체지향을 남에게 설명하는 것을 생각하여 읽기

-> 그렇게 하여 나만의 스크립트를 만들어보자