-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
객체지향의 사실과 오해 1장 ~ 4장 #423
The head ref may contain hidden characters: "417-\uAC1D\uCCB4\uC9C0\uD5A5\uC758-\uC0AC\uC2E4\uACFC-\uC624\uD574-1\uC7A5-4\uC7A5-\uCD1D-118\uD398\uC774\uC9C0-2024-05-31-2"
객체지향의 사실과 오해 1장 ~ 4장 #423
Conversation
우측에 있는 |
현 시점에서 객체지향의 개념들이 메모리에서 어떻게 생각해볼 것인가는 크게 의미가 없지 않나? 라는 생각이 듭니다. 같은 도메인을 절차지향적으로 짰을 때, 유리한 모델이 있을 것이고 객체지향으로 나타내는 것이 더 유리할 수 있을 수 있지만 그 둘의 메모리나 성능적인 차이는 매우 미미할 것 같습니다. 다만 그것을 설계하거나 유지보수하는 관점에서의 차이가 객체지향과 절차지향의 차이점이라고 생각합니다. (사용자 입장이 더 중요하지 않을까?) 또한,
자동차를 보더라도 한 부품이 모든 일을 하지 않듯이 어떠한 시점으로 보느냐의 차이인 것 같습니다. 차의 속력을 위해 엔진을 보면 엔진의 기능을 담당하지만, 사실 한 걸음 더 가서 살펴보면 엔진조차 다른 모듈의 조합으로 이루어져있기 때문에 자신의 책임만 수행할 뿐 내부에선 또 다른 객체가 존재한다는 사실이 있는데, 이건 어디까지의 추상화 수준으로 볼 것 이냐의 문제가 아닐까 합니다. 창발적이기도 하면서 재귀적인 구조로 이루어지는데, 이것이 잘 설계된 객체지향 코드를 볼 때 쉽게 이해할 수 있는 이유가 아닐까 싶습니다. (전체적인 흐름을 볼 때) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 객체지향은 개념적인 것이고 어떻게 보면 하드웨어와 그 위에 운영체제, 컴파일러 등의 구현의 수준과는 큰 차이가 있다고 봅니다.
객체지향을 논하면서 성능 문제를 얘기하는 건 제가 예전에 상속 구조에서 메소드 오버라이드를 쓰면 호출해야 하는 메소드를 찾는 과정에서 시간이 소모된다 정도의 미미한 논의 정도였습니다.
메모리에서 타입의 구분은 사실 객체지향을 얘기하면서 알아보기 보다는
컴퓨터 공학에서 얘기하는 컴퓨터 구조론을 보면 더 자세히 설명이 되어 있기 때문에 보면 좋을 수 있습니다.
이정도 수준의 질문을 알아보려면 결국 컴퓨터 공학의 중요한 지식 쳬계를 알아가는게 좋긴 합니다.
최근에 나온 컴퓨터 구조론 관련 책을 읽고 정리한 건데
보면 조금은 도움이 되실 겁니다.
책에서 반복되서 설명하는 내용이기는 한데
객체들이 스스로 일을 하기 보다는 협력 관계를 통해 요청/응답이 일어나면 객체들이 맡은바 책임을 성실히 수행한다 쪽으로 이해하는게 맞다고 생각합니다.
잘 설계된 객체? 설명을 곰곰히 고민해보면 잘 설계된 객체는 스스로 자신이 맡은 일을 잘 하는 객체같다. 그리고 신과 같은 객체는 자멸한다고도 하는데, 과연 정말 그런건가? 그래서 신은 없어진건가? 그렇다면 All in one 머신이나 기계들은 잘 설계된 것이 아닌가? 이 책에서 말하는 잘 설계된 객체는 명확한 책임을 가진 객체로 볼 수 있고, 그 책임이 너무 많은 객체는 신과 같은 객체로 불리는 것 같습니다 조금 다른 맥락으로 django 에서는 fat model 을 지향하는데, 이게 다른 관점에선 일종의 god object 처럼 보일 수 있습니다. 하지만, django에서는 fat model 형태로 비즈니스 로직을 데이터베이스 모델과 매핑되는 클래스 이하의 메소드로 구현하는 것을 권장하기 때문에, django 프레임워크의 model class 입장에서는 좀 다를 수가 있습니다(사실 이부분은 객체지향과는 별개로 클래스의 활용이기 때문에 다른 내용일 수 있기도 합니다) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
잘 설계된 객체? 설명을 곰곰히 고민해보면 잘 설계된 객체는 스스로 자신이 맡은 일을 잘 하는 객체같다. 그리고 신과 같은 객체는 자멸한다고도 하는데, 과연 정말 그런건가? 그래서 신은 없어진건가? 그렇다면 All in one 머신이나 기계들은 잘 설계된 것이 아닌가?
잘 설계된 관계에서 자기가 맡은 일을 잘 하는 객체가 잘 설계된 객체인 것 같습니다.
객체지향의 사실과 오해 1장 ~ 4장
이 책은 비전공자인 내가 본격적으로 부트캠프에서 iOS 과정을 밟아나가던 프로그래밍에 대해 잘 모르던 시기에 추천 받아서 한 차례 읽었었다. 당시 기본 문법만 익힌 상태에서 읽었을 때는 어떤 개념은 코드로 연상하면서 이해가 되었는데, 어떤 부분은 개념이 잘 와닿지 않았다. 이제 다시 읽었을 때는 객체지향 패러다임이 꽤나 사람의 인지와 자연스러운 성향을 고려해서 만들어진 사람 친화적인 하지만 현실과는 사뭇 다르다는 생각이 든다.
발견과 상상력
객체라는 것은 사람이 인지하고 발견한 것의 상태와 행동을 추상화한 것이다. 추상화라는 것이 세부적인 것 보다는 그 객체를 나타내는 간추려진 특징이라 생각해보면 세부적인 것을 모두 구현하지 않았다는 것에 현실과 객체지향은 다른 점이 명백하다. 예를 들어서 사람을 정의할 때 이족 보행, 눈 코 입 등으로 특징을 정할 수도 있겠지만, 현실에서의 사람은 수많은 원소와 화학적인 반응의 결합체다. 이런 세부적인 것을 모두 발견해내고 원리를 알아냈을 때 비로서 현실과 컴퓨터의 세계는 같아지는 것 아닐까란 생각이 든다. 즉 지금도 로봇이 개발되고 사람 형태를 띄지만 완벽하게 닮지 않은 이유도 현실과 다른 관점을 지니기 때문이 아닐까? 따라서 사람의 인지 능력과 인지한 것의 조합만큼의 상상력이 객체를 결정하기에, 발견과 상상력이 중요한 요소라 생각이 들었다.
자율성
커피 공화국과 이상한 나라의 엘리스 등을 통해 객체의 역할, 책임, 협력을 예시로 드는데 관심이 갔던 부분은 객체의 자율성이다. 단순히 객체의 자율성이 무엇인가란 생각을 했을 때 쉽게 와닿지 않았는데, 메세지가 전달 되었을 때 맡은 책임을 스스로 완수 할 수 있다는 관점으로 이해가 되었다. 이 때 완수를 하는 방법은 다양하게 구현할 수 있으며, 메세지에 대한 책임을 스스로 지닌다. 그리고 이런 자율성, 즉 스스로 어떤 책임을 잘 할 수 있는 상태일 때 협력에서 시너지를 발휘할 수 있다는 점에서 공감을 하였고, 내가 객체라면 스스로 어떤 책임을 할 수 있어 협력에 참여할 수 있는가?를 스스로 되물었다.
상태와 행동
상태를 행동으로 인해 생겨난 결과로 이야기한 부분도 흥미 깊었다. 그리고 객체지향을 행동 중심으로 바라보는 관점도 인상이 깊었는데, 상황과 맥락에 따라서 행동이 달라진다는 점이, 사람의 심리와도 어느 정도 비슷한 부분이 있다고 생각이 들었다. 사람도 처한 상황과 상태에 따라 행동의 결과가 달라지기도 하니까 말이다. 따라서 행동에 따른 결과가 늘 좋지만은 않겠지만, 좋은 결과를 통해 상태를 좋게 유지한다면 스트레스를 덜 받지 않을까? 란 생각도 하였다. 상태를 애써 바꾸려고 하기 보다는 행동으로 발생한 상태를 잘 파악하면서 좋은 결과를 만드는 행동을 하는 것이 중요해 보인다. 그게 쉽지만은 않겠지만
협력
어떤 공동의 목표를 위해 객체가 서로 메시지를 주고 받으며 협력하는 관점은 실제 사람이 모여 일을 처리해나가는 방식과 유사하다. 그러나 객체라는 것은 우리가 인지하는 부분으로 추상화된 개념이며, 또 때로는 어떤 비현실적인 부분으로 구현되기에 협업의 형태가 완전히 같다고 할 수 없을 것 같다. 한편으로 사람을 객체로 비유하자면, 어떤 메세지를 받았기에 요청에 응답하는 것일까? 생체적인 변화나 인간의 탄생 이런 것들이 어떤 메세지를 받았기에 나타는 결과일까? 좀 딴길로 새서 생각을 해보기도 했다. 최초로 메세지를 전달한 자는 누구인가?
논의할 점
역할, 책임, 협력, 상태, 행동, 타입 및 추상화 등등 개념적인 것들이 실제 컴퓨터 메모리와 성능 관점으로 가면 어떻게 생각해볼 수 있는 것일까? 타입이란 것은 0과 1로 이루어진 것들을 조금 더 쉽게 구분하기 위해 의미를 부여한 것인데, 그렇다면 실제 메모리에서 어떻게 타입이 구분되는 것일까?
잘 설계된 객체? 설명을 곰곰히 고민해보면 잘 설계된 객체는 스스로 자신이 맡은 일을 잘 하는 객체같다. 그리고 신과 같은 객체는 자멸한다고도 하는데, 과연 정말 그런건가? 그래서 신은 없어진건가? 그렇다면 All in one 머신이나 기계들은 잘 설계된 것이 아닌가?
으엇 하나만 다는지 몰라서 ... 일단은 답변이 달려서, 2번에 대해 더 논해보면 좋을 것 같습니다.