
벌써 한 달 정도 지나고 있다. 아무런 배경없이 막연하게 해보고 싶고, 해야한다는 생각으로 개발공부를 시작했다.
어디서부터 어떻게 시작해야할지, 무엇을 해야할지 모르지만 그냥 하는중이다.(지금도 크게 달라지지 않았지만 ㅎ;) 그러던중 '객체지향'이라는 놈 때문에 처음시작했던 자바 그리고 맛만 보려고 했던 알고리즘도 더이상 진입하기 어려워졌다랄까,,,
어쩌면 당연한거다. CS(computer science)지식도 없던 내가, 단번에 이해하기 어렵지. 그래도 그냥 하는중이다. 여하튼 이책을 일독하면서 전부는 아니지만 '객체지향'이라는 놈과 조금은 친해지는 중이고 여유가 되면 다독 해봐야겠다. 그리고 다시 '객체지향 언어'를 공부해야겠다.
2024.07.08 ~ 31
일독하는데 꽤나 오래걸렸다. 정보처리기사 시험과 미니프로젝트가 겹쳐서 우선순위가 조금 밀렸다. 보통 이런경우에 다시 돌아와서 진행한적이 많지 않는데 일독한데에 있어 의의를 조금두자 ㅎㅎ,,,
이해하기 어려웠다. 이해하려고 노력(?)까지는 않았는데 챕터마다 넘어가다 보니 자연스럽게 이해(?)가 되는 부분도 있었고 기초적인 cs 공부를 하고 있던 터라 아주 조금 친근하게 느껴지기도 했다. 다독을 하려고 했지만,,, 그래도 더 재밌는 책으로 일독을 시작해야겠다. ^^!!!
객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다. p47
상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 property 와 동적인 property 값으로 구성된다. 객체의 property는 단순한 객체를 참조하는 링크로 구분할 수 있다. p51
행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있따. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다. p55
식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 property. 값은 식별자를 가지지 않기 때문에 상태를 동등성 검사를 통해 두 인스턴스를 비교해야 한다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다. p58
'행동이 상태를 결정한다.' 객체는 우선 이렇게 이해를 해보자!
어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법. p77
모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것
- 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다. 어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류될수 있다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다. 객체의 행동을 가장 효과적으로 수행할 수 있다면 객체 내부의 상태를 어떤 방식으로 표현하더라도 무방하다. p92
2 번은 { } 묶는거를 의미하는거일까? 코딩에 여전히 익숙하지 않은 내가 조금씩 읽어가면서 이해가 되는건 기분탓일까? ㅋㅋ (응 아마도;)
'객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동'
협력은 한 사람이 다른 사람에게 도움을 요청할 때 생긴다.p110
객체지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. p114
책임의 집합이 의미하는 것 p 119
하나의 객체는 메시지를 전송함으로써 다른 객체에 접근한다. 사용자에 대한 객체의 독립성과 객체지향 개념을 구현한 초기 언어들의 일부 문법 때문에 객체의 행동을 유발하는 행위를 가리켜 메시지-전송이라고 한다. p146
cs지식을 정보처리기사 시험 준비로 대체하고 있는 요즘 이 책을 읽으면서 가끔 반가운 내용이 있다(?).
객체지향 프로그래밍에서 행동은 수행할 책임을 지닌 객체에서 전송된 메시지에 의해 시작된다. 메시지는 행동에 대한 요청을 표현하고, 요청을 수행하는 데 필요한 추가적인 정보를 인자를 통해 전달한다. 수신자는 메시지를 수신하는 객체를 가리킨다. 수신자가 메시지를 받아들인다는 것은 해당 행동을 수행할 책임을 받아들인다는 것을 의미한다. 객체는 메시지에 대한 응답으로 요청을 만족하기 위한 어떤 메서드를 수행할 것이다. p150
메시지는 그저 어떻게 액션하라는 것을 명시하지 않고 무엇을 실행되기를 바라는 것이다. 이걸 선택하는 것은 메서드이고 수신자의 결정에 따라 진행된다고 보인다.
유스케이스에서 출발해 객체들의 협력으로 이어지는 일련의 흐름은 객체 안에 다른 객체를 포함하는 재귀적 합성이라는 객체지향의 기본 개념을 잘 보여준다. 객체지향은 모든 것을 객체로 바라본다. 큰 객체가 더 작은 객체로 나눠질 수 있다는 사실만 제외하면 그것들 사이에 차이는 없다. 크기와 상관없이 모든 객체는 메시지를 전송하거나 수신할 수 있고 메시지에 응답하기 위해 자율적으로 메서드를 선택할 수 있다. 객체에 대한 재귀는 객체지향의 개념을 모든 추상화 수준에서 적용 가능하게 하는 동시에 객체지향 패러다임을 어떤 곳에서든 일관성 있게 적용할 수 있게 한다. p202
마지막장은 어떠한 제품을 만드는데 개략적인 과정을 보여준다. 객체지향 패러다임의 가장 중요한 도구는 객체이다.
5.메시지를 처리할 객체를 찾고 있다면 먼저 도메인 모델 안에 책임을 수행하기에 적절한 타입이 존재 하는지 본 후 책임을 수행할 객체를 그 타입의 인스턴스로 만든다.객체는 책임을 이제 할당 받게 된다.
6. 이러한 과정을 거치게 되면 협력에 필요한 객체의 종류와 책임, 주고받아야 하는 메시지에 대한 대략적인 윤곽이 잡힌다.
7. 인터페이스 정리 하기 & 구현하기