티스토리 뷰
요구사항 확인
플랫폼 성능 특성의 측정 항목
- 반환시간 (Turnaround Time) : 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
- 사용률 (Utilzation) : 작업을 처리하는 동안 CPU, 메모리 등의 자원 사용률
- 응답 시간 (Response Time) : 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
- 가용성 (Availablilty) : 시스템에서 제공되는 서비스가 다운되지 않고 정상적으로 유지되는 시간
요구사항의 분류
- 기능적 요구사항 : 시스템이 외형적으로 보여주는 기능과 동작
- 입출력기능, 데이터베이스 기능, 통신 기능 등
- 비기능적 요구사항 : 시스템이 가져야 하는 기능 이외의 요구사항
- 시스템의 전체적인 품질이나 고려해야 하는 제약사항 등
- 사용 용이성, 효율성, 신뢰성, 이식성, 유연성, 확장성
- 성능적인 면: 응답 속도, 자원 사용량 등
- 보안 측면: 침입 대응, 침입 탐지, 사용자 인증, 권한 부여 등
요구사항 확인 단계
도출/추출(Elicitation) → 분석(Analysis) → 명세(Specification) → 확인(Validation)/검증(Valification)
- 도출 (Requirement Elicitation)
- 프로젝트 계획 단계에 정의한 문제의 범위 안에 있는 사용자의 요구를 찾는 단계 - 분석 (Requirement Analysis)
- 사용자의 요구를 추출하여 목표를 정하고 어떤 방식으로 해결할 것인지 결정하는 단계
- 개발의 출발점이면서 실질적인 첫 번째 단계
- 도메인 분석(Domain Analysis)은 요구에 대한 정보를 수집하고 배경을 분석하여 이를 토대로 모델링을 한다
- 분석 결과의 문서화를 통해 향후 유지보수에 유용하게 활용 활 수 있다
- 자료흐름도, 자료 사전 등이 효과적으로 이용될 수 있다
- 보다 구체적인 명세를 위해 소단위 명세서(Mini-Spec)가 활용될 수 있다
- 타당성 조사
- 요구사항 명세를 문서화 작성하는 작업
- 비용과 일정에 대한 제약설정 - 명세 (Requirements Specification)
- 비정형 명세기법은 사용자의 요구를 표현할 때 자연어를 기반으로 서술
- 정형 명세기법은 사용자의 요구를 표현할 때 수학적인 원리와 표기법을 이용
- 정형 명세기법은 비정형 명세기법에 비해 표현이 간결- 정형 명세기법(수학적 기반) : Z, VDM, Petri-Net, CSP, CCS, LOTOS
- 비정형 명세기법(자연어 기반) : FSM, Decision Table, E-R모델링, State chart(SADT), UseCase
- 검증 (Requirements Validation)
- 요구사항이 고객이 정말 원하는 시스템을 제대로 정의하고 있는지 점검하는 과정
- 개발완료 이후에 문제점이 발견될 경우 막대한 재작업 비용이 들 수 있기 때문에 중요
- 요구사항이 실제 요구를 반영하는지, 문서상의 요구사항은 서로 상충되지 않는지 점검
요구 분석 시 필요한 기술
- 청취과 인터뷰 질문 기술
- 분석과 중재기술
- 관찰 및 모델 작성 기술
요구 검증 방법
- 동료 검토 (Peer Review) : 요구 사항 명세서 작성자가 요구 사항 명세서를 설명하고 이해관계자들이 설명을 들으면서 결함을 발견
- 인스펙션 (Inspection) : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 확인하면서 결함을 발견
- 워크 스루 (Walk Through) : 검토회의 전에 요구사항 명세서를 미리 배포하여 사전 검토 후, 짧은 검토 회의를 통해 오류를 조기 검출
자료 흐름도 (DFD: Data Flow Diagram)
- 특징
- 자료 흐름 그래프 또는 버블(bubble) 차트라고도 한다
- 구조적 분석 기법에 이용된다
- 시간 흐름을 명확하게 표현할 수 없다
- 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화된다
- 구성요소
- 프로세스 (Process) => 원
- 자료 흐름 (Data Flow) => 화살표
- 자료 저장소 (Data Store) => 평행선
- 단말 (Terminator) => 사각형
- 자료 사전 (DD: Data Dictionary)
- = : 정의
- + : 연결
- ( ) : 생략
- { } : 자료의 반복
- [ ] : 자료의 선택
- ** : 자료의 설명 (주석)
객체지향 분석
- 특징
- 동적 모델링 기법이 사용될 수 있다
- 객체 중심으로 시스템을 파악하는 상향식 방식으로 볼 수 있다
- 데이터와 행위를 하나로 묶어 객체를 정의 내리고 추상화시키는 작업
- 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체/속성, 클래스/멤버, 전체/부분 등으로 나눠 분석한다
- 코드 재사용에 의한 프로그램 생산성 향상 및 요구에 따른 시스템의 쉬운 변경이 가능
- 럼바우 (Rumbaugh)의 OMT (Object Modeling Technique) 기법
- 객체 (Object) 모델링 : 객체 다이어그램 (Object Diagram)
- 동적 (Dynamic) 모델링 : 상태 다이어그램 (State Diagram)
- 기능 (Function) 모델링 : 자료 흐름도 (Data Flow Diagram)
- Booch 방법
- 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용하는 방법이다
- Coad와 Yourdon 방법
- E-R 다이어그램을 사용하여 객체의 행위를 데이터 모델링하는데 초점을 둔 방법
- 객체 식별, 구조 식별, 주체 정의, 속성 및 관계 정의, 서비스 정의 과정으로 구성되는 것
- Jacobson 방법
- Use-Case를 강조하여 사용하는 방법
- Wirfs-Brocks 방법
- 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 분석 방법
UML (Unified Modeling Language)
- 표준화된 모델링 언어
- 구성요소 : 사물 (Things), 관계 (Relationships), 다이어그램 (Diagram)
- 사물 (Things)
- 구조 사물 (Structural Things)
- 행동 사물 (Behavioral Things)
- 그룹 사물 (Grouping Things)
- 주해 사물 (Annotation Things)
- 관계 (Relationships)
- 연관 관계 (Association)
- 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 관계 - 집합 관계 (Aggregation)
- 포함 관계 (Composition)
- 일반화 관계 (Generalization)
- 상속 관계라고도 한다
- 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 이를 IS-A관계라고 한다 - 의존 관계 (Dependency)
- 한 사물의 명세가 바뀌면 다른 사물에 영향을 준다
- 일반적으로 한 클래스가 다른 클래스를 오퍼레이션의 매개변수로 사용하는 경우 - 실체화 관계 (Realization)
- 인터페이스와 인터페이스를 갖는 클래스 간의 관계
- 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정하는 관계
- 연관 관계 (Association)
- 다이어그램
- 정적 다이어그램(Structural Diagram) - 구조적 (Structural)
- Class Diagram, Object Diagram, Component Diagram, Deployment Diagram, Composite Structure Diagram, Package Diagram
- 동적 다이어그램(Behavioral Diagram) - 행위 (Behavioral)
- Use Case Diagram, Sequence Diagram, State Diagram, Activity Diagram, Timing Diagram, Communication Diagram
- 정적 다이어그램(Structural Diagram) - 구조적 (Structural)
- 유스케이스 다이어그램(Use Case Diagram)
- 사용자의 요구를 추출하고 분석하기 위해 주로 사용한다
- 연동의 개념은 양방향으로 데이터를 파일이나 정해진 형식으로 넘겨주는 것이다
- 액터 : 대상 시스템과 상호 작용하는 사람이나 다른 시스템에 의한 역할이다
- 시스템 액터 : 본 시스템과 데이터를 주고받는 연동 시스템을 의미한다
- 구성요소와의 관계
- 연관 : 유스케이스와 액터의 관계
- 확장 : 기본 유스케이스 수행 시 특별한 조건을 만족할 때 수행하는 유스케이스
- 포함 : 시스템의 기능이 별도의 기능을 포함
- 일반화 : 하위 유스케이스(액션)가 상위 유스케이스(액터)에게 기능/역할을 상속받음
- 그룹화 : 여러 개의 유스케이스를 단순화하는 방법
- 구성요소와의 관계
- 시퀀스(순차) 다이어그램(Sequence Diagram)
- 객체 간의 동적 상호 작용을 시간 개념을 중심으로 모델링하는 것
- 동적 측면을 모델링하기 위해 사용
- 시간의 흐름에 따라 객체들이 주고받는 메시지의 전달 과정을 강조한다
- 교류 다이어그램(Interaction Diagram)의 한 종류로 볼 수 있다
- 회귀 메시지(Self Message), 제어블록(Statement block)등으로 구성- 구성 항목 #메실액객생
- 메시지(Message) : 객체가 상호 작용을 위해 주고받는 메시지
- 실행 상자(Active Box) : 객체가 메시지를 주고받으며 구동되고 있음을 표현
- 액터(Actor) : 시스템으로부터 서비스를 요청하는 외부요소로, 사람이나 외부 시스템 의미
- 객체(object) : 메시지를 주고받는 주체
- 생명선(Life line) : 객체가 메모리에 존재하는 기간으로, 객체 아래쪽에 점선을 그어 표현
- 구성 항목 #메실액객생
- 클래스 다이어그램(Class Diagram)
- 동작(Operation)
- 클래스의 동작을 의미
- UML에서는 동작에 대한 인터페이스를 지칭
- 클래스에 속하는 객체에 대하여 적용될 메소드를 정의
- 동작(Operation)
애자일 (Agile)
- 특징
- 빠른 릴리즈를 통해 문제점을 빠르게 파악할 수 있다
- 진화하는 요구사항을 수용하는데 적합하다
- 문서보다 실행 가능한 소프트웨어를 중시한다
- 계획을 따르기보다는 변화에 대응하는 것에 더 가치를 둔다
- 고객과의 의사소통을 중요하게 생각한다
- 계약 협상보다는 고객과의 협업에 더 가치를 둔다
- 프로세스의 도구보다는 개인과 상호작용에 더 가치를 둔다
- 종류
- XP (eXtreme Programming), 스크럼 (Scrum), 칸반 (Kanban), Lean, 크리스탈 (Crystal), ASD, FDD, DSDM, DAD
- 익스트림 프로그래밍 (eXtreme Programming)
- 애자일 방법론 중 하나
- 변경이 많은 요구를 접할 때 적절한 방법이다
- 소스코드에 중점을 둔다
- 익스트림 프로그래밍 (eXtreme Programming)의 5가지 핵심원칙 #피존의용단
- 피드백 (Feedback)
- 존중 (Respect)
- 의사소통 (Communication)
- 용기 (Courage)
- 단순성 (Simplicity)
- 익스트림 프로그래밍 (eXtreme Programming)의 기본원리
- Continuous Integration (지속적인 통합)
- Collective Ownership (공동 소유권)
- Pair Programming (짝 프로그래밍)
- Whole Team (전체 팀)
- Small Releases (소규모 릴리즈)
- Test-Driven Development (테스트 주도 개발)
- Design Improvement (디자인 개선)
- Refactoring(리팩토링)
- 스크럼(Scrum)
- 매일 정해진 시간과 정해진 장소에서 짧은 시간의 개발팀을 위한 프로젝트 관리 중심의 방법론
- 30일마다 동작 가능한 제품을 제공하는 스프린트를 중심으로 한다
- 제품 백로그(Product Backlog)는 스크럼 팀이 해결해야 하는 목록 (호스트웨어 요구사항, 아키텍처 정의 등)
화면 설계
사용자 인터페이스 (UI: User Interface)
- 종류
- CLI (Command Line Interface) : 대표적으로 DOS 및 Unix 등의 운영체제에서 조작을 위해 사용하던 것으로, 정해진 명령문자열을 입력하여 시스템을 조작하는 사용자 인터페이스
- GUI (Graphical User Interface) : 마우스로 선택해 작업을 하는 그래픽 환경의 인터페이스
- NUI (Natural User Interface) : 사용자의 말이나 행동, 자연스러운 움직임으로 기기를 조작하는 인터페이스
- VUI (Voice User Interface) : 사람의 음성으로 기기를 조작하는 인터페이스
- OUI (Organic User Interface) : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스
- 기본 원칙
- 직관성 (Intuitiveness) : 누구나 쉽게 이해하고 사용할 수 있어야 한다
- 유효성 (Efficiency) : 사용자의 목적을 정확하고 완벽하게 달성해야 한다
- 학습성 (Learnability) : 누구나 쉽게 배우고 익힐 수 있어야 한다
- 유연성 (Flexibility) : 사용자의 요구사항을 최대한 수용하고 실수를 최소화해야 한다
CASE (Computer-Aided Software Engineering)
- 소프트웨어 모듈의 재사용성 향상
- 유지보수를 간편하게 수행할 수 있다
- 소프트웨어 공학의 자동화를 의미
- 일관성 분석(consistency Analysis)을 통해 요구사항 변경사항의 추적 및 분석, 관리하고, 표준 준수 여부를 확인
- 소프트웨어 개발 과정의 일부 or 전체를 자동화하기 위한 도구
- 표준화된 개발 환경 구축 및 문서 자동화 기능 제공
- 작업 과정 및 데이터 공유를 통해 작업자가 의사소통(communication) 증대
- 주요 기능
- 그래픽 지원, sw 생명주기 전 단계의 연결, 다양한 sw 개발 모형 지원
- 원천 기술
- 자동프로그래밍 기술, 분산 처리 기술, 구조적 기법, 프로토타이핑 기술, 정보 저장소 기술
- CASE의 분류
- 상위 CASE 도구 : 요구분석, 설계 단계를 지원
- 모델들 사이의 모순 검사 기능
- 모델의 오류검증 기능
- 자료 흐름도 작성 기능
- 중위 CASE 도구
- 상세 설계
- 하위 CASE 도구
- 코드를 작성하고 테스트하며 문서화하는 과정 지원
- 시스템 명세서
- 전체 소스코드 생성 기능
- 상위 CASE 도구 : 요구분석, 설계 단계를 지원
애플리케이션 설계
객체지향 설계 원칙 #SOLID
- SRP - 단일 책임 원칙 (Single Responsibility Principle)
- 객체는 단 하나의 책임만 가져야 한다
- DIP - 의존 역전 원칙 (Dependency Inversion Principle)
- 의존 관계를 맺을 때, 변화하기 어려운 것에 의존해야 한다
- ISP - 인터페이스 분리 원칙 (Interface Segregation Principle)
- 클라이언트는 자신이 사용하지 않는 메서드와 의존관계를 맺으면 안 된다
- 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다
- OCP - 개방-폐쇄 원칙 (Open-Closed Principle)
- 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다
- 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
- LSP - 리스코프 치환 원칙 (Liskov Substitution Principle)
- 상속받은 하위 클래스는 어디에서나 자신의 기반타입(상위클래스)으로 교체할 수 있어야 한다
아키텍처 설계 과정
- 설계 목표 설정 > 시스템 타입 결정 > 스타일 적용 및 커스터마이즈 > 서브시스템의 기능, 인터페이스 동작 작성 > 아키텍처 설계 검토
아키텍처 스타일 패턴
- 파이프 필터 패턴(Pipe-Filter Pattern)
- 데이터는 파이프를 통해 단방향으로 흐르며, 필터 이동 시 오버헤드가 발생할 수 있다
- 서브시스템이 입력 데이터를 받아 처리하고 결과를 다른 시스템에 보내는 작업이 반복
- ex) UNIX의 쉘(Shell)
- 모델-뷰-컨트롤러 패턴(Model-View-Controller Pattern)
- 3개의 서브시스템(모델, 뷰, 제어)으로 구성되어 있다.
- 사용자 인터페이스를 담당하는 계층의 응집도를 높일 수 있고, 다른 UI를 만들어 결합도를 낮출 수 있다
- 마스터-슬레이브 패턴(Master-Slave Pattern)
- 일반적으로 실시간 시스템에서 사용된다
- 마스터 프로세스는 일반적으로 연산, 통신, 조정을 책임진다
- 마스터 프로세스는 슬레이브 프로세스들을 제어할 수 있다
- ex) 장애 허용 시스템, 병렬 컴퓨팅 시스템
- 레이어 패턴(Layers Pattern)
- 계층 모델이라고도 한다
- ex) OSI 7 계층
- 클라이언트-서버 패턴(Client-Server Pattern)
- 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
- 클라이언트나 서버는 요청과 응답을 받기 위해 동기화되는 경우를 제외하고는 서로 독립적이다
- 브로커 구조(Broker Pattern)
- 컴포넌트와 사용자를 연결해 주는 패턴
- ex) 분산 환경 시스템
- 피어-투-피어 구조(Peer-To-Peer Pattern)
- 피어를 하나의 컴포넌트로 간주한다
- 각 피어는 서비스를 호출하는 클라이언트가 될 수도, 서비스를 제공하는 서버가 될 수도 있는 패턴
- ex) 멀티스레딩(Multi Threading) 방식 사용
- 이벤트-버스 구조(Event-Bus Pattern)
- 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식
- 이벤트를 생성하는 소스(Source), 이벤트를 수행하는 리스너(Listener), 이벤트의 통로인 채널(Channel), 채널들을 관리하는 버스(Bus)
- 블랙보드 구조(Blackboard Pattern)
- 해결책이 명확하지 않은 문제를 처리하는데 유용한 패턴
- ex) 음성인식, 차량 식별, 신호 해석
- 인터프리터 구조(Interpreter Pattern)
- 특정 언어로 작성된 프로그램 코드를 해석하는 컴포넌트를 설계할 때 사용
코드
- 주요 기능
- 식별, 분류, 배열, 표준화, 간소화, 연상, 암호화, 오류 검출 기능
- 순차 코드(Sequence Code, 일련번호 코드) - 지명코드
- 코드 설계에서 일정한 일련번호를 부여하는 방식
- 블록 코드(Block Code, 구분 코드) - 부서코드
- 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 방법
- 10진 코드(Decimal Code, 도서 분류식 코드) - 도서 분류 코드
- 10진법의 원리에 맞추어 대분류, 중분류, 소분류하여 부여한 코드
- 그룹 분류 코드(Group Classification Code) - 학번, 사원번호 코드
- 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여하는 방법
- 연상 코드(Mnemonic Code, 기호 코드) - 상품명, 거래처명
- 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여하는 방법
- 표의 숫자 코드(Significant Digit Code, 유효 숫자 코드)
- 코드화 대상 항목의 중량, 면적, 용량 등의 물리적 수치를 이용하여 만든 코드
- 합성 코드(Combined Code) - 연상 코드+순차 코드
- 2개 이상의 코드를 조합하여 만드는 방법
구조적 설계 도구
- HIPO(Hierarchy Input Process Output)
- 하향식 소프트웨어 개발을 위한 문서화 도구이다
- HIPO 차트 종류에는 가시적 도표, 총체적 도표, 세부적 도표가 있다
- 기능과 자료의 의존 관계를 동시에 표현할 수 있다
- 보기 쉽고 이해하기 쉽다
- NS chart (Nassi-Schneiderman chart)
- 논리의 기술에 중점을 둔 도형식 표현 방법이다
- 연속, 선택 및 다중 선택, 반복 등의 제어논리 구조로 표현한다
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합하다
- 논리의 기술에 중점을 두고 도형을 이용한 표현 방법이다
- 이해하기 쉽고 코드 변환이 용이하다
객체지향 기법
- 객체(Object) - (속성 + 메소드)
- 실세계에 존재하거나 생각할 수 있는 것을 말한다
- 자료 구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재
- 객체의 상태는 속성값에 의해 정의
- 속성(Attribute)
- 객체가 가지고 있는 특성, 객체의 현재 상태를 의미
- 객체의 상태, 성질, 분류, 식별, 수량 등을 표현
- 클래스(Class)
- 하나 이상의 객체들을 묶어서 하나의 공통된 특성을 표현한 것이다
- 객체지향 프로그램에서 데이터를 추상화하는 단위
- 메소드(Method)
- 클래스로부터 생성된 객체를 사용하는 방법
- 인스턴스(Instance)
- 같은 클래스에 속한 각각의 객체를 의미
- 메시지(Message)
- 객체에게 어떤 행위를 하도록 지시하는 명령
- 캡슐화(Encapsulation)
- 속성과 관련된 연산(Operation)을 클래스 안에 묶어서 하나로 취급하며 필요한 인터페이스만을 밖으로 드러낸다
- 객체지향에서 정보 은닉과 가장 밀접한 관계가 있는 것
- 인터페이스가 단순화
- 변경 발생 시 오류의 파급효과가 적다
- 인터페이스가 단순해지고 객체 간의 결합도가 낮아진다
- 재사용이 용이
- 정보 은닉(Information Hiding)
- 객체가 가지고 있는 속성과 오퍼레이션의 일부를 감추어서 객체의 외부에서는 접근이 불가능하다
- 필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부시스템이 다른 모듈의 구현에 영향을 받지 않게 설계되는 것을 의미한다
- 모듈들 사이의 독립성을 유지시키는 데 도움이 된다
- 설계에서 은닉되어야 할 기본 정보로는 IP주소와 같은 물리적 코드, 상세 데이터 구조 등이 있다
- 모듈 변경 시 영향을 받지 않아 수정, 시험, 유지보수 용이
- 상속성(Inheritance)
- 상위클래스에서 속성이나 연산을 전달받아 새로운 형태의 클래스로 확장하여 사용하는 것을 의미한다
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다
- 다형성(Polymorphism)
- 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질이다
- 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있게 한다
- 메소드 오버라이딩(Overriding) 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 재정의 할 수 있다
- 메소드 오버로딩(Overloading) 메소드명은 동일하지만 매개 변수 타입이나 개수를 다르게 하여 재정의 할 수 있다
- 일반화(Generalization)
- 공통 성질을 상위 객체로 정의하고, 특수화된 객체들을 하위의 부분형 객체로 정의하는 추상화 방법이다.
- is a : 클래스들 간의 개념적인 포함 관계
- 집단화(Aggregation)
- 클래스들 사이의 "부분-전체 (partwhole)" 또는 "부분 (is-a-partof)"의 관계로 설명되는 연관성을 나타낸다
- 클래스 간의 구조적인 집약 관계 "클래스 A는 클래스 B와 클래스 C로 구성된다"
- 서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체를 만드는 것이다
- 추상화(Abstraction)
- 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시키는 것
- 소프트웨어 설계에 사용되는 대표적인 3가지 추상화 기법
- 제어 추상화, 과정 추상화, 자료 추상화
디자인패턴
- 개발자들 사이의 의사소통을 원활하게 할 수 있다
- 소프트웨어의 품질과 생산성을 향상시킬 수 있다
- 소프트웨어 구조 파악이 용이하다
- 재사용을 위한 개발 시간이 단축된다
- 디자인 패턴을 목적(Purpose)으로 분류할 때 생성, 구조, 행위로 분류할 수 있다
- 생성패턴(Creational Pattern) #추빌팩프싱
- 추상팩토리 (Abstract Factory)
- 빌더 (Builder)
- 팩토리 메소드 (Factory Method)
- Virtual-Constructor 패턴 (가상 생성자)
- 상위클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위클래스에서 인스턴스를 생성한다.
- 를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브 클래스가 결정
- 프로토타입 (Prototype)
- prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조
- 싱글톤 (Singleton)
- 특정 클래스의 인스턴스가 오직 하나임을 보장하고, 이 인스턴스에 대한 접근 방법을 제공한다
- 구조패턴 (Structural Pattern) #어브컴프데퍼플
- 어댑터(Adapter)
- 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰준다
- 브리지(Bridge)
- 컴포지트(Composite)
- 프록시(Proxy)
- 데코레이터(Decorator)
- 퍼싸드(Façade)
- 플라이웨이트(Flyweight)
- 어댑터(Adapter)
- 행위 패턴 (Behavioral Pattern)
- 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법- Chain of Responsibility 책임 연쇄
- Command 커맨드
- Interpreter 인터프리터
- Iterator 반복자
- Mediator 중재자
- Memento 메멘토
- Observer 옵저버
- State 상태
- Strategy 전략
- Template Method 템플릿 메소드
- Visitor 방문자
인터페이스 설계
미들웨어 (Middleware)
- 여러 운영체제에서 응용 프로그램들 사이에 위치한 소프트웨어
- 분산 시스템에서 다양한 부분을 관리하고 통신하며 데이터를 교환하게 해주는 소프트웨어
- 위치 투명성(Location Transparency)을 제공
- 컴포넌트가 요구하는 서비스의 구현을 제공
- 애플리케이션과 사용자 사이 외에도 프로그램과 환경 간에서 분산서비스를 제공
- 클라이언트와 서버 간의 통신을 담당하는 시스템 소프트웨어
- DB (Date Base)
- 클라이언트에서 원격의 DB와 연결하기 위한 미들웨어
- RPC (Remote Procedure Call)
- 원격 프로시저 호출은 응용 프로그램의 프로시저를 사용하여, 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어
- MOM (Message Oriented Middlware)
- 느리더라도 안정적인 응답에 주로 사용
- 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할
- 메시지 기반의 비동기형 메시지를 전달하는 방식
- 송/수신 측 연결 시 메시지 큐를 활용하는 방법이 있다
- TP-Monitor ( Transaction Processing Monitor)
- 트랜잭션 처리 모니터는 온라인 트랜잭션 업무에서 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 사용 (항공기, 철도예약)
- ORB (Object Request Broker)
- 객체 요청 브로커는 객체 지향 미들웨어로, 코바(cobba) 표준 스펙을 구현한 미들웨어
- WAS (Web Application Server)
- 웹 애플리케이션 서버는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어
- 웹 환경 구현
- HTTP 세션처리를 위한 웹서버 기능과 미션-크리티컬한 기업 업무까지 JAVA, EJB 컴포넌트 기반으로 구현 가능
- 레거시웨어 (Legacyware)
- 기존 애플리케이션에 새로운 업데이트된 기능을 덧붙이고자 할 때 사용되는 미들웨어
인터페이스 (Interface)
- 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
- 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
- 순서적 연산
컴포넌트 (Component)
- 명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 부분
- 넓은 의미에서는 재사용되는 모든 단위
- 인터페이스를 통해서만 접근이 가능
소프트웨어 공학
- 모델링(Modeling)
- 엔지니어들이 공통된 개념을 공유하는데 도움을 준다
- 절차적인 프로그램을 위한 자료 흐름도는 프로세스 위주의 모델링 방법이다
- 구조적 방법론에서는 DFD(Data Flow Diagram), DD(Data Dictionary) 등을 사용하여 요구 사항의 결과를 표현
- 객체지향 방법론에서는 UML 표기법을 사용
'IT 지식' 카테고리의 다른 글
[정보처리기사] 정보시스템 구축관리 (0) | 2023.03.26 |
---|---|
[정보처리기사] 프로그래밍 언어 활용 (0) | 2023.03.21 |
[정보처리기사] 데이터베이스 구축 (0) | 2023.03.16 |
[정보처리기사] 소프트웨어 개발 (2) | 2023.03.12 |
댓글