본문 바로가기
정보처리기사/1과목 - 소프트웨어 설계

[정보처리기사 필기] 소프트웨어 설계 요약 정리 3

by pizzz 2023. 1. 24.

30. 객체지향

객체지향 분석의 방법론

- Rumbaugh 방법 : 가장 일반적. 객체 모델, 동적 모델, 기능 모델로 나누어 수행

- Booch 방법 : 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용, 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의

- Jacobson 방법 : Use Case를 강조 

- Coad와 Yourdon 방법 : E-R다이어그램 사용하여 객체의 행위를 모델링. 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 기법

- Wirfs-Brock 방법 : 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법

 

럼바우의 분석기법

그래픽 표기법 이용하여 모델링하는 기법, 객체 모델링 기법 

분석 활동 : 객체 모델링(정보 모델링) -> 동적 모델링 -> 기능 모델링(DFD이용)

 

설계 원칙 SOLID

시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙

- 단일책임 원칙(SRP) : 객체는 단 하나의 책임만 가져야 함

- 개방-폐쇄 원칙(OCP) : 기존 코드 변경없이 기능 추가할 수 있도록 설계해야 함

- 리스코프 치환 원칙(LSP) : 자식클래스는 최소 자신의 부모클래스에서 가능한 행위는 수행할 수 있어야 함

- 인터페이스 분리 원칙(ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙

- 의존 역전 원칙(DIP) : 각 객체들 간의 의존관계가 성립될 때, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존관계를 맺어야 함.

 

31. 결합도(Coupling)

모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계

- 결합도가 약할수록 품질 높고, 강할수록 품질 낮음

- 결합도가 강하면 시스템 구현 및 유지보수 작업이 어려움

- 결합도 약함에서 강함 순으로 정리하면 다음과 같다.

  • 자료 결합도 : 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도
  • 스탬프(검인) 결합도 : 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도
  • 제어 결합도 : 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어신호를 이용하여 통신하거나 제어 요소를 전달하는 결합도 
  • 외부 결합도 : 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도
  • 공통 결합도 : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도
  • 내용 결합도 : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 

 

32. 응집도(Cohesion)

정보 은닉 개념을 확장한 것, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도.

즉, 모듈이 독립적인 기능으로 정의되어 잇는 정도를 의미

- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮다.

- 응집도가 강함에서 약함 순으로 정리하면 다음과 같다.

  • 기능적 응집도 : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
  • 순차적 응집도 : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
  • 교환(통신)적 응집도 : 동일 입출력 사용하여 서로 다른 기능을 수행하는 구성요소들이 모였을 경우
  • 절차적 응집도
  • 시간적 응집도
  • 논리적 응집도
  • 우연적 응집도

 

33. 팬인(Fan-In)/팬아웃(Fan-Out)

팬인 : 어떤 모듈을 제어하는 모듈의 수를 나타냄

팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수를 나타냄

 

34. N-S차트

논리의 기술에 중점을 둔 도형을 이용한 표현 방법. 박스 다이어그램, Chapin Chart라고도 함

- 연속, 선택 및 다중 선택, 반복 등의 제어논리 구조를 표현

- GOTO나 화살표를 사용하지 않음

- 이해하기 쉽고 코드 변환 용이

- 읽기는 쉽지만 자성하기 어려움, 임의로 제어를 전이하는 것 불가능

- 단일 입구와 단일 출구로 표현

- 총체적인 구조 표현과 인터페이스를 나타내기 어려움

 

35. 공통모듈

여러 프로그램에서 공통적으로 사용할 수 있는 모듈

- 모듈의 재사용성 확보와 중복 개발 회피를 위해 설계 과정에서 공통부분을 식별하고 명세를 작성할 필요가 있음

- 공통 모듈을 구현할 때는 다른 개발자들이 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함.

- 명세기법 ) 정확성, 명확성, 완전성, 일관성, 추적성

 

재사용(Reuse)

비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성하여 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화시키는 작업

- 사용법 공개

- 외부모듈과 결합도는 낮고, 응집도는 높아야 한다.

- 재사용 규모에 따른 분류

  • 함수와 객체 : 클래스나 메소드 단위의 소스 코드 재사용
  • 컴포넌트 : 독립적인 업무 또는 기능을 수행하는 실행 코드 기반으로 작성된 모듈
    • 컴포넌트 자체에 대한 수정없이 인터페이스를 통해 통신하는 방식으로 재사용함
  • 애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용함

 

효과적인 모듈 설계 방안

- 결합도는 줄이고 응집도는 높여 모듈의 독립성과 재사용성을 높인다.

- 모듈의 제어 영역 안에서 모듈의 영향 영역을 유지시킨다.

- 복잡도와 중복성을 줄이고 일관성을 유지시킨다.

- 모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안 된다.

- 유지보수 용이해야한다.

- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해한다.

- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정희하는 자료가 제시되어야 한다.

 

36. 코드(Code)

컴퓨터를 이용하여 자료를 처리하는 과정에서 분류, 조합, 집계를 용이하게 하고, 특정자료의 추출을 쉽게 하기 위해서 사용하는 기호이다.

- 정보를 신속, 정확, 명료하게 전달

- 예 ) 주민등록 번호, 학번, 전화 번호 등

- 주요 기능 ) 식별 기능, 분류 기능, 배열 기능, 표준화 기능, 간소화 기능

 

종류

  • 순차 코드 : 최초의 자료부터 차례로 일련 번호 부여. ex) 1,2,3,4, ...
  • 블록 코드 : 코드화 대상 항목 중 공통성 있는 것끼리 블록으로 구분. ex) 101~110 : 총무부, 111~120 : 영업부
  • 10진 코드 : 0~9 까진 10진 분할하고, 다시 그 각각에 대하여 10진 분할. 도서 분류식 코드. ex) 1000:공학, 1100:소프트웨어 공학, 1110 : 소프트웨어 설계
  • 그룹 분류 코드 : 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분. 각 그룹 안에서 일련번호 부여. ex) 1-01-001:본사-총무부-인사계, 2-01-001:지사-총무부-인사계
  • 연상 코드 : 숫자나 문자, 기호 이용. ex) TV-40 : 40인치 TV
  • 표의 숫자 코드 : 길이, 넓이, 부피, 지름, 높이 등 물리적 수치를 코드에 그대로 적용. ex) 120-720-1500 : 두께x폭x길이 = 120x720x1500
  • 합성 코드 : 2개 이상의 코드 조합. ex) 연상코드 + 순차코드. KE-711 : 대한항공 711기

 

37. 디자인패턴(Design Pattern)

각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 떄 참조할 수 있는 전형적인 해결방식 또는 예제

- 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플코드등으로 구성

- 새로 해결책 구상x, 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적이다.

- GoF의 디자인 패턴은 유형에 따라 생성 패턴 5개/구조 패턴 7개/행위 패턴 11개 총 23개의 패턴으로 구성

 

장점

- 범용적인 코딩 스타일로 인해 구조 파악 용이

- 객체지향 설계 및 구현의 생산성 높이는 데 적합

- 검증된 구조의 재사용 -> 시간과 비용 절약

- 개발자 간 원활한 의사소통

- 설계 변경 요청에 대한 유연한 대처 가능

 

단점

- 초기 투자 비용 부담

- 객체 지향을 기반으로 한 설계와 구현을 다루므로 다른 기반의 애플리케이션 개발에는 적합하지 않음

 

생성 패턴 (Creational Pattern)

생성 패턴은 객체의 생성과 참조 과정을 캡슐화 하여 객체가 생성되거나 변경되어도 프로그램의 구조에 영향을 크게 받지 않도록 하여 프로그램에 유연성을 더해준다.

- 추상팩토리/빌더/팩토리메소드/프로토타입/싱글톤

 

구조 패턴 (Structural Pattern)

구조 패턴은 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴으로 구조가 복잡한 시스템을 개발하기 쉽게 도와준다.

- 어댑터/브리지/컴포지트/데코레이터/퍼싸드/플라이웨이트/프록시

 

행위 패턴 (Behavioral Pattern)

클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴으로 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 도와줌

- 책임 연쇄/커맨드/인터프리터/반복자/중재자/메멘토/옵서버/전략/템플릿 메소드/방문자

 

38. 미들웨어(Middleware)

미들과 소프트웨어의 합성어

운영체제와 응용 프로그램, 또는 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트트웨어

- DB : 데이터베이스 벤더에서 제공하는 클라이언트에서 원격의 데이터베이스와 연결하기 위한 미들웨어

- RPC : 원격프로시저 호출로 응용 프로그램의 프로시저를 사용하여 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어

- MOM : 메시지 지향 미들웨어, 메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어, 온라인 업무보다는 이기종 분산데이터 시스템의 데이터 동기를 위해 많이 사용됨

- TP-Monitor : 트랜잭션 처리 모니터는 항공기나 철도 예약 업무 등과 같은 온라인 트랜잭션 업무에서 트랜잭션을 처리 및 감시하는 미들웨어 , 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 주로 사용됨.

- ORB : 객체요청 브로커는 객체 지향 미들웨어, TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 있음

- WAS : 웹 어플리케이션 서버는 정적인 콘텐츠를 처리하는 웹 서버와 달리 사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어. 클라이언트/서버 환경보다는 웹 환경을 구현하기 위한 미들웨어