프로그래밍 노트/객체지향프로그래밍

객체의 책임과 메시지 객체 설계를 더 잘하기 위해 객체를 이해해보자.. 객체는 객체지향 공동체에서 어떤 역할을 하는 것일까..? 자율적인 책임 객체지향 공동체를 구성하는 기본 단위는 ‘자율적'인 객체 자율적인 객체? 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임 이라고 한다. 즉, 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 상세한 수준의 책임들은 자율성을 제한한다. 즉 요청하는 객체에 의존할 수 밖에 없다. 증언해라 vs 목격..
더 뛰어난 객체 설계를 하기 위해 역할 / 책임 / 협력에 대해 정리한다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초첨을 맞춰 애플리케이션을 설게한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 요청을 받은 사람은 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다. 다른 사람으로부터 요청을 받은 사람 역시 자신에게 주어진 일을 처리하던 중에 다른 사람의 도움이 필요한 경우가 있다. 결과적으로 협력은 다..
초기 지하철 노선도는 지형 위에 구불구불한 운행 노선과 불규칙적인 역 간의 거리를 사실적으로 묘사하였었다. 문제는 사실적인 정보가 오히려 지하철을 이용하는 승객들로 하여금 노선도를 이해하기 어렵게 만들었다는 점이다. 지하철 노선도 디자인에서 가장 중요한 것은 얼마나 사실적으로 묘사했느냐가 아니고 역과 역 사이의 연결성을 얼마나 직관적으로 표현했느냐인 것이다. 그 후 사실적인 지형과 축적은 무시하고 역 사이의 연결성에만 집중한 혁신적인 지하철 노선도를 창조하게 된다. 승객이 꼭 알아야 하는 사실만 정확하게 표현하고(연결, 열차를 갈아타는 것) 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 만든 것이다. 즉 ,지하철 노선을 추상화한 것이다. 추상화는 목적에 맞게 현상..
객체 설계시 주의해야할 점 객체지향에 갓 입문한 사람들이 가장 쉽게 빠지는 함정은 상태를 중심으로 객체를 설계하는 것이다. 보통 먼저 객체에 필요한 상태가 무엇인지 결정한 후 그 상태에 필요한 행동을 결정을 하게 된다. 자동차에는 연료량과 바퀴를 가지고 있다 → 자동차가 달리면 연료량이 줄어든다. 이렇게 상태를 먼저 결정하고 행동을 나중에 결정한다면 설계에 나쁜 영향을 주게 되는데.. 첫째, 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출 경우 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되버릴 확률이 높아진다. 둘째, 객체를 협력자가 아닌 고립된 섬으로 만든다. 객체가 필요한 이유는 애플리케이션 문맥내 다른 객체와 협력하기 위함이다. 상태를 먼저 고려하는 ..
프로그래밍을 하면서 가장 힘든게 객체지향적으로 프로그래밍을 하는 것이다. 메소드를 어디에 위치를 시켜야 맞는 것일까? 객체의 책임은 어디까지 가져가야하는 것일까? 요즘들어 이런 생각들을 자주하게 되면서 코드를 썻다 지웠다하는 것 같다. 혼자 해결이 불가능하여 예전에 읽고 잊어버렸던, 사실은 그 당시에는 잘이해가 안되었던 것 같다. 객체지향의 사실과 오해란 책을 피고 객체에 대해 다시 읽어 보았다. 고민을 하고 읽을 때와 무지성으로 읽었을 때는 확실히 다르더라.. 이 곳에 정리되는 내용은 나중에 객체가 무엇이였지? 라고 생각될 때 기억을 되살리기 위해 작성됬다. 객체 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있다. 개념적인 사물? - 오늘의 주문내역 혹은 어제..
추상화를 통한 복잡성 극복 추상화 란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정 어떤 양상, 세부사항, 구조를 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다. 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것 모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 기억해야 한다. 객체지향 패러다임은 객체라는 추상화를 통해 현실의 복잡성을 극복한다. 그리고 객체 지향 패러다임을 이해하고 유용하고 아름다운..
객체 ⇒ 물리적인 경계를 지닌 구체적인 사물. (추상적인 사물까지도 사람들은 객체로 인식할 수 있다.) ex) 주문, 계좌 이체 물리적인 실체는 존재하지 않더라도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 객체지향 패러다임의 목적 : 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것 객체, 그리고 소프트웨어 나라 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다. 상태(state) 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인..
본 내용은 객체지향의 사실과 오해라는 책 내용을 정리한 것이며, 자세한 내용은 책을 참고하시길.. 기능을 구현하기 위해 협력하는 객체들 손님 → 캐시어 → 바리스타 커피를 주문하는 과정은 객체지향의 핵심적이고 중요한 개념을 거의 대부분 포함하고 있다. 사람이라는 단어를 객체 손님, 캐시어, 바리스타 에이전트의 요청을 메시지 손님 → 캐시어 : 주문을 요청 캐시어 → 바리스타 : 커피제조를 요청 요청을 처리하는 방법을 메서드 캐시어 : 주문을 받은 후 바리스타에게 커피제조를 요청한다. 바리스타 : 커피제조를 한다. 역할과 책임을 수행하며 협력하는 객체들 사람들은 커피 주문과 같은 특정한 목표를 이루기 위해 서로 협력한다. 실세계 : 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 ..
깡냉쓰
'프로그래밍 노트/객체지향프로그래밍' 카테고리의 글 목록