본문 바로가기

자격증/정보처리기사 - 필기

소프트웨어 설계 - 애플리케이션 설계

728x90

모듈화 : 시스템의 기능을 모듈 단위로 나눔, 재사용성 향상

 

추상화 : 불필요한 부분 생략, 필요한 부분을 강조

-> 과정 추상화 : 흐름만 파악

-> 데이터 추상화 : 데이터 구조를 대표할 수 있는 표현으로 대체

-> 제어 추상화 : 이벤트 발생 시 대표할 수 있는 표현으로 대체

 

단계적 분해 : 하향식 설계 전략( 상위에서 하위로 구체화 시킴 )

● 추상화의 반복에 의해 세분화

 

정보 은닉 : 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근/변경 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

 

구조 패턴 : 클래스나 객체들을 조합 해 더 큰 구조로 만듬

● 어댑터 : 인터페이스가 일치하지 않아 클래스 못 사용할 때

● 브리지 : 기능과 구현을 두 개의 별도 클래스로 구현

● 컴포지트 : 복합 객체와 단일 객체를 구분 없이

● 데코레이터 : 객체에 부가적인 기능 추가

● 퍼싸드 : 복잡한 서브 클래스들을 피해 더 상위에 인터페이스 구상

● 플라이웨이트 : 공유해서 사용함으로 메모리 절약

● 프록시 : 객체 사이의 인터페이스 역할

 

행위 패턴 : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법 정의

● 책임 연쇄 : 한 객체가 처리하지 못하면 다음 객체로 넘어감

● 커맨드 : 각종 명령어들을 하나로 합쳐둔 것

● 인터프리터 : 언어 번역기

● 중재자 : 상호작용을 캡슐화하여 객체로 정의

● 옵저버 : 변화된 상태 전달

● 상태 : 객체의 상태에 따라 다르게 처리할 때 사용

● 템플릿 메소드 : 상위 클래스에서 골격정의, 하위 클래스에서 세부 처리 구체화

● 전략 ● 방문자 ● 반복자