-
1-3 어플리케이션 설계자격증/정처기 2023. 5. 14. 06:26
1.소프트웨어 아키텍처
1)모듈화 - 기능을 세분화, 공통 모듈 재사용
2)추상화 - 과정 / 데이터/ 제어(이벤트) 추상화
3)단계적 분해 - 하향식으로 추상화 반복
4)정보 은닉 - 모듈의 독립 수행
아키텍처 설계 과정
설계 목표 설정 -> 시스템 타입 결정 -> 아키텍처 패턴(스타일) 적용-> 서브시스템 구체화 -> 검토
시스템 타입
대화형(app), 이벤트(화재경보기), 변환형(컴파일러), 객체 영속형(DB로 파일 관리)
상위: 아키텍처, 구조, DB, 인터페이스
하위: 모듈, 컴포넌트, 자료구조, 알고리즘
2.아키텍처 패턴
1)레이어 패턴
- 하위 계층(서비스 제공자) -> 상위 계층(클라이언트)
*하위 계층의 숫자가 큼
- OSI 참조 모델 ( 물리 + 데이터 링크 + 네트워크 + 전송 + 세션 + 표현 + 응용)
2)클라이언트 서버 패턴
- 하나의 서버와 N개의 클라이언트
- 사용자 <-> 클라이언트 <-> 서버
- 요청과 응답을 위해 동기화될때를 빼곤 서로 독립적
3)파이프 필터 패턴
- 데이터 송수신 절차를 '필터'로 캡슐화 + '파이프'로 데이터 전송
- 데이터를 넘겨주는 과정을 '반복'
- 데이터 변환, 버퍼링, 동기화에 주로 사용
*파이프라인: 필터와 파이프를 통한 일련의 처리 과정
*UNIX의 쉘
4)MVC 패턴
뷰: Output 출력
컨트롤러: Input 처리 명령을 전달 = '변경'
모델: 서브시스템의 핵심 기능과 데이터 '보관'
*서로 독립적
*여러개의 뷰 가능 = 대화형 app에 적합
+
- 마스터 슬레이브: 하나의 m이 여러 s 통솔 = 병렬 처리에 유리
- 브로커 패턴: 사용자의 요청에 맞는 컴포넌트 연결 = 분산 환경에 유리
- 피어 투 피어: 피어는 클라이언트일수도 서버일수도 있음 = 멀티스레딩에 유리
- 블랙보드: 모든 컴포넌트가 공유 데이터 저장소(블랙보드)에 접근 가능 = 음성 인식, 차량 식별, 신호 해석
- 인터프리터: 코드 해석 어쩌구
3.객체 지향
- 객체를 '조립'하여 개발하는 기법
-객체 지향: 상향식 (동적 계획법, Dynamic)
-절차 지향: 하향식
1)객체
- '데이터'와 '함수'를 캡슐화한 하나의 모듈
* 데이터: 객체의 정보 = 속성, 상태, 변수, 상수, 자료구조
* 함수: 객체를 처리하는 알고리즘 = 메소드, 서비스, 동작, 연산, 오퍼레이션
* 객체가 반응할 수 있는 메시지의 집합 = 행위 = 연산, 메소드
- 각 객체는 식별 가능한 '이름'과 '상태'를 지님
2)클래스
- 공통된 속성과 연산(행위)을 지닌 객체의 집합 = 객체의 일반적인 타입(자료형)
- 데이터를 추상화하는 단위
* 인스턴스: 클래스에 속한 각각의 개체
* 인스턴스화: 새로운 객체 생성
- 부모 = 상위 = 슈퍼 클래스 // 자식 = 하위 = 서브 클래스
3)캡슐화(Encapsulation)
- 데이터와 함수를 하나로 묶음
- 캡슐화된 객체는 정보 은닉이 되어 외부의 영향이 적어짐 + 재사용에 용이
- 세부 내용을 몰라도 되므로 인터페이스가 단순, 결합도가 "낮아짐"
4)상속(Inheritance)
+ 다중 상속: 엄마가 둘이라 좋으시겠네요
5)다형성(Polymorphism)
- 객체나 클래스가 전달받은 메시지에 대해 고유한 방법으로 응답하는 능력
ex) '+'는 덧셈 or 문자열 연결
오버로딩: 메소드의 이름은 같지만 매개변수의 자료형과 개수를 다르게함
오버라이딩: 상속받은 메소드 재정의
4.객체지향 설계
- Object Oriented Analysis = OOA
럼바우 분석 기법
- 모든 구성 요소를 그래픽 표기법(다이어그램)으로 모델링
- 객체 모델링 기법 = OMT 라고도 함
- 객체 -> 동적 -> 기능 모델링
(객체 다이어그램 -> 상태 다이어그램 -> 자료흐름도)
*객체 다이어그램: 객체간의 관계 표현
*상태 다이어그램: 시간에 따른 객체의 변화 표현
+
부치: 미시적 + 거시적 (micro + macro)
Jacobson: 유스케이스 (상호작용)
Coad Yourdon: ER 다이어그램
Wirfs-Brock: 고객 명세서 (분석과 설계의 구분 x)
객체 지향 설계 원칙 = SOLID
1)단일 책임 원칙
- 객체는 하나의 책임만 가짐
- 응집도를 높이고 결합도를 낮춤
2)개방 폐쇄 원칙
- 기존 코드의 변경 없이 기능을 추가할 수 있게 설계
- 확장엔 개방, 변경엔 폐쇄
ex)공통 인터페이스를 하나로 묶어 캡슐화
3)리스코프 치환
- 부모가 가능한 행위는 자식도 가능해야함
4)인터페이스 분리
- 사용하지 않는 인터페이스와 연관이 있으면 안됨
5)의존 역전 원칙
- 추상성이 최대한 높은 클래스와 의존 관계를 맺을것
*보통 인터페이스가 추상성이 높음
5.모듈
- 서브시스템, 서브루틴, 작업 단위
- 단독으로 컴파일이 가능하다
결합도(coupling)
~결합도 낮음~
1)자료 결합도 - 매개변수로 데이터를 넘겨주고 리턴값을 받음
2)스탬프 결합도 - 자료 구조 전달
3)제어 결합도 - 다른 모듈의 논리적인 흐름을 제어
4)외부 결합도 - 모듈의 지역변수를 외부 모듈이 참조
5)공통 결합도 - 공통 데이터 영역 = 전역 변수
6)내용 결합도 - 다른 모듈의 내부를 직접 참조
~결합도 높음~
응집도(cohesion)
~응집도 강함~
1)기능적 응집도 - 모든 요소가 한가지 기능을 위해 사용됨
2)순차적 응집도 - 모듈 내에서 특정 값을 얻고 이를 다시 input으로 사용 *sequential
3)교환적 응집도 - 입출력이 동일한 기능들을 묶임 *communication
4)절차적 응집도 - 다수의 기능이 순차적으로 사용 *procedure
5)시간적 응집도 - 특정 시간에 처리되는 기능들을 묶음 *temporal
6)논리적 응집도 - 논리적으로 비슷한 기능을 묶음 *logical
7)우연적 응집도 - 전혀 상관 없는게 묶임 *coincidental
~응집도 약함
-팬인: 자신을 사용하는 모듈 수
-팬아웃: 자신이 사용하는 모듈 수
-팬인은 높을수록, 팬아웃은 낮을수록 좋음
*A -> B A가 B를 사용
+
NS 차트
도형으로 논리 기술
6.공통 모듈
- 명확성: '일관'되게 한가지로 해석 가능하게
- 일관성: 상호충돌 없게
- 완전성: 필요한 모든것을 기술
+정확성, 추적성
- 재사용 범위: 함수와 객체 < 컴포넌트 < 어플리케이션
7.코드
-순차: 12345
-연상: TV-40 (mnemonic)
-표의 숫자: 1980-1080 (실제수치)
-그룹: 1-01-001
-블록: 100~199, 200~299
-10진: 1000(문학) -> 1100(판타지) -> 1130(해리포터)
8.디자인 패턴
- SW설계에서 자주 발생하는 문제에 대한 일반적인 해결방법
- 아키텍처 패턴보다 더 상세한 개념
- 배경 + 사례 + 샘플코드
- 초기 비용이 비쌈, 객체지향 외에는 비적합
생성 패턴
- 객체 생성과 관련됨
1)추상 팩토리: 서로 의존하는 객체들을 묶어 추상적으로 표현
2)팩토리 메소드: 객체 생성을 서브 클래스에게 위임
*가상 생성자(virtual constructor) 라고도 함
3)프로토타입: 프로토타입을 복제하여 객체 생성
4)빌더: 인스턴스를건축하듯이 조합하여 객체 생성
*객체의 생성과 표현 분리 = 같은 객체 다른 결과
5)싱글톤: 생성된 객체는 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없음
*only 1 인스턴스 보장
구조 패턴
-클래스나 객체를 조합하여 더 큰 구조를 만듦
1)어댑터: 인터페이스를 변환하여 클래스끼리 호환되게 함
2)브릿지: 추상부(기능)와 구현부 분리
3)컴포지트: 복합, 단일 개체를 구별없이 사용하게 함
4)데코레이터: 개체간의 결합으로 기능 확장
5)퍼싸드(facade): 통합 인터페이스(wrapper)로 단순화
6)플라이웨이트: 인스턴스를 공유해 메모리 절약
7)프록시
행위 패턴
1)책임 연쇄: 처리하지 못한 요청을 넘김
2)반복자(iterator): 접근이 잦은 객체에 동일한 인터페이스
3)템플릿 메소드: 상위클래스(골격) -> 하위 클래스(구체화)
4)방문자: 처리 기능 분리
5)상태: 상태값에 따른 동작 처리
6)메멘토: 상태값을 백업 = ctrl+z
7)커맨드: 요청 캡슐화(객체화)
8)전략: 알고리즘 캡슐화
9)중재자(mediator): 상호작용 캡술화
10)인터프리터: 언어, 문법
11)옵서버: 관측, 전달
'자격증 > 정처기' 카테고리의 다른 글
2-2 소프트웨어 패키징 (0) 2023.05.16 2-1 데이터 입출력 구현 (0) 2023.05.16 1-4 인터페이스 설계 (0) 2023.05.14 1-2 화면 설계 (0) 2023.05.14 1-1 요구사항 확인 (0) 2023.05.12