객체지향
특정 기능을 수행하기 위한 데이터와 데이터를 사용하는 연산을 하나로 묶어서 객체로 표현하는 접근 방법
설계
도메인 중심의 분석 결과물을 소프트웨어 관점의 산출물로 전환하는 과정
기본 원리
추상화
- 사물의 대표적인 특징으로 대상물을 나타내는 것
- 여러 클래스의 부모 클래스를 생성하거나 유사한 클래스를 묶어서 하나의 패키지로 표현하는데 추상화를 적용
단계적 상세화
클래스 멤버들에 대한 제약 사항 설계, 메서드의 내부 로직 설계 등과 같은 단계적인 구체화 작업 진행, 구현과 관련된 정보들을 도출
모듈화
- 변경에 대처하고 확장성을 높이기 위한 방법
- 클래스 구성 요소에 대한 통합, 분리, 이동 등을 통해 모듈화를 높일 수 있음
정보 은닉
- 외부에 꼭 필요한 사항만 공개하기 위하여 클래스 멤버들에 대한 참조 범위
- Public, Private 등과 같은 선언이 필요함
관심사의 분할
상위 설계, 상위 설계 등의 개발 과정에서 사용자 인터페이스, 자료 구조 등의 소프트웨어 시스템 구성 요소 등에 대한 관심사를 분리하여 설계 활동을 진행
설계 결과물로 발전시키기 위한 세 가지 기법
팩토링(Factoring)
- 모델 요소의 유사점이나 차별점에 따라 별도의 모듈(예를 들면, 클래스)로 분리하는 과정
- 새로운 클래스를 생성하는 방법으로 클래스들의 공통점을 추출하여 상위 클래스를 생성하는 일반화 과정과 상호 관련성이 존재하는 요소들을 집합 관계로 정의하는 과정을 고려할 수 있음
- 추상 클래스 혹은 상위 클래스를 생성하기 위해 추상화 과정을 진행하거나 한 클래스의 하위 클래스를 생성하기 위하여 상세화 과정을 진행함으로써 팩토링이 이루어짐
파티셔닝(Partitioning)
- 분할은 큰 모델을 세부 모델로 나누는 과정
- 작은 모델은 시스템을 구성하는 서브시스템이 될 수 있음
- 분할 과정에서 모듈화 개념을 적용하는데, 모델 요소 간의 메시지 전송이 많다면 이들을 하나의 서브시스템으로 통합하는 것이 유리함
계층화(Layering)
- 시스템을 구성하는 요소들을 운영과 사용 환경 등을 고려하여 서로 다른 특징의 그룹으로 분리하는 과정
- 서비스 제공을 위한 내부 처리 로직과 사용자 인터페이스를 분리
- MVC(Model-View-Controller)와 같은 아키텍처로 시스템을 설계하는 것
- View: 사용자에게 처리 로직의 결과를 보여주는 부분
- Controller: 로직을 수행시키기 위한 입력을 제공하는 부분
- 3계층(3-Layered) 아키텍처 기반 계층화
- HCI(Human Computer Interaction) 계층: 사용자 인터페이스에 해당하는 클래스를 포함
- PD(Problem Domain) 계층: 분석 과정에서 도메인 클래스들을 포함하는 계층
- DM(Data Manipulation) 계층: 파일 또는 데이터베이스 테이블에 해당하는 데이터 클래스를 포함하는 계층
패키지 다이어그램
- 클래스 다이어그램의 클래스 간 관계를 고려하여 서로 관련성이 높은 클래스들, 즉 클래스 간 응집력이 높은 것들을 하나의 패키지로 묶어 표현한 것
- 전체 시스템을 상위 수준(혹은 서브시스템 수준)에서 바라볼 수 있도록 지원하기 때문에 직관적으로 소프트웨어의 구조를 이해하기 쉬움
- 추후 하드웨어 장치에 소프트웨어를 할당하기 위한 기본 단위로 패키지를 활용
패키지 다이어그램 작성 절차
(1) 패키지 다이어그램을 작성할 대상물을 선정함
(2) 클래스들의 관계를 고려하여 관련성이 높은 것들을 그룹핑하여 패키지로 정의
- 일반화(Generalization) 관계를 형성하는 모든 클래스는 하나의 패키지로 묶는다.
- 집합(Aggergation) 관계를 형성하는 모든 클래스는 하나의 패키지로 묶는다.
- 클래스의 의미적 속성, 즉 클래스 멤버 변수나 함수의 유사성을 고려하여 클래스를 패키지화할 것인지 결정
(3) 식별된 패키지에 적절한 명칭을 부여함
명칭을 부여하기 어려운 패키지가 있다면 패키지 분리 가능성을 고려해야 함
(4) 패키지 간의 관계를 부여함
서로 다른 패키지를 가로지르는 기존 클래스 간의 관계 타입을 고려하여 패키지 관계를 결정
(5) 패키지 관계를 정의하면 다이어그램의 프레임을 사용하여 패키지 다이어그램 완성
사용자 인터페이스 설계
인터페이스 설계 절차
1. 사용 시나리오(Use Scenario) 개발
- 시스템 사용자 입장에서 '어떤 시나리오에 따라 시스템이 사용되는가'를 기술한 것
- 사용자가 원하는 서비스를 수행하기 위하여 다수의 유스 케이스와 연관성을 가짐
ex) 인터넷 쇼핑몰에서 특정한 상품을 주문시
- 사용자는 검색을 수행하고, 검색 결과에 대한 특정 상품의 상세 정보를 얻음
- 상품을 장바구니에 담거나 결제하여 구매하는 과정을 표현함
- 이때 각 시나리오 스텝은 대응되는 유스 케이스 시나리오 스텝과 연결됨
2. 인터페이스 구조 설계
- 도출된 모든 사용 시나리오의 각 스텝을 블록 다이어그램 형태로 도식화하는 것
- 윈도우 내비게이션 다이어그램 작성
3. 인터페이스 표준 템플릿 개발
4. 인터페이스 프로토타입 개발
템블릿을 기반으로 대상 시스템에 대한 인터페이스의 프로토타입 개발
5. 인터페이스 평가
- 개발된 프로토타입이 적절한지 평가
- 개발 팀 내부 평가를 진행하고 사용자 평가 혹은 시나리오 기반 평가 등
인터페이스 클래스 설계
- 도메인 클래스의 모든 클래스에 대해 인터페이스 클래스로 정의
- 한 클래스의 멤버 함수가 모두 Private 메서드로만 구성된다면 별도의 인터페이스 클래스를 구성하지 않음
- 스테레오타입
<<interface>>
로 정의, 대응되는 도메인 클래스의 Public 메서드를 순수 가상 함수로 선언하여 포함
- 인터페이스 클래스에 정의된 메서드는 사용자 인터페이스의 메뉴와 연결
- Java 언어를 이용하여 인터페이스를 개발하는 경우 인터페이스 클래스는 도메인 클래스와 상세화관계를 형성