큰 문제를 이루는 각 조각들을 알아내는 것만으로는 충분하지 않다. 이러한 조각들이 어떻게 연결되는지 그리고 어떤 조각들이 다른 것들에 비해 더 중요한지에 대해서 좀 알아야 한다. 쓸데 없는 일로 시간을 낭비하지 않아야 한다. 우리는 아키텍처가 필요하다. 아키텍처는 디자인의 구조이고, 프로그램의 가장 중요한 부분들과 그들 사이의 관계를 명확히 보여준다. 디자인의 구조 디자인의 유연성을 앞서 살펴보았다. 이렇게 아키텍처는 커다란 시스템들의 설계에 도움이 된다. 가장 중요한 부분들 이것이 우리가 필요한 것인데... 가장 중요한 것이 무엇인지 알아가보자. 그들 사이의 관계 유스케이스 다이어그램으로 부분들의 관계에 대해 다루기는 했지만, 여전히 모듈간의 연경방식은 명확하지 않다. 학자코너 아키텍처란? 아키텍처는 ..
도메인 분석, 유스케이스 다이어그램 같은 새로운 도구들을 배워보자. 큰 문제는 어떻게 바라보는가에 해답이 있다. 큰 문제는 여러개의 기능별 조각들로 나누고 각 조각들을 개별적으로 풀어감으로써 해결할 수 있다. 여러분이 이미 알고 있는 것들... 변하는 것을 캡슐화하여 프로그램을 더 유연하고 변경하기 쉽게 만든다. 좋은 요구 사항을 얻는 가장 좋은 방법은 시스템이 해야 할일을 이해 하는 것이다. 구현에 맞추서 코딩하는 것보다 인터페이스에 맞추어 코딩하면 소프트웨어의 확장이 더 쉬워진다. 위대한 소프트웨어는 변경과 확장이 쉽고 고객이 원하는 일을 한다. 분석은 시스템이 실세계에서 잘 동작하도록 만드는데 도움이 된다. 특징(feature)들 찾아내기 특징은 시스템이 해야 할 일에 대해 추상적으로 설명한 것이다..
변화는 피할 수 없다. 소프트웨어를 변하기 쉽게 만들지 않으면, 고객의 변하는 요구 사항을 수용하는 것도 어렵다. 추상클래스 추상 클래스는 실제 구현 클래스를 위한 저장 장소이다. 추상 클래스는 기능(behavior)을 정의하고, 그 기능은 서브 클래스가 구현한다. 추상 클래스는 저장 장소 역할만 하기 때문에 인스턴스화할 수 없다. 상속 받은 자식클래스를 담을 수 있는 객체로 사용된다. 두개 이상의 클래스에서 공통된 기능을 발견할 때마다 그 행동을 하나의 클래스로 추상화하여 그 행동을 재사용하도록 하세요. 소프트웨어가 잘 설계되었나? 소프트웨어가 잘 설계되었는지 알아보는 가장 좋은 방법 중의 하나는 수정해보는 것이다. 수정하기가 어려우면 설계가 잘 못되었다는 것이다. 인터페이스는 무엇인가? 인터페이스는 ..
소프트웨어는 완벽한 세상이 아닌, 실제 세상에서 동작해야 한다. 실세계에서도 프로그램이 문제없이 동작하게 하는 핵심은 분석이다. 문제 찾기 분석을 잘하는 첫 번째 단계는 잠재된 문제들을 찾는 것이다. 미래를 예상해서 문제를 찾을 수도 있고, 실세계에서 원하는대로 동작하지 않아서 문제를 찾을 수도 있다. 유스케이스는... 유스케이스를 여러분과 상사 그리고 고객이 이해하기 쉬운 방식으로 작성하라. 분석과 유스케이스들은 고객, 관리자, 동료에게 여러분이 만드는 시스템이 실세계에서 어떻게 동작할지 보여준다. 유스케이스 업데이트 새로운 목표를 가지는 유스케이스가 생기면 새로운 유스케이스를 만들면 된다. 각 유스케이스는 하나의 특정한 목표를 가지고 있어야 한다. 본문 분석 클래스들과 메소드들을 찾아내기 위해 유스케..
고객의 요구사항은 변할 수 있다. 고객이 프로그램을 만족할 때까지 요구사항을 계속 변하는 것이다. 고객은 항상 옳다. 요구 사항이 변할 때에도 여러분은 프로그램을 업데이트해서 고객의 기대에 맞춰 동작하게 만들 준비가 되어 있어야 한다. 고객이 새로운 요구 사항이 있으면, 그러한 요구 사항에 맞춰 프로그램을 수정하는 것은 여러분의 몫이다. 변경 소프트웨어를 개발할 때, 항상 변하지 않는 원칙이 하나 있다. 그것은 변경이다. 여러분이 아무리 프로그램을 잘 설계하여도 프로그램은 끊임없이, 항상 성장하고, 변화한다. 문제에 대한 새로운 해결 방안을 발견하거나, 프로그래밍 언어가 진화하거나, 고객이 새로운 요구사항을 추가할 수도 있다. 시나리오 첫 단계부터 마지막 단계까지 유스케이스를 거치는 하나의 전체 경로를 ..
고객이 정말 원하는 것이 무엇인지 요구 사항을 수집하는 방법을 알아보자. 하나의 요구 사항이라는 것을 정확히 무엇일까? 여러분의 시스템이 올바르게 동작하기 위해서 수행하는 특정한 하나의 일이다. 시스템 작업중인 프로젝트를 의미한다. 올바르게 동작 시스템이 올바르게 동작하는지는 고객이 결정한다. 고객이 깜빡 잊고 얘기하지 않더라도 그것을 구현하지 않으면 시스템은 제대로 동작되는 것이 아니다. 수행하는 특정한 하나의 일 하나의 요구사항은 보통 한가지 일이고 그 요구 사항을 해결했다는 것을 확인하기 위해 테스트를 할 수 있다. 요구사항 요구사항이란? 하나의 요구 사항은 특정 상품이나 서비스가 어떤 것이어야 하는지 또는 무엇을 수행해야 하는지를 자세하게 설명한 것이다. 주로 시스템 엔지니어링이나 소프트웨어 엔지..
객체지향 분석 설계(OOAD, Obejct-Oriented Analysis & Design)는 항상 여러분이 위대한 소프트웨어를 작성하는데 도움을 준다. 위대한 소프트웨어란 ? 고객이 원하는 기능을 수행해야 한다. 잘 설계되어 있고 잘 코딩되어 있고 유지보수와 재사용, 그리고 확장이 쉽다. 쉬운 3단계로 위대한 소프트웨어 만들기 여러분의 소프트웨어가 고객이 원하는 기능을 하도록 하라. 객체 지향의 기본 원리를 적용해서 소프트웨어를 유연하게 하라. 유지보수와 재사용이 쉬운 디자인을 위해 노력하라. 객체 지향의 기본 원리 추상화(클래스화 + 상속 + 인터페이스) 캡슐화 다형성 잘못된 클래스를 찾는 방법 클래스는 자신의 이름이 나타내는 일만 해야 한다. 클래스는 하나의 개념만 나타내야 한다. 사용되지 않는 속..