클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

[소프트웨어 설계] 3장 애플리케이션 설계 1 - 공통 모듈 설계 1 : 재사용과 공통 모듈 본문

자격증 공부/정보처리기사 필기

[소프트웨어 설계] 3장 애플리케이션 설계 1 - 공통 모듈 설계 1 : 재사용과 공통 모듈

huenuri 2024. 7. 31. 12:34
이번에는 정보처리기사 필기 공부를 시작해본다. 공부할 시간이 많지 않지만 최대한 빠르게 학습을 진행해볼 것이다. 어제 운동을 하지 않아서 샤워를 하지 못했으니 8시까지는 학습을 다 마쳐야 한다.
 
그럼 바로 학습을 시작해보겠다! 어제 1과목 3장의 중반까지는 학습을 마쳤다. 원래 계획대로라면 오늘까지 4장을 다 마치려고 했는데 조금 미루어질 것 같다. 그래도 주말이니 충분히 따라잡을 수 있다.
 


 

재사용

1. 재사용

1) 재사용의 개념

  • 목표 시스템의 개발 시간 및 비용 절감을 위해 검증된 기능을 파악하고 재구성 -> 시스템에 응용하기 위한 최적화 작업
  • 기존의 소프트웨어 또는 소프트웨어 지식을 활용하여 새로운 소프트웨어 를 구축하는 작업

 

2) 재사용의 유형 🎃

컴포넌트(Component)
특정한 기능을 수행하기 위해 독립적으로 개발되어 보급하고, 다른 부품과 조립되어 응용시스템을 구축하기 위해 사용되는 소프트웨어 프로그램



 

공통 모듈 🔥🔥🔥

1. 공통 모듈의 개념

1) 모듈의 개념

  • 모듈은 크게 독립된 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는 용어
  • 모듈화를 통해 분리된 시스템의 기능들로 서브프로그램, 서브 루틴, 소프트웨어 내의 단위 프로그램, 작업 단위 등과 같은 의미로 사용됨

 

2) 모듈의 특징

 

3) 공통 모듈의 개념

  • 전체 프로그램의 기능 중 특정 기능을 처리할 수 있는 실행 코드를 의미
  • 자체적으로 컴파일 가능하고, 다른 프로그램에서 재사용이 가능
  • 여러 기능 및 프로그램에서 공통으로 사용할 수 있는 모듈을 의미하며 날짜 처리를 위한ㅏ 유틸리티 모듈 등이 해당됨

컴파일(Compile)
프로그래밍 언어로 쓰여 있는 원시 코드(Source Code)를 다른 프로그래밍 언어의 목적 코드(Object Code)로 옮기는 기법


 

2. 공통 모듈 원칙

암기 방법 : 정명 완일추
정확성/ 명확성/ 완전성/ 일관성/ 추적성

 

3. 모듈화

1) 모듈화(Modularity) 개념

  • 모듈화는 프로그램이 효율적으로 관리될 수 있도록 시스템을 분해하고 추상화함으로써 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 쉽게 하는 기법
  • 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법

2) 모듈화의 필요성

  • 모듈의 크기가 너무 작아 모듈 개수가 많아지면 모듈간 통합 비용이 많이 발생
  • 모듈의 크기가 너무 크면 모듈 간의 통합 비용이 줄어드는 대신 모듈 당 개발 비용이 커짐모듈의 수가 증가하면 상대적으로 각 모듈의 크기가 작아지고, 모듈 사이의 상호 교류가 증가하여 과부하(Overload) 현상이 나타남

3) 바람직한 모듈 설계 방안 🎃

  • 모듈의 독립성과 재사용성을 높이기 위해 결합도는 낮추고 응집도는 높인다.
  • 모듈의 복잡도와 중복성을 줄이고 일관성을 유지한다.
  • 모듈의 기능은 예측이 가능해야 하며, 지나치게 제한적이어서는 안 된다.
  • 적당한 모듈의 크기를 유지한다.
  • 모듈 간의 효과적인 제어를 위해 설계에서 계층저 자료 조직이 제시되어야 한다.
  • 유지보수가 용이하고 이식성을 고려해야 한다.

 

4. 모듈화 측정 지표 🎃

  • 모듈화의 적정성을 측정하는 지표는 응집도와 결합도이다.
  • 좋은 모듈화 : 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화하는 것
  • 개별 모듈은 독립적으로 주어진 역할 만을 수행하며, 타 모듈에 의존성이 높지 않아야 함

5. 모듈화 유형

1) 응집도

응집도의 개념

  • 모듈의 독립성을 나타내는 개념. 모듈 내부 구성요소 간 연관 정도
  • 정보 은님 개념의 확장 개념으로, 하나의 도듈은 하나의 기능을 수행하는 것을 의미

응집도의 유형 💥💥💥

  • 응집도의 유형은 우연적 < 논리적 < 시간적 < 절차적 < 통신적 < 순차적 < 기능적 응집도 순서로 응집도가 높아짐

 

 

 

 

  • 낮은 응집도 : 하나의 모듈 내부에 다양한 기능을 구현하여 독립성이 낮아짐
  • 높은 응집도 : 단 하나의 기능만을 분리 구현하여 독립성이 보장되고, 변경이 쉬워 유지보수에 편리

암기 방법 : 우논시절 통순기
우연적/ 논리적/ 시간적/ 절차적/ 통신적/ 순차적/ 기능적 응집도


 

2) 결합도

결합도(Coupling)의 개념

  • 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호 의존성을 나타내는 정도
  • 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도

결합도의 유형

결합도의 유형은 내용 > 공통 > 외부 > 제어 > 스탬프 > 자료 순으로 결합도가 낮아짐

암기 방법 : 내공 외제 스자
내용/ 공통/ 외부/ 제어/ 스탬프/ 자료 결합도
-> 내부공사는 외제를 쓰자!

용어 정리하기

전역변수(Global variable)

어떤 변수 영역 내에서도 접근할 수 있는 변수

 
 
 
 

6. 팬인(Fan-in) 및 팬아웃(Fan-out)

1) 팬인 및 팬 아웃의 개념

  • 팬인 : 어떤 모듈을 제어하는 모듈의 수
  • 팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수

2) 팬인 몇 팬아웃 특징

  • 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해서 팬인, 팬아웃을 활용
  • 시스템 복잡도를 최적화하기 위해서는 팬인은 높게 팬아웃은 낮게 설계해야 함
 

3) 팬인 및 팬아웃 계산 방법



 

오늘의 학습을 마치고

분량이 많아서 여기서 끝고 다음 포스트에서 이어서 설계 모델링에 대해서 학습해본다. 사실 문제를 풀 때도 개념이 잡히지 않아 이해가 잘 되지 않았는데 오늘 글로 써보면서 뭔가 이해가 되는 걸 느꼈다.
앞으로도 이런 식의 공부를 이어가려고 한다. 게으르게 공부하면 머릿속에 들어지도 하고 시간만 떼우게 된다.

공부는 손과 머리가 함께 움직여야 가장 효율적으로 할 수 있음을 기억하자!