공부 일지/정보처리산업기사
1. 소프트웨어 패키징의 형상 관리 (SCM: Software Configuration Management)
- 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발의 일련의 활동
- 소프트웨어 변경의 원인을 알아내고 제어 => 적절히 변경되고 있는지 확인하며 담당자에게 통보
- 소프트웨어 개발의 전 단계에 적용되는 활동 => 유지보수 단계에서도 수행
- 목적 : 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것
- 관리 항목 : 소스 코드, 프로젝트 계획, 분석서, 설계서, 프로그램, 테스트 케이스 등
- 가시성과 추적성 보장 => 생산성, 품질을 높임
- 대표적인 형상 관리 도구 : Git, CVS, Subversion 등
2. 형상 관리의 중요성
- 소프트웨어 변경 사항을 체계적으로 추적하고 통제할 수 있음
- 무절제한 변경을 방지할 수 있음
- 버그나 수정 사항을 추적할 수 있음
- 진행 정도를 확인하기 위한 기준으로 사용될 수 있음
- 배포본을 효율적으로 관리할 수 있음
- 여러 명의 개발자가 동시에 개발할 수 있음
3. 형상 관리 기능
- 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업
- 버전 제어 : 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업
- 형상 통제(변경 관리) : 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
- 형상 감사 : 기준성의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
- 형상 기록(상태 보고) : 형상의 식별, 통제, 감사 작업의 결과를 기록 · 관리하고 보고서를 작성하는 작업
4. 소프트웨어의 버전 등록 관련 주요 기능
- 자료를 등록하고 갱신하는 과정에서 사용됨
- 저장소(Repository) : 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
- 가져오기(Import) : 아무것도 없는 저장소에 처음으로 파일을 복사
- 체크아웃(Check-Out) : 프로그램을 수정하기 위해 저장소에서 파일, 소스파일, 버전 관리를 위한 파일을 받아옴
- 체크인(Check-In) :체크아웃한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신
- 커밋(Commit) : 이전에 갱신된 내용이 있는 경우에는 충돌(Conflict)을 알리고 diff 도구를 이용해 수정한 후 갱신을 완료함
- 동기화(Update) : 저장소에 있는 최신 버전으로 자신의 작업 공간을 동기화함
5. 소프트웨어 버전 등록 과정
- 가져오기(Import) → 인출(Check-Out) → 예치(Commit) → 동기화(Update) → 차이(Diff)
1. 정의
- 사용자와 시스템 간의 상호작용이 원활하게 이뤄지도록 도와주는 장치나 소프트웨어를 의미
- 초기에는 단순 상호작용에 국한. 최근에는 정보 전달을 위한 표현 방법으로 변경
- 분야 : 물리적 제어에 관한 분야, 상세적 표현과 전체 구성에 관한 분야, 기능에 관한 분야
- 기본 원칙 : 직관성, 유효성, 학습성, 유연성
- 유연성 : 사요아의 요구사항을 최대한 수용하고 실수를 최소화해야 함
2.사용자 인터페이스의 특징
- 사용자의 만족도에 가장 큰 영향을 미치는 중요한 요소 => 소프트웨어 중 변경이 가장 많이 발생
- 편리성, 가독성 높임 => 작업 시간 단축, 업무 이해도 상승
- 최소한의 노력으로 원하는 결과를 얻을 수 있음
- 사용자 중심의 상호 작용이 되도록 함
- 수행 결과의 오류를 줄임
- 막연한 작업 기능에 대한 구체적인 방법을 제시해 줌
- 정보 제공자와 공급자 간의 매게 역할을 수행
- 설계하기 위해서 소프트웨어 아키텍처를 반드시 숙지해야 함
3. UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험을 말함
- 사용자가 참여, 사용, 관찰하고, 상호 교감을 통해서 알수 있는 가치 있는 경험을 말함
- 사용자의 삶의 질을 향상시키는 하나의 방향
- UI는 사용성, 접근성, 편의성 중시 / UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 특징 : 주관성(Subjectivity), 정황성(Contextuality), 총체성(Holistic)
4. 구분
상호작용의 수단 및 방식에 따라 구분
- CLI(Command Line Interfase) : 명령과 출력이 텍스트 형태로 이뤄지는 인터페이스
- GUI(Graphical User Interfase) : 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스
- NUI(Natural Use Interfase) : 사용자의 말이나 행동으로 기기를 조작하는 인터페이스
- VUI(Voice User Interfase) : 사람의 음성으로 기기를 조작하는 인터페이스
- OUI(Organic User Interfase) : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스
5. 설계 지침
- 사용자 중심 : 사용자가 쉽게 이해하고 편리하게 사용할 수 있는 환경을 제공하며, 실사용자에 대한 이해가 바탕이 되어야 함
- 일관성 : 사용자가 쉽게 기억하고 습득할 수 있게 설계해야 함
- 단순성 : 조작 방법을 단순화시켜 인지적 부담을 감소시켜야 함
- 결과 예측 기능 : 기능만 보고 미리 결과를 예측 가능하도록 설계해야 함
- 가시성 : 메인 화면에 주요 기능을 노출시켜 최대한 조작이 쉽도록 설계해야 함
- 표준화 : 기능 구조와 디자인을 표준화하여 한 번 학습한 이후에는 쉽게 사용할 수 있도록 설계해야 함
- 접근성 : 사용자의 연령 성별, 인종 등 다양한 계층이 사용할 수 있도록 설계해야 함
- 명확성 : 사용자가 개념적으로 쉽게 인지할 수 있도록 설계해야 함
- 오류 발생 해결 : 오류가 발생하면 사용자가 쉽게 인지할 수 있도록 설계해야 함
6. 사용자 인터페이스 개발 시스템의 기능
- 사용자의 입력을 검증할 수 있어야 함
- 에러 처리와 그와 관련된 에러 메세지를 표시할 수 있어야 함
- 도움과 프롬프트(Prompt)를 제공해야 함
1. 정의
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류 : 비점진적 통합 방식, 점진적 통합 방식
2. 비점진적 통합 방식
- 단계적으로 통합하는 절차 없이 결합된 프로그램 전체를 테스트하는 방법
- 규모가 작은 소프트웨어에 유리
- 단시간 내에 테스트가 가능
- 오류 발견 및 장애 위치 파악 및 수정이 어려움
3. 점진적 통합 방식
- 모듈 단위로 단계적으로 통합하면서 테스트하는 방법
- 오류 수정이 용이
- 인터페이스와 연관된 오류를 완전히 테스트할 가능성이 높음
- 종류 : 하향식 통합 방식, 상향식 통합 방식, 혼합 통합 방식
4. 하향식 통합 테스트(Top Down Integration Test)
- 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
- 아래 단계로 이동하면서 통합
- 깊이 우선 통합법이나 넓이 우선 통합법 사용
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음
- 상위 모듈에서는 테스트 케이스를 사용하기 어려움
- 모듈이 통합될 때마다 테스트하며 새로운 오류가 발생하지 않았음을 보증하기 위해 회귀 테스트를 실시함
- 스텁(Stub) : 상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈을 대체하는 것 (임시 제공의 가짜 모듈 역할)
5. 상향식 통합 테스트(Bottom Up Integration Test)
- 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
- 클러스터(Cluste) : 종속 모듈의 그룹
- 드라이버(Driver) : 상위 모듈 없이 하위 모듈이 있는 경우 상위 모듈 대체 (하위 모듈과 상위 모듈 간의 인터페이스 역할)
- 하위 모듈들을 클러스터로 결합
- 통합된 클러스터 단위로 테스트함
- 테스트가 완료되면 클러스터는 상위로 이동하여 결합하고, 드라이버는 실제 모듈로 대체
6. 혼합식 통합 테스트
- 하위 수준에서는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원하는 방식
- 샌드위치(Sandwich)식 통합 테스트 방법이라고도 함
7. 회귀 테스팅(Regression Testing)
- 이미 테스트된 프로그램의 테스팅을 반복하는 것
- 새로운 오류가 있는지 확인하는 테스트
- 시간과 비용이 많이 필요하므로 변경된 부분을 테스트할 수 있는 테스트 케이스만을 선정하여 수행
- 선정 방법 : 대표적인 테스트 케이스 선정, 파습 효과가 높은 부분이 포함된 것으로 선정, 실제 수정이 발생한 위치에서 시행하는 것으로 선정
1. 정의
- 애플리케이션 테스트는 소프트웨어의 개발 단계에 따라 단위, 통합, 시스템, 인수 테스트로 분류
- 테스트 레벨 : 개발 단계에 따라 분류된 것
- 소프트웨어의 개발 단계에서부터 테스트를 수행 => 코드 상의 오류, 요구 분석의 오류, 설계 인터페이스 오류 등도 발견 가능
- V-모델 : 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것
2. 단위 테스트(Unit Test)
- 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것
- 인터페이스, 외부적 I/O, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사
- 사용자 요구사항 기반의 기능성 테스트를 최우선으로 수행
- 발견 가능한 오류 : 알고리즘 오류에 따른 원치 않는 결과, 탈출구가 없는 반복문의 사용, 틀린 계산 수식에 의한 잘못된 결과 등
3. 통합 테스트(Integration Test, 결합 테스트)
- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
4. 시스템 테스트(System Test)
- 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트
- 환경적인 장애 리스크를 최소화하기 위해서는 실제 사용 환경과 유사하게 만든 테스트 환경에서 테스트를 수행해야 함
- 기능적 요구사항 : 요구사항 며에서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트 시행
- 비기능적 요구사항 : 성능 · 회복 · 보안 테스트, 내부 시스템의 메뉴 구조, 웹 페이지 내의 네비게이션 등 구조적 요소에 대한 화이트박스 테스트 시행
5. 인수 테스트(Acceptance Test)
- 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법
- 사용자가 직접 테스트함
- 인수 테스트에서 문제가 없을 경우 프로젝트 종료
- 종류 : 사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파 테스트, 베타 테스트
6. 알파 테스트
- 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법
- 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록
7. 베타 테스트
- 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법
- 필드 테스팅(Field Testing)이라고도 불림
- 실업무를 가지고 사용자가 직접 테스트하는 것
- 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고
1. 화이트박스 테스트(White Box Test)
- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
- 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용됨
- 모듈 안의 작동을 직접 관찰함
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행됨
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어함
- 종류 : 기초 경로 검사, 제어 구조 검사 등
2. 기초 경로 검사(Base Path Testing)
- 기초 경로(Base Path = Basis Path) : 수행 가능한 모든 경로를 의미
- 대표적인 화이트박스 테스트 기법
- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
- 테스트 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용됨
3. 제어 구조 검사(Control Structure Testing)
- 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
- 루프 검사(Loop Testing) : 프로그램의 반복 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수의 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
4. 화이트박스 테스트의 검증 기준
- 테스트 케이스들 테스트에 얼마나 적정한지를 판단하는 기준
- 문장 검증 기준(Statement Coverage) : 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계
- 분기 검증 기준(Branch Coverage) : 결정 검증 기준(Decision Coverage)라고도 불리며, 소스 코드의 모든 조건문에 대해 조건이 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계
- 조건 검증 기준(Condition Coverage) : 소스 코드의 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계
- 분기/조건 기준(Branch/Condition Coverage) : 분기 검증과 조건 검증 기준을 모두 만족하는 설계로 조건문이 True인 경우와 False인 경우에 따라 조건 검증 기준의 입력 데이터를 구분하는 테스트 케이스 설계
5. 검증 기준(Coverae)의 종류
- 기능 기반 커버리지 : 실제 테스트가 수행된 기능의 수 / 전체 기능의 수
- 라인 커버리지 : 테스트 시나리오가 수생한 소스 코드의 라인 수 / 전체 소스 코드의 라인 수
- 코드 커버리지 : 소스 코드의 구문, 분기, 조건 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법
6. 블랙박스 테스트(Black Box Test) = 기능 테스트
- 소프트웨어가 수행할 특정 기능을 알리기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트
- 사용자의 요구사항 명세를 보면서 테스트 하는 것 => 주로 구현된 기능을 테스트
- 소프트웨어 인터페이스에서 실시되는 테스트
- 부정확하거나 누락된 기능, 인터페이스의 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종류 오류 등을 발견하기 위해 사용
- 테스트 과정의 후반부에 적용
- 종류 : 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등
7. 동치 분할 검사(Equivalence Partitioning Testing, 동치 클래스 분해)
- 입력 자료에 초점을 맞춰 테스트 케이스(동치 클래스)를 만들고 검사하는 방법
- 동등 분할 기법이라고도 함
- 입력 조건에 타당한 자료와 타당하지 않는 자료의 개수를 균등하게 하여 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법
8. 경계값 분석(Boundary Value Analysis)
- 입력 조건의 중간값보다 경계값에서 오류가 발생할 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
9. 원인-효과 그래프 검사(Couse-Effect Graphing Testing)
- 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
10. 오류 예측 검사(Error Gussing)
- 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법
- 데이터 확인 검사라고도 함
11. 비교 검사(Comparison Testing)
- 여러 버전의 프로글매에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
5. 폭포수 모델 단계
- 타당성 조사 : 시스템의 정의와 가능성 조사 및 다른 방법과 비교 조사하는 단계
- 계획 : 문제 정의, 목표와 요구사항 결정, 개발 비용 및 소요 기간, 인력 등의 개발 계획 수립 단계
- 분석 : 요구사항을 구체적으로 이해하고 소프트웨어가 담당해야 하는 정보 영역을 정의하여 요구 분석 명세서로 문서화하는 단계
- 기본 설계 : 전체적인 하드웨어 및 소프트웨어의 구조, 제어 구조, 자료 구조의 개략적인 설계를 작성하는 단계
- 상세 설계 : 각 단위 프로그램에 대한 사항을 상세히 기술하는 단계
10. 스크럼
- 제품 개발에 필요한 모든 요구사항을 우선순위에 따라 나열한 제품 백로그를 사용
- 소멸(Burn-down) 차트를 통해 작업의 진행 사항 확인
- 스프린트 검토 회의 후 개선 사항에 대한 피드백을 정리하여 제품 책임자(스크럼 마스터 X)는 제품 백로그를 업데이트
- 작업 할당 시 개발자들이 자신에게 맞느 작업을 스스로 선별하여 담당할 수 있도록 하는 것이 좋음
11. 사용자 요구사항 추출 기법
- 인터뷰 : 상대를 직접 만나서 이야기하면서 의견을 나누는 방법
- 설문 : 어떤 주제에 대하여 미리 준비한 질문을 내어 물어보는 방법
- 브레인스토밍 : 3인 이상이 자유롭게 의견을 교환하면서 독창적인 아이디어를 산출해 내는 방법
- 프로토타이핑 : 시스템 수행 결과를 설명하기 위해 종이에 화면 순서를 기술하여 고객과 사용자에게 보여주는 것
13. 비기능 요구사항
- 시스템 장비 구성, 성능, 인터페이스, 데이터, 테스트, 품질, 제약사항, 프로젝트 관리, 프로젝트 지원에 대한 내용
- ex) 1년 365일, 하루 24시간 운용이 가능해야 한다 => 품질과 제약사항에 관한 요구사항임
17. 자료 흐름도 작성 효과
- 사용자의 업무 및 요구 사항을 정확하게 파악 가능
- 사용자와 분석가 사이의 의사소통읠 위한 공용어 역할
- 사용자의 업무 및 요구사항을 쉽게 문서화
- 자료 흐름에 중점을 두는 분석용 도구
20. 자료 사전(DD, Data Dictionary)
- 자료 흐름도의 대상이 되는 모든 자료에 대한 기본 사항들을 구체적으로 정의
- ( ) 안의 자료 항목은 생략할 수 있음
- 자료 요소는 더 이상 분할되지 않는 자료 항목을 의미
- 모호성 제거하며, 세부 구성 내력을 명세하는 역할
24. 소단위 명세서
- 단계화된 DFD에서 최하위 처리의 입력 자료 흐름을 출력 자료 흐름으로 변환하는 과정을 명세화해 놓은 문서
- 작성 도구 : 구조적 언어, 의사 결정표, 의사 결정도 => 의사코드는 해당하지 않음
29. 요구사항 협상
- 요구사항이 서로 충돌하는 경우 적절히 해결하는 과정
- ex) 두 명의 이해 관계자가 요구하는 요구사항이 서로 충돌되는 경우, 요구사항과 자원이 서로 충돌되는 경우, 기능 요구사항과 비기능 요구사항이 서로 충돌되는 경우
31. HIPO(Hierarchy Input Process Output)
- 기능 중심의 도형 표현에 편리
- 시스템의 분석 및 설계나 문서화할 때 사용되는 기법
- 시스템 실행 과정인 입력, 처리, 출력의 기능을 나타냄
34. HIPO Chart
- 가시적 도표(도식 목차) : 시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도
- 총체적 도표(총괄도표, 개요 도표) : 입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표
- 세부적 도표(상세 도표) : 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표
35, 36. UML의 관계(Relationships) 화살표 모양
- 연관(Association) 관계 : →
- 집합(Aggregation) 관계 : ―◇
- 포함(Composition) 관계 : ―◆
- 일반화(Generalization) 관계 : ―▷
- 의존(Dependency) 관계 : ·····>
- 실체화(Realization) 관계 : ·····▷
37. 추상화(Abstraction) => 소프트웨어 아키텍처
- 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화 시켜 나가는 것
- 과정 추상화 : 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
- 데이터 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 데체하는 방법
- 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법
40. 소프트웨어 아키텍처의 설계 과정
- 설계 목표 설정 → 시스템 타입 결정 → 아키텍처 패턴 적용 → 서브시스템 구체화 → 검토
41. 소프트웨어 설계 방식
- 객체 지향 설계 : 객체지향 설계 원칙을 기반으로 하여 소프트웨어를 설계하는 방식
- 데이터 흐름 설계 : 프로세스와 프로세스 간의 데이터 흐름에 중점을 두고 소프트웨어를 설계하는 방식
- 상향식 설계 : 최하위 수준에서 각각의 모듈을 설계하고, 완성된 모듈을 결합해 가면서 설계하는 방식
- 하향식 설계 : 제일 상위에 있는 main user function에서 시작하여 기능을 하위 기능들로 분할해 가면서 설계하는 방식
47. 아키텍처 패턴
- MVC Pattern : 서브시스템을 3개의 부분으로 구조화한 패턴
- Pipe-Filter Pattern : 한 모듈이 데이터 스트림을 입력받아 처리하면, 다음 모듈이 결과를 이어받아 처리하는 형식;
- Peer-To-Peer Pattern : 피어를 하나의 컴포넌트로 간주하며, 각 피어는 서비스를 호출하는 클라이언트가 될 수도, 서비스를 제공하는 서버가 될 수도 있는 패턴
- Broker Pattern : 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결해줌
50, 51, 54, 55. 객체지향의 주요 구성요소
- Class : 하나 이상의 유사한 객체를 묶어 하나의 공통된 특성을 표현하는 요소 (같은 특성을 갖는 객체를 표현한 것)
- Inheritance : 이미 정의된 상위 클래스의 메소드를 비롯한 모든 속성을 하위 클래스에게 재정의하지 않고서도 항상 이용 가능하도록 허용하는 성질
- Instance : 클래스에 속한 각각의 객체
- Method : 객체에 정의된 연산을 의미. 객체의 상태를 참조하거나 변경하는 수단이 됨
- Message : 외부로부터 하나의 객체에 전달되는 메소드(행위)의 요구를 의미. 객체가 목적지, 연산할 내용, 인자를 함께 표시하여 다른 객체로 전송되는 메커니즘
- Polymorphism : 하나의 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 나타내는 것
58. 객체지향 방법론
- Coad와 Yourdon 기법 : E-R 다이어그램을 사용하여 객체의 행위를 모델링이라 하며, 객체 식별, 구조 식별, 주제 저으이, 속성과 인스턴스 연결 정의, 연산과 메세지 연결 정의 등의 과정으로 구성하는 기법
- Rumbaugh 기법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법
- Booch 기법 : 데이터 흐름도(DFD)를 사용해서 객체를 분해하고, 객체들 간의 인터페이스를 찾아 Ada 프로그램으로 변환시키는 기법
63. GoF의 디자인 패턴
- 생성 패턴 : Abstract Factory, Builder, Factory Method, Prototype, Singleton
- 구조 패턴 : Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
- 행위 패턴 : Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor
1. 정의
- 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미
- 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드 등으로 구성
- 문제 발생 시 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적
- 한 패턴에 변형을 가하거나 특정 요구사항을 반영하면 유사한 형태의 다른 패턴으로 변화되는 특징이 있음
- 1995년 GoF(Gang Of Four)라고 불리는 에릭 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존스(Ralph Johnson), 존 블리시디스(Hohn Vlissides)가 처음 구체화 및 체계화함
- 아키텍처 패턴은 가이드라인 제시용, 디자인 패턴은 세부사항 정리용
2. GoF의 디자인 패턴
- 가장 일반적인 사례에 적용 가능한 패턴들을 분류하여 정리하여 지금까지도 가장 많이 사용되는 디자인 패턴
- GoF의 디자인 패턴은 유형에 따라 생성 패턴, 구조 패턴, 행위 패턴으로 구성
3. 디자인 패턴 사용의 장/단점
- 범용적인 코딩 스타일 => 구조 파악 용이
- 객체지향 설게 및 구현의 생산성을 높이는 데 적합
- 재사용을 통해 개발 시간과 비용이 절약됨
- 초기 투자 비용이 부담될 수 있음
- 원활한 의사소통이 가능
- 설계 변경 요청에 대한 유연한 대처가 가능
- 다른 기반의 애플리케이션 개발에는 부적합 => 오직 객체지향만
4. 생성 패턴(Creational Pattern)
- 생성과 관련된 패턴으로 총 5가지임
- 객체의 생성과 참조 과정을 캡슐화 하여 프로그램에 유연성을 더해줌
- 종류 : 추상 팩토리(Abstract Factory), 빌더(Builder), 팩토리 메소드(Factory Method), 프로토타입(Prototype), 싱글톤(Singleton)
- 추상 팩토리 : 서로 연관 · 의존하는 객체들의 그룹으로 생성하여 추상적으로 표현
- 팩토리 메소드(가상 생성자, Vertual Constructor) : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
5. 구조 패턴(Structural Pattern)
- 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴으로 총 7가지임
- 구조가 복잡한 시스템을 개발하기 쉽게 도와줌
- 종류 : 어뎁터(Adapter), 브리지(Bridge), 컴포지트(Composite), 데코레이터(Decorator), 퍼싸드(Facade), 플라이웨이트(Flyweight), 프록시(Proxy)
- 브리지 : 구현부에서 추상층을 분리하여, 서로 독립적으로 확장할 수 있도록 구성한 패턴
- 컴포지트 : 복합 객체와 단일 객체 구분 없이 다루고자 할 때 사용
- 퍼싸드 : 복잡한 서브 클래스들을 피해 더 상위에 구상. Wrapper 객체 필요
- 프록시 : 접근이 어려운 객체와 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴
6. 행위 패턴(Behavioral Pattern)
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴으로 총 11가지임
- 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 도와줌
- 종류 : 책임 연쇄(Chain of Responsibility), 커맨드(Command), 인터프리터(Interpreter), 반복자(Iterator), 중재자(Mediator), 메멘토(Memento), 옵서버(Observer), 상태(State), 전략(Strategy), 템플릿 메소드(Template Method), 방문자(Visitor)
- 반복자 : 내부 표현 방법의 노출 없이 순차적인 접근이 가능
- 메멘토 : 특정 시점에서의 객체 내부 상태를 객체화하여 요청에 따라 해당 시점의 상태로 되돌릴 수 있는 기능을 제공하는 패턴
- 옵서버 : 객체의 사태가 변화하면 객체에 상속되어 있는 다른 객체들에게 상태를 전달하는 패턴
- 전략 : 동일 계열의 알고리즘을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴(클라이언트 영향 없이 알고리즘 변경 가능)
1. 객체지향 분석(OOA: Object Oriented Analysis)
- 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업
- 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석
- 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화할 수 있게 함
- 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체 지향 분석의 주요 목적
2. 객체지향 분석의 방법론
- Rumbaugh(럼바우) 방법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나눠 수행하는 방법 (가장 일반적인 방법)
- Booch(부치) 방법 : 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법. 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의
- Jacobson(제이콥스) 방법 : 유스케이스를 강조하여 사용하는 분석 방법
- Coad와 Yourdon 방법 : ER 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메세지 연결 정의 등의 과정으로 구성하는 기법
- Wirfs-Brock 방법 : 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법
3. 럼바우(Rumbaugh)의 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법(OMT, Object-Modling Technique)이라고도 함
- 분석 활동 순서 : 객체 모델링 → 동적 모델링 → 기능 모델링 순
4. 객체 모델링(Object Modeling)
- 정보 모델링이라고도 함
- 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것
5. 동적 모델링(Dynamic Modeling)
- 상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링
6. 기능 모델링(Functional Modeling)
- 자료 흐름도(DFD, Data Flow Diagram)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링
7. 객체지향 설계 원칙 (= SOLID 원칙)
- 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙
- 종류 : 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙
8. 단일 책임 원칙(SRP, Single Responsibility Principle)
- 객체는 단 하나의 책임만 가져야 한다는 원칙
- 응집도는 높고, 결합도는 낮게 설계하는 것을 의미
9. 개방-폐쇄 원칙(OCP, Open-Closed Principle)
- 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
- 공통 인터페이스를 하나의 인터페이스로 묶어 캡슐화하는 방법이 대표적
10. 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
- 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙
- 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야함
11. 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙
- 인터페이스가 갖는 하나의 책임임
12. 의존 역전 원칙(DIP, Dependency Inversion Principle)
- 각 객체들 간의 의존 관계가 성립될 때, 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
- 일반적으로 인터페이스를 활용하면 이 원칙은 준수됨