본문 바로가기
소프트웨어공학론

Design Principles - Step-wise Refinement, Abstraction

by 학식러 2023. 5. 3.

 

설계 원리 4가지

: Step-wise Refinements, Abstraction, Modularization, SOLID

 

1. Step-wise Refinement

: 내가 작성할 모듈이 복잡할 때 한번에 상세내용까지 설계하지 않고

먼저 윗 단계에서 봤을 때 가장 대표적인 단계 찾는 것, 그리고 그 후에 다시 또 각 단계의 세부 단계 찾기.

 

ex) Tic-tac-toe

 

-> 상세화

 

 

2. Abstraction(추상화)

: 중요하지 않은 것은 생략하여 중요한 것만 보여주는 것.

 

ex) 지하철 노선도

두 역 사이의 거리는 전혀 보여주지 않고, 다음 역, 이전 역 이러한 정보들만 보여주고 있다.

 

1) Procedural abstractions(함수를 사용한 추상화)

: procedural interface는 보여주고, 내부 알고리즘은 숨긴다.

 

2) Data abstractions

: 데이터를 사용하기 위해 필요한 연산(operation), interface을 보여주고, 데이터 표현(ex. array, list, map, ...)은 숨긴다.

ex) 클래스

 

Data abstractions를 지징하는 또다른 용어들

: Information hiding(정보 은닉), Encapsulation(캡슐화), Abstract data types(추상 데이터 타입)

 

 

3. Modularizaiton(모듈화)

: 큰 소프트웨어를 만드는데 있어서 모듈을 잘 나누는 것은 중요하다.

 

잘 수행한 모듈화의 기준

1) Coupling(결합도)

: 두 모듈이 주어졌을 때, 한 모듈이 다른 모듈에 얼마나 의존하는가

 

의존성이 강함 = 한 모듈이 다른 모듈이 없으면 안된다 = 결합도 강함

의존성이 약함 = 한 모듈이 다른 모듈이 없어도 어느 정도 기능을 한다 = 결합도 약함

 

2개의 모듈에 대해서 이야기.

 

결합도가 높다 = 의존성이 강하다 = 의존성이 강할거였으면 애초에 하나의 모듈로 만드는 것이 좋다. 따라서 결합도가 높다 = Bad

 

결합도 좋음-> 안좋음

Data - Stamp - Control - Common - Content coupling

 

2) Cohesion(응집도)

: 한 모듈에 있는 여러 문장들이 모듈을 구성하는데 있어서 잘 모아진 것인가

 

한 모듈이 본연의, 하나의 기능만을 포함하는 문장들로만 구성 = 응집도 높음

불필요한 기능도 같이 포함하는 문장들로 구성 = 응집도 낮음

 

1개의 모듈에 대해서 이야기.

 

응집도 높다 = 한 목적을 위한 문장들로만 구성, 한가지 기능에 집중 = Good

응집도 낮다 = 여러 기능. 모듈을 여러개로 분리를 했어야 했는데 그렇지 않았다는 의미 = Bad

 

응집도 좋음 -> 안좋음

Function, Sequential, Communication, Temporal, Logical, Coincidental cohesion

 

 

a) Coupling

자료 결합
(data coupling)
(가장 좋은 방식)
모듈 간의 인터페이스가 매개 변수 전달 등의 자료 요소로만 구성된 경우
스탬프 결합 (stamp coupling) 배열이나 레코드를 전달하되 그 중 일부만 전달하는 경우. 전역 변수 일부만을 사용하여 전달하는 경우
제어 결합
(control coupling)
제어 흐름 관련 값을 전달하여 다른 모듈의 실행 순서를 제어하는 경우
공통 결합 (common coupling) 여러 모듈이 공동 자료 영역(ex.전역변수)을 사용하는 경우
내용 결합 (content coupling)
(가장 안좋은 방식)
다른 모듈의 지역 변수나 명령어를 수정하는 경우

 

 

b) Cohesion

 기능적 응집
(functional cohesion)
(가장 높은 응집도)
모듈이 하나의 기능을 구현하는 내용으로만 작성됨
순차적 응집
(sequential cohesion)
모듈 안에서 하나의 소작업 결과가 다음 소작업의 입력으로 전달되는 형태
커뮤니케이션 응집
(communication cohesion)
동일한 입출력 데이터에 대한 오퍼레이션을 모아놓은 형태 (수행 순서와는 무관)
시간적 응집
(temporal cohesion)
동일한 시점에 수행되는 오퍼레이션을 모아놓은 형태 (예: 초기화 코드를 모두 모아놓은 모듈)
(초기화)
논리적 응집
(logical cohesion)
모듈의 요소들이 논리적으로 관련있어서 모아놓은 형태 (예: 수학함수 라이브러리)
(math클래스 : sin, cos, 절댓값 함수, ...)
이유없는 응집
(coincidental cohesion)
(가장 낮은 응집도)
관계가 없는 코드들 하나의 모듈에 있는 형태

 

'소프트웨어공학론' 카테고리의 다른 글

Design patterns - Creational Pattern  (1) 2023.05.10
Design Principles - Solid  (0) 2023.05.06
Pipe and Filter architecture  (0) 2023.04.28
Repository architecture  (0) 2023.04.28
Event-driven Control  (0) 2023.04.27

댓글