목록object (8)
개발자는 기록이 답이다

3. 역할 역할과 협력 객체는 협력이라는 주어진 문맥안에서 특정한 목적을 갖게 되고, 객체의 목적은 협력 안에서 객체가 맡게 되는 책임의 집합으로 표시된다. 이처럼 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부른다. 영화예매 협력에서 "예매하라"라는 메시지를 처리하기에 적합한 객체로 Screening을 선택했다. 하나의 단계처럼 보이는 이 책임 할당 과정은 실제로 두 개의 독립적인 단계가 합쳐진 것이다. 1. 영화를 예매할 수 있는 적절한 역할이 무엇인가 찾는다 2. 역할을 수행할 객체로 Screening 인스턴스를 선택한다 역할에 특별한 이름을 부여하지 않았지만 실제로는 익명의 역할을 찾고 그 역할을 수행할 수 있는 객체를 선택하는 방식으로 설계가 진행된 것이다. Screenin..

2장에서는 클래스, 추상 클래스, 인터페이스를 조합해서 객체 지향 프로그램을 구조화하는 기본적인 방법과 상속을 이용해 다형성을 구현하는 기법을 소개했다. 다형성이 지연 바인딩이라는 매커니즘을 통해 구현된다는 사실도 설명했고, 상속은 코드를 재사용할 수 있는 가장 널리 알려진 방법이지만 캡슐화의 측면에서 합성이 더 좋은 방법이라는 사실을 이해했다. 또한, 유연한 객체지향 프로그램을 위해서는 컴파일 시간 의존성과 실행 시간 의존성이 달라야 한다는 사실 역시 알게 됐다. 객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 클래스, 상속, 지연바인딩이 중요하지 않은것은 아니지만 구현 측면에 치우쳐 있으며 객체지향 패러다임의 본질과 거리가..

3. 설계 개선하기 이전 포스팅에서 설명했던 것을 토대로 변경과 의사소통이라는 문제는 서로 엮여있다. 코드의 의도를 정확하게 파악할 수 있도록 하려면, Audience와 TicketSeller를 변경할 때 Theater도 함께 변경해야 한다. Theater가 Audience와 TicketSeller에 관해 너무 세세한 부분까지 알지 못하도록 해야 한다. 관람객이 스스로 가방 안의 현금과 초대장을 처리하고, 판매원이 스스로 매표소의 티켓과 판매 요금을 다르게 한다면 문제를 해결할 수 있다. 다시 말해서 관람객과 판매원을 자율적인 존재로 만들면 된다. 자율성을 높이자 1. Theater의 enter 메서드에서 TicketOffice에 접근하는 모든 코드를 TicketSeller내부로 숨기기 여기서 Ticke..

이론이 먼저일까, 실무가 먼저일까? from 로버트 L.글래스 로버트 L.글래스는 어떤 분야를 막론하고 이론을 정립할 수 없는 초기에는 실무가 먼저 급속한 발전을 이룬다고 한다. 실무가 어느 정도 발전하고 난 다음에야 비로소 실무의 실용성을 입증할 수 있는 이론이 서서히 모습을 갖춰가고, 해당 분야가 충분히 성숙해지는 시점에 이르러서야 이론이 실무를 추월하게 된다고 했다. 따라서 객체 지향 프로그래밍을 설계하고 유지보수하는데 필요한 원칙과 기법을 배우기 위해 추상적인 개념이나 이론보다 코드를 만지고 손을 더럽혀야 한다. 1. 티켓 판매 애플리케이션 구현하기 여러분은 연극이나 음악회를 공연할 수 있는 소극장을 경영하고 있다. 홍보를 위해 추첨을 통해 선정된 관람객에게 무료 공연 초대장을 발송했다. 이벤트가..