BOOK (23)


개념관점에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 명세관점에서 프로그래머는 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점을 맞춘다. 인터페이스와 구현을 분리하는 것은 훌륭한 객체지향 설계를 낳는 가장 기본적인 원칙이라는 점을 기억하라. 구현관점의 초점은 객체즐이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것이다. 소프트웨어가 대상으로 하는 영역인 도메인을 단순화해서 표현한 모델을 도메인 모델이라고 한다. 객체가 수신한 메시지가 객체의 인터페이스를 결정한다. 소프트웨어 클래스가 도메인 개념의 특성을 최대한 수용하면 변경을 관리하기 쉽고 유지보수성을 향상시킬 수 있다. 최대한 변화에 안정적인 인터페이스를 만들기 위해서는 인터페이스를 통해 구현과 관련된 세부사항이 ..


자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라. 훌륭한 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에 예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야 한다. 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다. 객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다. 안정적인 객체 구조는 변경을 수용할 수 있는 유연한 소프트웨어를 만들 수 있는 기반을 제공한다. 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다. 기능은 사용자의 목표를 만..


자율적인 책임의 특징은 객체가 '어떻게'해야 하는가가 아니라 '무엇'을 해야 하는가를 설명한다는 것이다. 다형성이란 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 메커니즘을 가리킨다. 서로 다른 객체들이 다형성을 만족시킨다는 것은 객체들이 동일한 책임을 공유한다는 것을 의미한다. 다형성을 사용하면 송신자가 수신자의 종류를 모르더라도 메시지를 전송할 수 있다. 즉, 다형성은 수신자의 종류를 캡슐화한다. 객체지향 패러다임이 강력한 이유는 다형성을 이용해 협력을 유연하게 만들 수 있기 때문이라는 점을 기억하라. 객체지향의 강력함은 클래스가 아니라 객체들이 주고받는 메시지로부터 나온다. 객체지향 패러다임으로의 전환은 시스템을 정적인 클래스들의 ..


객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 어떤 협력에 참여하는지가 객체에 필요한 행동을 결정하고, 필요한 행동이 객체의 상태를 결정한다. 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에 할당하는 것 객체의 책임은 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성된다. 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시한다. 역할이 재사용 가능하고 유연한 객체지향 설계를 낳는 매우 중요한 구성요소이기 때문이다. 동일한 역할을 수행하는 객체들이 동일한 메시지를 수신할 수 있기 때문에 동일한 책임을 수행할 수 있다는 것은 매우 중요한 개념이다. 역할은 객체지향 설계의 단순성, ..


추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다. 추상화의 수준, 이익, 가치는 목적에 의존적이다. 개념의 세 가지 관점 - 심볼 : 개념을 가리키는 간략한 이름이나 명칭 - 내연 : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다. - 외연 : 개념에 속하는 모든 객체의 집합 개념을 이용해 공통점을 가진 객체들을 분류하 수 있다는 아이디어는 객체지향 패러다임이 복잡성을 극복하는 데 사용하는 가장 기본적인 인지 수단 분류란 특정한 객체를 특정한 개념의 객체 집합에 포함시키거나 포함시키지 않는 작업을 의미한다. 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정한다. 적절한 분류 체..


객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것이다. 객체란 식별 가능한 개체 또는 사물이다. 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 상태는 근본적으로 세상의 복잡성을 완화하고 인지 과부하를 줄일 수 있는 중요한 개념이다. 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다. 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티라고 한다. 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값(속성)과 다른 객체를 참조하는 링크로 구분할 수 있다. 객체는 스스..


객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 두번째 걸음은 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 존재로 바라보는 것 세번째 걸음은 협력에 참여하는 객체들에게 얼마나 적절한 역할과 책임을 부여할 수 있느냐 마지막 걸음은 프로그래밍 언어라는 틀에 흐트러짐 없이 담아낼 수 있는 기술을 익히는 것 객체지향의 목표는 새로운 세계를 창조하는 것이다. 객체지향에서 가장 중요한 개념 세가지 역할, 책임, 협력 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것이다. 객체는 충분히 협력적이고 자율적이어야 한다. 객체의 자율성은 객체의 내부와 외부를 명황하게 구분하는 것, 다른겍체가 무엇을 수행하는지는 알..


머리 좋은 사람은 부지런한 사람을 따라갈 수 없고, 부지런한 사람은 꾸준한 사람을 따라갈 수 없다. - 부지런하고 꾸준하다는 게 얼마나 어려운 일인지 알고 있다. 하루 한가지 계획을 지키는 것도 쉽지 않다. 하지만 완벽함보다 꾸준함을 무기로 앞으로의 하루를 값지게 보내야겠다. 왜 우리는 열심히 달릴 때만 잘하고 있다고 생각할까? ... 빨리 회복해야 한다며 자신을 재촉한다. - 계획을 세우고 매일매일 체크하기 시작하면서 감기에 걸리거나 백신을 맞고 쉬는 것 조차 불안하고 죄책감을 느꼈었다. 정말 빨리 나아야한다고 생각하면서 일부러 전기장판 온도를 올리고 자기도 했다. 계획을 지키는 것도 좋지만, 나를 더 생각해보자. 지금 나에게 필요한 일이 무엇인지! 그것이 휴식이라면 나를 위해 푹 쉬자 틈틈이 쉬는 시..


무언가를 시작하는 데 두렵지 않다면 그 일은 애초에 인생의 터닝 포인트가 아니라 평범한 일과에 불과할 가능성이 크다. - 요즘 공부를 하면서도, 회사에 지원을 하면서도 할 수 있을지, 지원하는게 의미가 있는 것인지 뭔가 무섭고 불안한 마음들이 많이 들었다. 하지만 이것도 내가 이겨내야 할 한가지에 불가하다. 평소 안정감을 느끼는 공간에서 벗어나 새로운 환경에 놓여보고 조금 불편하더라도 어색한 순간을 이겨내야 한다. - 집에 있는 시간이 길어지다 보니 마냥 집에 있는게 좋고 점점 게으러지는거 같다. 나도 새로운 환경을 찾아 나서야지 두려움을 이겨내는 방법은 딱 한가지, 눈을 딱 감고 시작버튼을 누르는 것이다. - 나도 마음을 먹었다! 마음 굳게 먹고 버튼부터 누르자! 내가 이 일을 할 수 있을까 의문을 품..