모듈화 : 시스템의 기능을 모듈 단위로 나눔, 재사용성 향상
추상화 : 불필요한 부분 생략, 필요한 부분을 강조
-> 과정 추상화 : 흐름만 파악
-> 데이터 추상화 : 데이터 구조를 대표할 수 있는 표현으로 대체
-> 제어 추상화 : 이벤트 발생 시 대표할 수 있는 표현으로 대체
단계적 분해 : 하향식 설계 전략( 상위에서 하위로 구체화 시킴 )
● 추상화의 반복에 의해 세분화
정보 은닉 : 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근/변경 X
● 모듈을 독립적으로 수행 가능
SW 아키텍처 품질 속성
● 시스템 측면
- 성능 : 이벤트 발생 시 빠르게 처리
- 보안 : 허용되지 않은 접근 막음, 허용된 접근에는 적절한 서비스 제공
- 가용성 : 장애 없이 정상적으로 서비스 제공
- 기능성 : 요구한 기능 구현
- 사용성 : 명확하고 편리하게 구현
- 변경 용이성 - 확장성
● 비즈니스 측면
- 시장 적시성 : 정해진 시간에 맞춰 프로그램 출시
- 비용과 혜택 - 예상 시스템 수명
● 아키텍처 측면
- 개념적 무결성 : 전체 시스템과 시스템을 이루는 구성요소들 간의 일관성 유지
- 정확성, 완결성 : 요구사항 구현 위해 발생하는 제약사항들 모두 충족
- 구축 가능성 : 유연하게 일정 변경
SW 아키텍처 설계 과정
1. 목표 설정 2. 시스템 타입 결정 3. 아키텍처 패턴 적용 4. 서브시스템 구체화 5. 검토
아키텍처 패턴 : SW 시스템의 구조를 구성하기 위한 기본적인 윤곽 제시
< 장점 >
● 개발 시간 단축 ● 개발에 참여하지 않은 사람도 손쉽게 유지보수 가능
< 종류 >
1. 레이어 패턴
● 상위 계층은 하위 계층에 대한 서비스 제공자, 하위 계층은 상위 계층의 클라이언트가 됨
● 변경 작업 용이 ● 특정 계층만을 교체해 시스템 개선 가능 ● OSI 참조 모델
2. 클라이언트-서버 패턴 : 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성
● 사용자는 클라이언트와만 의사소통 ● 서버는 항상 대기 상태
3. 파이프-필터 패턴 : 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터 전송
● 재사용성 좋음, 확장 용이 ● UNIX 의 쉘
4. 모델-뷰-컨트롤러 패턴 : 서브시스템을 3개의 부분으로 구조화
● 모델 : 서브시스템의 핵심 기능과 데이터 보관 ● 뷰 : 사용자에게 정보 표시
● 컨트롤러 : 사용자로부터 받은 입력 처리 ● 대화형 애플리케이션에 적합
5. 마스터-슬레이브 패턴 : 장애 허용 시스템, 병렬 컴퓨팅 시스템
6. 브로커 패턴 : 분산 환경 시스템
7. 피어-투-피어 패턴 : 멀티스레딩
8. 이벤트-버스 패턴 : 이벤트를 처리
9. 블랙보드 패턴 : 해결책이 명확하지 않은 문제 처리
10. 인터프리터 패턴 : 특정 언어로 작성된 프로그램 코드를 해석하는 컴포넌트 설계 시 사용
객체지향 : SW를 개발할 때 객체들을 조립해서 작성
● 구조적 기법 문제점 해결 ● SW의 재사용 및 확장 용이
● 멀티미디어 데이터 및 병렬 처리 지원 ● 사용자와 개발자가 쉽게 이해
객체 : 데이터와 함수를 묶은 하나의 SW모듈
● 독립적으로 식별 가능한 이름 가짐
● 상태 : 객체가 가질 수 있는 조건, 시간에 따라 변함
● 객체간 상호 연관성에 의한 관계 ● 일정한 기억장소 가짐
클래스 : 공통된 속성과 연산을 갖는 객체의 집합
● 인스턴스 : 클래스에 속한 각각의 객체
● 인스턴스화 : 클래스로부터 새로운 객체 생성
● 최상위 클래스 : 상위 클래스를 갖지 않는 클래스
캡슐화 : 데이터와 함수를 하나로 묶음
● 정보 은닉되어 외부 모듈의 변경으로 인한 파급 효과 적음
● 재사용 용이 ● 객체 간 결합도 낮아짐
상속 : 이미 정의된 상위 클래스의 속성과 연산을 하위 클래스가 물려받는 것
● 다중 상속 : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 상속받는 것
다형성 : 하나의 메시지에 대해 각각의 객체가 가진 특성으로 응답하는 것
모듈
● 단독으로 컴파일 가능, 재사용 가능
● 기능적 독립성 : 하나의 기능만 수행, 다른 모듈과의 과도한 상호작용 배제
● 독립성이 높을수록 오류 발생 시 쉽게 발견 가능
결합도 : 모듈 간 상호 의존하는 정도, 약할수록 좋음
< 종류 > - 약한 순
1. 자료 결합도 : 데이터를 넘겨주고 호출 받은 모듈은 받은 데이터에 대한 처리 결과 돌려줌
2. 스탬프 결합도 : 자료 구조가 전달될 때의 결합
3. 제어 결합도 : 제어 신호 이용
4. 외부 결합도 : 어떤 모듈에서 선언한 데이터를 다른 모듈에서 참조할 때
5. 공통 결합도( = 공유 결합도 ) : 공통 데이터 영역을 여러 모듈이 사용할 때
6. 내용 결합도 : 한 모듈이 다른 모듈의 내부 기능 및 자료를 참조하거나 수정할 때
응집도 : 정보 은닉 개념 확장, 강할수록 좋음
< 종류 > - 강한 순
1. 기능적 응집도 : 모듈 내부 기능이 단일 문제와 연관되어 수행될 때
2. 순차적 응집도 : 하나의 활동에서 나온 출력 데이터를 다음 활동의 입력 데이터로 사용
3. 교환적 응집도 : 동일한 입/출력 사용해 서로 다른 기능 수행하는 요소가 모였을 때
4. 절차적 응집도 : 모듈 안의 요소들이 그 기능을 순차적으로 수행할 경우
5. 시간적 응집도 : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 시
6. 논리적 응집도 : 유사 성격을 갖거나 특정 형태로 분류되는 요소들로 하나의 모듈 형성 시
7. 우연적 응집도 : 각 요소들이 서로 관련 없는 요소로만 구성된 경우
팬인 : 어떤 모듈을 제어하는 모듈의 수
팬 아웃 : 어떤 모듈에 의해 제어되는 모듈의 수
공통 모듈 : 모듈의 재사용성 확보와 중복 개발 회피를 위해 공통 부분 식별
● 정확성 ● 명확성 ● 완전성 ● 추적성 ● 일관성 : 기능들 간 충돌 발생 없도록
코드 : 특정 자료의 추출을 쉽게 하기 위해 사용하는 기호
● 일정한 규칙에 따라 작성 ● 식별, 분류, 배열 기능
● 코드 부여 체계 : 이름만으로 개체의 용도와 적용 범위를 알 수 있도록 코드 부여
< 종류 >
순차 코드 : 최초의 자료부터 차례대로 일련번호 부여
블록 코드 : 공통성이 있는 것끼리 블록으로 구분, 각 블록에서 일련번호 부여
10진 코드 : 0 – 9 까지 10진 분할하고, 필요한 만큼 반복
그룹 분류 코드 : 일정 기준에 따라 구분, 각 그룹 안에서 일련번호 부여
연상 코드 : 숫자나 문자, 기호를 이용해 코드 부여
표의 숫자 코드 : 항목의 성질을 그대로 코드에 적용
합성 코드 : 2개 이상의 코드 조합
디자인 패턴 : 코드 작성 시 참조 할 수 있는 해결방식
< 아키텍처 패턴 VS 디자인 패턴 >
● 아키텍처 패턴은 디자인 패턴보다 상위 수준의 설계에 사용
● 아키텍처 패턴 : 전체 시스템의 구조 설계
● 디자인 패턴 : 서브 시스템에 속하는 컴포넌트들과 그 관계 설계
생성 패턴 : 객체의 생성과 관련된 패턴
● 추상 팩토리 : 클래스에 의존 X
● 빌더 : 인스턴스를 조합하여 객체 생성
● 팩토리 메소드 : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화
● 프로토타입 : 원복 객체 복제
● 싱글톤 : 객체를 어디서든 참조할 수 있지만 여러 프로세스가 동시에 참조 X
구조 패턴 : 클래스나 객체들을 조합 해 더 큰 구조로 만듬
● 어댑터 : 인터페이스가 일치하지 않아 클래스 못 사용할 때
● 브리지 : 기능과 구현을 두 개의 별도 클래스로 구현
● 컴포지트 : 복합 객체와 단일 객체를 구분 없이
● 데코레이터 : 객체에 부가적인 기능 추가
● 퍼싸드 : 복잡한 서브 클래스들을 피해 더 상위에 인터페이스 구상
● 플라이웨이트 : 공유해서 사용함으로 메모리 절약
● 프록시 : 객체 사이의 인터페이스 역할
행위 패턴 : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법 정의
● 책임 연쇄 : 한 객체가 처리하지 못하면 다음 객체로 넘어감
● 커맨드 : 각종 명령어들을 하나로 합쳐둔 것
● 인터프리터 : 언어 번역기
● 중재자 : 상호작용을 캡슐화하여 객체로 정의
● 옵저버 : 변화된 상태 전달
● 상태 : 객체의 상태에 따라 다르게 처리할 때 사용
● 템플릿 메소드 : 상위 클래스에서 골격정의, 하위 클래스에서 세부 처리 구체화
● 전략 ● 방문자 ● 반복자
'자격증 > 정보처리기사 - 필기' 카테고리의 다른 글
소프트웨어 개발 - 통합 구현 (0) | 2020.02.04 |
---|---|
소프트웨어 개발 - 데이터 입/출력 구현 (0) | 2020.02.02 |
소프트웨어 설계 - 인터페이스 설계 (0) | 2020.01.30 |
소프트웨어 설계 - 화면 설계 (0) | 2020.01.21 |
소프트웨어 설계 - 요구사항 확인 (0) | 2020.01.21 |