응집도
- 모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있음
- 응집도가 높을수록 필요한 요소들로 구성 / 응집도가 낮을수록 관련이 적은 요소들로 구성
1) 응집도의 유형
구분 | 설명 |
기능적 응집도 Functional Cohesion |
- 모듈 내부의 모든 기능이 단일한 목적을 위해 수행 예) 원 넓이 계산 |
순차적 응집도 Sequential Cohesion |
- 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우 |
통신적 응집도 Communication Cohesion |
- 동일한 자료를 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우 - 처리 순서는 상관 없음 |
절차적 응집도 Procedural Cohesion |
- 관련없는 기능 요소가 배열된 순서로 수행됨 - 요소들이 서로 관련없다는 것만 빼면 순차적응집도와 유사 |
시간적 응집도 Temporal Cohesion |
- 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우 |
논리적 응집도 Logical Cohesion |
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈들에서 처리되는 경우 예) 모든 마우스 및 키보드 입력 처리 루틴 그룹화 |
우연적 응집도 Coincidental Cohesion |
- 모듈 내부의 각 구성 요소들이 연관이 없을 경우 |
2) 응집도와 품질 ⭐
- 응직도 순서 : 우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 <
통신적 응집도 < 순차적 응집도 < 기능적 응집도
(우논시절통순기)
- 기능적 응집도가 품질이 가장 높음 / 우연적 응집도가 품질이 가장 낮음
결합도
- 모듈과 모듈간의 관련성
- 관련이 적을수록 독립성이 높아 모듈 간 영향이 적어짐
1) 결합도의 유형
구분 | 설명 |
자료 결합도 Data Coupling |
- 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우 |
스탬프 결함도 Stamp Coupling |
- 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우 - 데이터 구조 결합도 |
제어 결합도 Control Coupling |
- 단순 처리할 대상인 값만 전달되는게 아니라 어떻게 처리를 해야한다는 제어 요소가 전달되어 다른 모듈의 흐름을 제어 |
외부 결합도 External Coupling |
- 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 디바이스 인터페이스를 공유할 때 발생 |
공통 결합도 Common Coupling |
- 파라미터가 아닌 모듈 밖에 선언 되어 있는 전역 변수르 참조하고 전역 변수를 갱신하는 식으로 상호작용 하는 경우 |
내용 결합도 Content Coupling |
- 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 |
2) 결합도와 품질
- 결합도 순서 : 자료 결합도 > 스탬프 결합도 > 제어 결합도 > 외부 결합도 > 공통 결합도 > 내용 결합
(자스제외공내)
- 자료 결합도가 품질이 가장 높음 / 내용 결합이 품질이 가장 낮음
시퀀스 다이어그램
- 기능 수행을 위해 시스템 내의 객체들이 다른 객체들과 어떻게 교류하는지를 보여주는 다이어그램
구성항목 | 설명 |
객체 Object | - 사각형 박스 안에 밑줄 친 이름 아래쪽으로 생명선을 가지고 있다 |
생명선 LifeLine | - 객체에서 아래로 뻗어 나가는 쇄선 - 시간의 스름에 따라 발생하는 이벤트 |
실행 Activation | - 실행되고 있음을 나타냄 - 직사각형으로 표시, 직사각형이 길수록 수행시간이 길다 |
메시지 Message | - 객체 간 상호작용은 메시지 교환으로 이루어짐 |
시간 | - 수행 순서는 위에서 아래로 표시 |
코드의 종류
유형 | 설명 |
순차 코드 | - 일정한 일련번호 예) 1, 2, 3, ..., 10 |
블록 코드 | - 공통 특성을 몇 개의 블록으로 구분하여 부여 예) 총무과01, 인사과02, ... |
10진 분류 코드 | - 10진으로 분류하고 다시 10진으로 분류 예) 공학 400, 컴퓨터 410, 파이썬 4123 |
그룹 분류 코드 | - 대분류/중분류/소분류 구분 후, 그룹 내에서 순차 번호 예) 111 총무부 인사과 행정계, 112 총무부 인사과 기획계 |
연상 코드 | - 대상 항목의 명칭을 코드에 반영 예) TV-75(75인치TV), KOR(한국) |
표의 숫자 코드 | - 물리적 수치를 이용하여 만든 코드 예) 100-800-600 (가로100, 세로800, 높이600) |
합성 코드 | - 2개 이상의 코드를 조합하여 만든 코드 예) 연상코드 + 순차코드 (KAL-737) |
디자인 패턴
- 반복적으로 나타나는 문제점들에 대한 해결 방안을 제시한 것
- 다양한 응용 소프트웨어 시스템들을 개발할 때 존재하는 공통되는 설계문제, 공통되는 해결책을 묶어 패턴이라고 함
- 팀원 사이의 의사소통을 원활하게 해주는 역할
- UML과 같은 일종의 설계 기법이며, 설계 방법
- SW 설계 시 SW 재사용성, 호환성, 유지보수성을 보장하여 '올바른 설계'를 빠르게 만들 수 있도록 도와줌
1) 디자인 패턴 구성요소
패턴 이름 (Pattern Name) | - 패턴의 이름은 해당 패턴의 솔루션을 담고 있다 |
문제 (Problem) | - 패턴이 적용되어 해결될 필요가 있는 디자인 |
해결 (Solution) | - 문제를 해결하기 위한 요소들 사이의 관계 - 다양한 상황에 적용할 수 있는 템플릿 |
결과 (Consequence) | - 패턴을 적용해서 얻은 결과와 장단점 서술 |
2) 디자인 패턴 분류
- 생성(Creational) 패턴 : 객체 생성에 관련된 패턴
- 구조(Structural) 패턴 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
- 행위(Behaviroal) 패턴 : 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
3) GoF 디자인 패턴 분류
생성 패턴 | - 간단한 블록의 코드로 여러가지 다양한 객체를 생성 - 실행 시간에 객체의 다양한 버전을 생성 - 생성한 객체에 제한을 가함 |
구조 패턴 | - 더 큰 구조를 형성하기 위하여 클래스와 객체를 어떻게 합성하는가? - 상속 기법 이용 : 인터페이스, 구현을 합성 - 구조화 패턴 새로운 기능을 구현하기 위하여 객체를 구성하는 방식 런타임에 객체 구조를 변경 유연성, 확장성 |
행위 패턴 | - 반복적으로 일어나는 객체들의 상호작용을 패턴화해 놓은 것 - 객체들 간의 알고리즘이나 역할 분담에 관련된 것 |
4) GoF 디자인 패턴 분류
생성 패턴 | - 추상팩토리 (Abstract Factory) - 빌더 (Builder) - 팩토리메서드 (Factory Method) - 프로토타입 (Prototype) - 싱글톤 (Singleton) |
구조 패턴 | - 어댑터 (Adaptor) - 브리지 (Bridge) - 컴퍼지트 (Composite) - 데커레이터 (Decorator) - 퍼사드 (Facade) - 플라이웨이트 (Flyweight) - 프록시 (Proxy) |
행위 패턴 | - 책임연쇄 (Chain of Responsibility) - 커맨드 (Command) - 인터프리터 (Interpreter) - 이터레이터 (Iterator) - 미디에이터 (Mediator) - 메멘토 (Memento) - 옵서버 (Observer) - 스테이트 (Satae) - 스트래티지 (Strategy) - 템플릿메서드 (Template Method) - 비지터 (Visitor) |
생성 (Creational) 패턴
- 객체 생성에 관련된 패턴
추상 팩토리 | - 공장을 만들어내는 상위 공장을 먼저 정의하고, 여기서 구체적인 공장을 만든 후, 이 공장에서 객체 생성 - 구체적인 클래으세 의존하지 않음 - 서로 연관된 객체들의 조합을 만드는 인터페이스를 제공 |
팩토리 메서드 | - 인스턴스를 만들어내는 공장을 통해 객체 생성 - 객체 생성 처리를 서브 클래스로 분리해 저리하도록 캡슐화 |
프로토타입 | - 기존의 인스턴스를 그대로 복제하여 새로운 객체를 생성하는 방법 |
빌더 | - 객체를 생성할 때 필요한 파라미터가 많은 경우, 각 파라미터가 무엇을 의미하는지 빌더라는 형태를 통해 명확히 하여 생성할 수 있다 |
싱글톤 | - 전역변수르 사용하지 않음 - 객체를 하나만 생성 - 생성된 객체를 어디에서든지 참조할 수 있도록 함 |
구조(Structual) 패턴
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
컴퍼지드 Composite |
- 여러 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 해줌 - 어떤 클래스(Composite)가 자기 자신 혹은 다른 클래스(Leaf)를 가질 수 있는 구조 |
데커레이터 Decorator |
- 객체의 결합을 통해 기능을 유연하게 확장하게 해줌 - 각각의 기능을 담당하는 클래스(Decorator)들과 이 기능을 적용할 클래스(Component)를 분리한 뒤, 필요에 따라 동적으로 각 기능을 적용할 수 있는 구조 |
어댑터 Adapter |
- 서로 다른 두 클래스(Client롸 Adaptee)가 있고, 이 둘은 그대로 둔 채 이 둘의 인터페이스를 연결하고자 어댑터 클래스를 만들어 사용하는 구조 |
프록시 Proxy |
- 구체적인 업무를 담당하고 있는 클래스에 접근하기 전에, 간단한 사전 작업 처리하는 클래스(Proxy)를 두는 구 |
행위(Behaviroal) 패턴
- 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
옵서버 Observer |
- 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동 - 일대다 객체 의존관계 - 하나의 관찰대상 - 여러 개의 관찰자 구조 |
스테이트 State |
- 객체의 상태에 따라 객체의 행위 내용 변경 |
스트래터지 Strategy |
- 동일 계열의 알고리즘들을 인터페이스-캡슐화하고, 알고리즘들을 컴포지션(위임 형태로) 가지는 패턴 |
방문자 Visitor |
- 방문자와 방문 공간을 분리하여, 방문 공간이 방문자를 맞이할 때, 이후에 대한 행동을 방문자에게 위임하는 패턴 |
책임 연쇄 Chain of responsibility |
- 요청을 처리하는 동일 인터페이스 객체들을 체인 형태로 연결해놓은 패턴 |
템플릿 메서드 | - 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화 - 전체 일을 수행하는 구조는 그대로 특정단계에서 수행하는 내역을 바꾸는 패턴 |
커맨드 Command |
- 특정 객체에 대한 커맨드를 객체화 하여 이 커맨드 객체를 필요에 따라 처리하는 패턴 - 실행될 기능을 캡슐화 - 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계 |
정리하기
1. 응집도
- 높을수록 필요한 요소들로 구성 / 낮을수록 관련이 적은 요소들로 구성
- 기능적/Functional > 순차적/Sequential > 통신적/Communication > 절차적/Procedure > 시간적/Temporal > 논리적/Logical > 우연적/Coincidental
- 기능적 응집도가 가장 높음 / 우연적 응직도가 가장 낮음
2. 결합도
- 낮을수록 독립성이 높아지고 모듈간 영향이 적어짐
- 자료/Data > 스탬프/Stamp > 제어/Control > 외부/External > 공통/Common > 내용/Content
- 자료 결합도가 가장 높음 / 내용 결합도가 가장 낮음
3. 시퀀스 다이어그램
- 기능 수행을 위해 시스템 내의 객체들이 다른 객체들과 어떻게 교류하는지 보여주는 다이어그램
- 객체, 생명선, 실행, 메시지, 시간
4. 코드의 종류
- 순차 코드, 블록 코드, 10진 분류 코드, 그룹 분류 코드, 연상 코드, 표의 숫자 코드, 합성 코드
5. 디자인 패턴
- 구성요소 : 패턴이름, 문제, 해결, 결과
- 패턴 분류 : 생성(Creational)패턴, 구조(Structural)패턴, 행위(Behavioral)패턴
6. 생성(Creational)패턴
- 추상 팩토리, 팩토리 메서드, 프로토타입, 빌더, 싱글톤
7. 구조(Structural)패턴
- 컴퍼지트(Composite), 데커레이터(Decorator), 어댑터(Adapter), 프록시(Proxy)
8. 행위(Behavioral)패턴
- 옵서버(Observer), 스테이트(State), 스트래터지(Strategy), 방문자(Visitor), 책임연쇄(Chain or responsibility), 템플릿 메서드, 커맨드(Command)
'정보처리기사 > 1과 소프트웨어 설계' 카테고리의 다른 글
4. 인터페이스 설계 (0) | 2023.11.17 |
---|---|
2. 화면 설계 (2) | 2023.11.14 |
1. 요구사항 확인 (2) | 2023.11.14 |