※ 모듈화
: 시스템의 기능들을 모듈 단위로 나누는 것
- 모듈화는 모듈 간 결합도의 초소화와 응집도를 최대화 하는 것이 목표
※ 추상화
: 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
유형 | 내용 |
괴정 추상화 | 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법 |
자료 추상화 | 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 |
제어 추상화 | 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법 |
※ 정보 은닉
: 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
※ 아키텍처 패턴
: 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
[레이어 패턴]
- 시스템을 계층으로 구분하여 구성되는 패턴
[클라이언트-서버 패턴]
- 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
[파이프-필터 패턴]
- 데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
[모델-뷰-컨트롤러 패턴]
- 서브시스템을 모델,뷰,컨트롤러로 구조화 하는 패턴
[마스터-슬레이브 패턴]
- 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴
[브로커 패턴]
- 브로커 컴포넌트가 사용자를 연결해주는 패턴
[이벤트-버스 패턴]
- 소스가 특정 채널에 이벤트 메시지를 발행하면(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너(Listener)들이 메시지를 받아 이벤트를 처리하는 패턴
[인터프리터 패턴]
- 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴
※ 캡슐화
: 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
※ 상속
: 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
※ 다형성
: 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
※ 객체지향 분석의 방법론
- Rumbaugh(럼바우) 방법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행
- Jacobson 방법 : 유스케이스(Use Case)를 강조하여 사용
- Coad와 Yourdon 방법 : E-R 다이어그램을 사용
※ 럼바우의 분석 기법
: 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법, 객체 모델링 기법(OMT, Object-Modeling Technique)라고도 함
- 객체 모델링 → 동적 모델링 → 기능 모델링 순으로 이루어진다
- 객체 모델링 (Object Modeling) : 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 모델링
- 동적 모델링 (Dynamic Modeling) : 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링
- 기능 모델링 (Functional Modeling) : 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링
※ 결합도
: 모듈 간에 상호 의존하는 정도, 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다.
[아래로 갈수록 결합도 약해짐]
- 내용 결합도 : 내부 자료 직접 참조
- 공통 결합도 : 공유되는 공통 데이터 영역을 영역을 여러 모듈이 사용할 때의 결합도
- 외부 결합도 : 어떤 모듈에서 선언한 데이터를 참조할 때
- 제어 결합도 : 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 전달하는 결합도
- 스탬프 결합도 : 자료구조
- 자료 결합도 : 자료 요소로만 구성될 때
※ 응집도
: 모듈의 내부 요소들이 서로 관련되어 있는 정도
[아래로 갈수록 응집도 약해짐]
- 기능적 응집도 : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
- 순차적 응집도 : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그다음 활동의 입력 데이터로 사용할 경우의 응집도
- 교환적 응집도 : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도
- 절차적 응집도 : 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
- 시간적 응집도
- 논리적 응집도 : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우
- 우연적 응집도
※ IPC [Inter-Process Communication]
: 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
[IPC의 대표 메소드 5가지]
- 공유 메모리
- 소켓
- 세마포어
- 파이프와 네임드 파이프
- 메시지 큐잉
※ 코드의 주요 기능
: 자료의 분류 / 조합 / 집계 / 추출을 용이하게 하기 위해 사용하는 기호
기능 | 내용 |
식별 기능 | 데이터 간의 성격에 따라 구분이 가능함 |
분류 기능 | 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화할 수 있음 |
배열 기능 | 의미를 부여하여 나열할 수 있음 |
표준화 기능 | 다양한 데이터를 기준에 맞추어 표현할 수 있음 |
간소화 기능 | 복잡한 데이터를 간소화할 수 있음 |
※ 디자인 패턴
: 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
GOF의 디자인 패턴은 생성 / 구조 / 행위로 구분
※ 생성 패턴
- 추상 팩토리
- 구체적인 클래스에 의존X, 인터페이스를 통해 서로 연관하는 객체들의 그룹으로 추상화
- 빌더
- 인스턴스를 건축하듯이 조합하여 객체 생성
- 팩토리 메서드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스에서 구현
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴
- 싱글톤
- 하나의 객체를 생성하면 어디서든 참조 가능
※ 구조 패턴
- 어댑터
- 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용하 수 있도록 변환해주는 패턴
- 브리지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴
- 컴포지트
- 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴
- 퍼싸드
- 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 핸턴, Wrapper 객체 필요
- 플라이웨이트
- 인스턴스가 필요할 때마다 매 번 생성하는 것이 아닌 가능한 공유해서 사용함으로써 메모리 절약
- 프록시
- 접근이 어려운 객체와 여기에 연결하는 객체 사이에서 인터페이스 역할을 수행하는 패턴
※ 행위 패턴
- 책임 연쇄
- 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태
- 커맨드
- 요청을 객체의 형태로 캡술화하여 재이용하거나 취소
- 인터프리터
- 언어에 문법 표현을 정의하는 패턴
- 반복자
- 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의하는 패턴
- 의존성을 줄여 결합도를 감소시킬 수 있다
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로써 해당 시점으로 되돌릴 수 있음, Ctrl + Z
- 옵서버
- 한 객체 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야할 때 사용
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화
- 방문자
- 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
※ API [Application Programming Interface]
: 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스
※ 배치 프로그램
: 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램
[배치 프로그램 필수 요소]
요소 | 설명 |
대용량 데이터 | 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야함 |
자동화 | 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 함 |
견고성 | 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 함 |
안정성/신뢰성 | 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함 |
성능 | - 다른 응용 프로개름의 수행을 방해하지 않아야 함 - 지정된 시간 내에 처리가 완료되어야 함 |
'CS > CS' 카테고리의 다른 글
[2장] 데이터 입출력 구현 (0) | 2023.07.17 |
---|---|
[1장] 요구사항 확인 (0) | 2023.07.17 |
[5, 6장] 인터페이스 구현 / 화면 설계 (0) | 2023.07.16 |
[12장] 제품 소프트웨어 패키징 (0) | 2023.07.16 |
[11장] 응용 SW 기초 기술 활용 (2) (1) | 2023.07.16 |