2013년 2월 19일 화요일

헤드퍼스트 OOAD -7강

7강의 주제는 아키텍처다.

아키텍처란??
시스템의 분할, 나뉜 부분들 사이의 연결과 상호 작용 메커니즘, 그리고 시스템의 디자인에 사용된 원리와 결정 사항들을 담고 있는 시스템의 구조

아키텍처가 해야할 일은 수많은 요구사항과 특징들을 잘 정리해서 설계를 하는 것이다.

예를 들어 스타크래프트3를 만든다고 해보자.
수많은 요구사항이 있을 것이다.
그럼 아키텍처는 가장 먼저 해야할일이 뭘까???
아래와 같이 요구사항이 있다고 해보자.
---------------------------------------------------------------------------------
스타크래프트 3
(특징 리스트)

1. 다양한 타입의 지형을 지원한다
2. 공상 과학 소설이나 판타지 소설에 등장하는 가상의 시대를 포함한 다양한 시대를 지원한다
3. 게임의 특성에 맞는 여러 타입의 부대들 또는 유닛들을 지원한다
4. 새로운 작전 수행이나 전쟁 시나리오를 위한 추가 모듈을 지원한다
5. 사각형의 타일들로 구성된 보드를 제공하고 각 타일은 지형 타입을 가지고 있다
6. 기본적인 이동을 관장한다
--------------------------------------------------------------------------------
아키텍처는 위와 같은 요구 사항에서 우선순위를 정하여 프로젝트를 진행해야한다.
그럼 어디서부터 시작을 해야할까?
이렇게 생각하면서 추적을 해야한다.

1. 시스템의 본질이 되는 부분은 무엇인가?
2. 이것은 도대체 무슨 의미인가?
3. 도대체 어떻게 해야하나?

이게 뭔 x소리냐고 한다면 책을 탓해라 ㅡ.ㅡ책에 그리 쓰여있다
위와 같은 요구사항에서는 가장 기본이 되는건 보드다.
보드가 있어야 뭔 유닛을 이동하고 싸우고 난리 부르스를 출 수 있는 것이다.
일단 보드를 만들자(빨리 만들어라 찰싹찰싹)

이번 스타3는 다양한 유닛이 필요하다. 유닛을 살펴보자
마법사, 검사, 저격수, 비행기, 배, 탱크, 벌레, 인부, 벙커, 잠수함 등등

아악 이것을 하나하나 구현하는것은 개발자가 할일이고 아키텍처는 유닛이라는 것을 어찌해놔야 확장성과 재사용성이 좋아지는지 고민해야한다.

1. 공통점은 무엇인가?
2. 차이점은 무엇인가?

먼저 공통점을 생각해보자.
모든 유닛은 각자의 무기가 있다, 즉, 싸울수 있다는 것이다.(심지어 scv도 싸운다)
차이점은 무기의 종류와 거리, 데미지, 방어력, 인구수 등이 다르다

스타3는 최대 8명이서 각자 200개까지의 유닛을 컨트롤하여 싸우는 게임이다
만약 공통점과 차이점을 분리하여 상속을 받아 쓰는 개념으로 만든다면
서버에 꽤 큰 부담을 줄 것이다. 그리고 밸런스 조정할 때도 꽤 힘든 작업이 될 것이다.

그래서 이번 같은 경우는 한 클래스에 전부 때려 박아서 만들 예정이다(뭐라?!!!)

과연 이게 좋은 일인가?? 물론 상속을 이용해서 만들어보고, 속도가 안나오면, 한 클래스로 묶어도 보고 그러면 얼마나 좋겠냐만......
고객과 사장은 결코 그런걸 원하지 않는다.

그럼 아키텍처는 "선택"을 해야한다. 확장성과 효율성을 선택해야하는 것이다.
확장을 하려는 것은 코드를 기능별로 나눠 놓는 것이 좋다.
효율성은 너무 많은 객체를 생성 안하는 것이 좋다.
그것을 결정하는 것은 당신의 몫이다 ( --);; ㅌㅌㅌㅌ

위험 요소를 줄이는 것이 위대한 소프트웨어를 만드는데 도움이 된다.

-핵심 정리(응? 뭘 했다고?)-


  • 아키텍처는 모든 다이어그램, 계획, 특징 리스트 들을 잘 정돈된 애플리케이션으로 만드는데  도움을 줍니다
  • 프로젝트에 매우 중요한 시스템의 특징들은 아키텍처적으로 중요합니다.
  • 시스템의 본질인 특징, 의미가 명확하지 않은 특징, 또는 처음에 어떻게 구현해야할지 명확하지 않은 특징에 초점을 맞추세요
  • 프로젝트의 아키텍처 설계 단계에서 하는 모든 일은 프로젝트 실패의 위험을 줄여야합니다.
  • 유스케이스의 세부 사항이 필요하지 않을 경우, 소프트웨어가 어떻게 이용될 수 있는지를 설명하는 시나리오를 작성하면 요구사항을 빠르게 수집하는데 도움이 됩니다
  • 특징이 무엇인지 확실히 모를 때, 고객에게 묻고, 그런 후 얻은 답을 일반화하여 특징을 잘 이해하도록 합니다
  • 공통점 분석을 사용해서 유연한 소프트웨어 솔루션을 만드세요
  • 고객은 여러분 생각에 정말 멋지게 자여진 코드에 관심이 있기보다는 그들이 원하는 일을 하고, 시간에 맞게 만들어지는 소프으웨어에 관심이 많습니다.
이번 강도 이렇게 마친다 -_-v
우왕이제 3강 남았다 >.< OOAD가 끝나면 자격증 시험 때문에 당분간 업데이트를 못할 것이다....;;;
OOAD가 끝나면 디자인 패턴, 자료구조, TCP/IP, 리눅스, 델파이 중 하나를 연재할까한다~

댓글 없음:

댓글 쓰기