어두운 지도를 조금씩 밝혀나가는 데에서 즐거움을 느낀다면
: 소프트웨어의 골격이 되는 기본 구조. 소프트웨어의 구성 요소들 간의 관계를 표현하는 시스템의 구조
※ 소프트웨어 설계 단계
1. 모듈화 (Modularity)
: 시스템의 기능을 모듈 단위로 나누는 것
2. 추상화 (Abstraction)
: 문제를 전체적, 포괄적 개념부터 설계한 후, 차례로 세분화하여 구체화해 나가는 방식
3. 단계적 분해 (Stepwise Refinement) by Niklaus Wirth
: 문제를 상위 중요 개념부터 하위 개념으로 구체화 시키는 하향식 설계 전략
4. 정보 은닉 (Information Hiding)
: 한 모듈 내부의 절차와 자료들은 정보가 감추어져 다른 모듈의 접근과 변경이 불가능함
: 소프트웨어 아키텍처의 품질 평가 요소들을 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화한 것.
1. 시스템 측면
2. 비즈니스 측면
3. 아키텍처 측면
1. 설계 목표 설정
: 요구사항을 분석하여 전체 시스템의 설계 목표 설정
2. 시스템 타입 결정
: 시스템 및 서브 시스템의 타입 결정. 설계 목표를 고려하여 아키텍처 패턴 선택
3. 아키텍처 패턴 적용
: 아키텍처 패턴을 참고하여 시스템의 표준 아키텍처 설계
4. 서브시스템 구체화
: 서브시스템의 기능과 서브시스템간 동작 및 인터페이스 정의
5. 검토
: 설계 목표, 요구사항, 기본 원리 등에 비추어 설계된 아키텍처 검토
※ 시스템 타입
※ 협약에 의한 설계
: 컴포넌트 설계 시 클래스에 대한 여러 가정을 명세한 것
: 아키텍처 설계 시 참조 가능한 전형적인 해결 방식이나 예제 (아키텍처 스타일, 표준 아키텍처)
: 시스템을 계층으로 구분하여 구성하는 방식
대표적 레이어 패턴인 OSI 7 계층 모델. 네트워크에 이용된다.
: 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성 (1:N 방식)
클라이언트-서버 패턴의 예시. 웹 브라우저와 웹 서버 간의 통신.
: 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송하는 패턴
파이프-필터 패턴을 이용하는 유닉스의 Shell
: 서브시스템을 모델, 뷰, 컨트롤러의 세 부분으로 구조화하는 패턴
MVC 패턴을 이용한 웹 서버와 브라우저 사이의 통신
: 마스터 컴포넌트를 동일한 구조의 슬레이브 컴포넌트로 작업을 분할하고 슬레이브 컴포넌트에서 처리한 결과물을 마스터가 돌려받는 방식
마스터-슬레이브 패턴의 작동 방식
: 사용자가 원하는 서비스를 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트를 찾아 사용자와 연결해주는 구조
브로커 패턴의 기본 구조
: 피어를 하나의 컴포넌트로 간주하고, 각 피어들이 클라이언트 또는 서버가 되어 연결될 수 있는 구조
피어투피어 패턴의 구조 예시
: 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식
이벤트-버스 패턴의 구조 예시
: 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근하여 검색을 통해 원하는 데이터를 찾을 수 있는 구조
블랙보드 패턴의 구조 예시
: 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 가지는 구성
인터프리터 패턴의 클래스 다이어그램 예시
: 현실 세계의 여러 개쳬(Entity)를 객체(Object)로 만들고 이들을 조립하여 소프트웨어를 설계하는 기법
현실 세계의 개체인 자동차를 객체화 하는 예시
: 객체의 정보인 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 소프트웨어 모듈
: 공통된 데이터와 함수를 갖는 객체의 집합. 객체의 타입
: 데이터와 데이터를 처리하는 함수를 하나로 묶는 것
: 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
: 하나의 메시지에 대해 각 클래스가 자신만의 고유한 방법으로 응답 및 처리를 수행할 수 있는 능력
: 두 개 이상의 객체들이 상호 참조하는 관계
: 사용자의 요구사항을 분석하여 요구된 문제와 관련된 객체, 객체의 속성 및 함수, 객체 간 관계 등을 정의 및 모델링하는 작업
- 객체지향 분석 방법론
: 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법. 객체 모델링 기법(OMT; Object-Modeling Technique)
1. 객체 모델링 (Object Modeling)
2. 동적 모델링 (Dynamic Modeling)
3. 기능 모델링 (Functional Modeling)
: 변경이나 확장에 유연한 시스템 설계를 위해 지켜야할 객체지향 설계의 다섯가지 원칙
각 원칙의 머릿글자를 따 SOLID 원칙이라고도 불린다
1. 단일 책임 원칙 (SRP; Single Responsibility Principle)
: 객체는 단 하나의 책임만을 가진다
2. 개방-폐쇄 원칙 (OCP; Open-Closed Principle)
: 소프트웨어 요소는 확장에는 열려있고 변경에는 닫혀있어야 한다.
-> 기존의 코드 변경없이 기능 추가가 가능해야 한다
3. 리스코프 치환 원칙 (LSP; Liskov Substitution Principle)
: 슈퍼클래스의 객체는 자신의 서브클래스의 객체로 대체해도 작동에 문제가 없어야 한다
-> 자식 클래스는 부모 클래스의 연산은 모두 수행할 수 있어야 한다
4. 인터페이스 분리 원칙 (ISP; Interface Segregation Principle)
: 자신이 사용하지 않는 인터페이스와 의존 관계가 형성되거나 영향을 받지 않아야 한다
5. 의존 역전 원칙 (DIP; Dependency Inversion Principle)
: 상위 클래스는 하위 클래스에 의존해서는 안된다. 추상화는 세부사항에 의존해서는 안된다.
1. 소프트웨어 설계 - 애플리케이션 설계(소프트웨어 아키텍처 ~ 객체지향 분석 및 설계)
21. 소프트웨어 아키텍처
: 소프트웨어의 골격이 되는 기본 구조. 소프트웨어의 구성 요소들 간의 관계를 표현하는 시스템의 구조
※ 소프트웨어 설계 단계
1) 소프트웨어 아키텍처 설계의 기본 원리
1. 모듈화 (Modularity)
: 시스템의 기능을 모듈 단위로 나누는 것
2. 추상화 (Abstraction)
: 문제를 전체적, 포괄적 개념부터 설계한 후, 차례로 세분화하여 구체화해 나가는 방식
3. 단계적 분해 (Stepwise Refinement) by Niklaus Wirth
: 문제를 상위 중요 개념부터 하위 개념으로 구체화 시키는 하향식 설계 전략
4. 정보 은닉 (Information Hiding)
: 한 모듈 내부의 절차와 자료들은 정보가 감추어져 다른 모듈의 접근과 변경이 불가능함
2) 소프트웨어 아키텍처의 품질 속성
: 소프트웨어 아키텍처의 품질 평가 요소들을 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화한 것.
1. 시스템 측면
2. 비즈니스 측면
3. 아키텍처 측면
3) 소프트웨어 아키텍처 설계 과정
1. 설계 목표 설정
: 요구사항을 분석하여 전체 시스템의 설계 목표 설정
2. 시스템 타입 결정
: 시스템 및 서브 시스템의 타입 결정. 설계 목표를 고려하여 아키텍처 패턴 선택
3. 아키텍처 패턴 적용
: 아키텍처 패턴을 참고하여 시스템의 표준 아키텍처 설계
4. 서브시스템 구체화
: 서브시스템의 기능과 서브시스템간 동작 및 인터페이스 정의
5. 검토
: 설계 목표, 요구사항, 기본 원리 등에 비추어 설계된 아키텍처 검토
※ 시스템 타입
※ 협약에 의한 설계
: 컴포넌트 설계 시 클래스에 대한 여러 가정을 명세한 것
22. 아키텍처 패턴
: 아키텍처 설계 시 참조 가능한 전형적인 해결 방식이나 예제 (아키텍처 스타일, 표준 아키텍처)
1) 레이어 패턴 (Layers Pattern)
: 시스템을 계층으로 구분하여 구성하는 방식
2) 클라이언트-서버 패턴 (Client-Server Pattern)
: 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성 (1:N 방식)
3) 파이트-필터 패턴 (Pipe-Filter Pattern)
: 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송하는 패턴
4) 모델-뷰-컨트롤러 패턴 (Model-View-Controller Pattern, MVC Pattern)
: 서브시스템을 모델, 뷰, 컨트롤러의 세 부분으로 구조화하는 패턴
5) 마스터-슬레이브 패턴 (Master-Slave Pattern)
: 마스터 컴포넌트를 동일한 구조의 슬레이브 컴포넌트로 작업을 분할하고 슬레이브 컴포넌트에서 처리한 결과물을 마스터가 돌려받는 방식
6) 브로커 패턴 (Broker Pattern)
: 사용자가 원하는 서비스를 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트를 찾아 사용자와 연결해주는 구조
7) 피어투피어 패턴 (Peer-to-Peer Pattern, P2P Pattern)
: 피어를 하나의 컴포넌트로 간주하고, 각 피어들이 클라이언트 또는 서버가 되어 연결될 수 있는 구조
8) 이벤트-버스 패턴 (Event-Bus Pattern)
: 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식
9) 블랙보드 패턴 (Blackboard Pattern)
: 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근하여 검색을 통해 원하는 데이터를 찾을 수 있는 구조
10) 인터프리터 패턴 (Interpreter Pattern)
: 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 가지는 구성
23. 객체지향 (Object-Oriented)
: 현실 세계의 여러 개쳬(Entity)를 객체(Object)로 만들고 이들을 조립하여 소프트웨어를 설계하는 기법
1) 객체 (Object)
: 객체의 정보인 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 소프트웨어 모듈
2) 클래스 (Class)
: 공통된 데이터와 함수를 갖는 객체의 집합. 객체의 타입
3) 캡슐화 (Encapsulation)
: 데이터와 데이터를 처리하는 함수를 하나로 묶는 것
4) 상속 (Inheritance)
: 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
5) 다형성 (Polymorphism)
: 하나의 메시지에 대해 각 클래스가 자신만의 고유한 방법으로 응답 및 처리를 수행할 수 있는 능력
6) 연관성 (Relationship)
: 두 개 이상의 객체들이 상호 참조하는 관계
24. 객체지향 분석 및 설계
1) 객체지향 분석 (OOA; Object Oriented Analysis)
: 사용자의 요구사항을 분석하여 요구된 문제와 관련된 객체, 객체의 속성 및 함수, 객체 간 관계 등을 정의 및 모델링하는 작업
- 객체지향 분석 방법론
2) Rumbaugh(럼바우) 분석 방법
: 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법. 객체 모델링 기법(OMT; Object-Modeling Technique)
1. 객체 모델링 (Object Modeling)
2. 동적 모델링 (Dynamic Modeling)
3. 기능 모델링 (Functional Modeling)
3) 객체지향 설계 원칙 (SOLID 원칙)
: 변경이나 확장에 유연한 시스템 설계를 위해 지켜야할 객체지향 설계의 다섯가지 원칙
1. 단일 책임 원칙 (SRP; Single Responsibility Principle)
: 객체는 단 하나의 책임만을 가진다
2. 개방-폐쇄 원칙 (OCP; Open-Closed Principle)
: 소프트웨어 요소는 확장에는 열려있고 변경에는 닫혀있어야 한다.
-> 기존의 코드 변경없이 기능 추가가 가능해야 한다
3. 리스코프 치환 원칙 (LSP; Liskov Substitution Principle)
: 슈퍼클래스의 객체는 자신의 서브클래스의 객체로 대체해도 작동에 문제가 없어야 한다
-> 자식 클래스는 부모 클래스의 연산은 모두 수행할 수 있어야 한다
4. 인터페이스 분리 원칙 (ISP; Interface Segregation Principle)
: 자신이 사용하지 않는 인터페이스와 의존 관계가 형성되거나 영향을 받지 않아야 한다
5. 의존 역전 원칙 (DIP; Dependency Inversion Principle)
: 상위 클래스는 하위 클래스에 의존해서는 안된다. 추상화는 세부사항에 의존해서는 안된다.
'도서 개발 공부 > 정보 처리 기사 필기' 카테고리의 다른 글