본문 바로가기

자격증/정보처리기사 3과목

3-2강. 서버프로그램 구현-공통 모듈 구현

[ 목차 ]

1. 공통 모듈

2. 재사용

3. 코드 재사용

4. 재사용 프로그래밍 기법

5. 재사용의 유형

6. 재사용 사례

1. 공통 모듈

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

2) 정보 시스템 구축 시 자주 사용하는 기능들로서 재사용이 가능하게 패키지로 제공하는 독립된 모듈

3) 공통 기술, 모바일 공통 기술, 요소 기술이 있으며 기 외 세부 분류가 더 존재

 

2. 재사용

1) 기존의 SW 또는 소프트웨어 지식을 활용해 새로운 SW를 구축하는 일

2) 개발 시간, 비용 절감을 위해 이미 검증된 기능을 파악, 재구성하여 시스템에 응용하기위해 적합하게 최적화하는 작업

3) 재사용 자산은 코드, 설계, 요구명세, 검사, 아키텍처 등이 포함

4) 라이브러리는 추상화(전체적이고 포괄적 개념을 설계한 후 세분화, 구체화 시켜나가는 방법)의 좋은 예

5) 소프트웨어를 보다 재사용하기 쉽게 하는 특성을 모듈성, 저결합도, 고응집도, 캡슐화, 관심의 분리 등으로 지칭

6) 기존 코드로 새 코드를 만들 때 하등의 인터페이스 혹은 액세스 수단이 정의되어 있어야 하며, 이는 서브루틴 호출, 오브젝트, 클래스, 프로토 타입이 포함되는 것이 일반적

관심의 분리
1) 프로그램을 기능 면에서 가능한 중복이 아닌 여러 모듈로 명확히 나누는 것
2) 관심 = 프로그램의 기능, 행동, 목적
3) 큰 문제를 작은 부분제로 분할하면 해결이 용이
4) 모든 프로그래밍 패러다임의 지향점

서브루틴 = 부프로그램
1) 반복되는 부분을 호출하는 것

3. 코드 재사용

1) 가장 잘 알려져 있는 재사용 가능 자산

2) 프로그램의 일부 또는 전부를 이후의 다른 프로그램을 만들 때 사용하는 것

3) 장황한 작업에 소비하는 시간과 에너지를 절약 가능

4) 어떤 프로그램의 이전 버전을 출발점으로 하여 다음의 버전을 개발하는 작업 역시 코드 재사용의 일종

5) 복사, 붙여넣기를 많이 한 코드 재사용은 중복 문재 유발

 

4. 재사용 프로그래밍 기법

1) 재사용을 빠르고 용이하게 하기 위한 프로그래밍 정식 절차의 일부

2) 객체 지향 프로그래밍

  1] 객체 단위로 재사용이 이루어지도록 설계

3) 제네릭 프로그래밍

  1] 데이터 형식에 의존하지 않고 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점

4) 자동 프로그래밍

  1] 프로그램이 사용자가 설정한 일련의 변수에 근거해 어떤 종류의 프로그램을 생성하는 것

5) 메타 프로그래밍

  1] 프로그램을 데이터로 다루는 것으로, 자기 자신 혹은 다른 컴퓨터 프로그램을 데이터로 처리하는 것

 

5. 재사용의 유형

1) 편의적 재사용

  1] 프로젝트를 시작할 때 재사용 가능한 컴포넌트가 있는지 탐색 후 재사용

  2] 그때의 상황에 따라 편하고 알맞는 것을 임시로 채택

  3] 내부 재사용 : 팀내에서 만든 컴포넌트를 재사용하는 것으로, 계획적인 것이 아니기에 인터페이스 등의 추가 조정 비용 발생

  4] 외부 재사용 : 서드파티에서 만든 컴포넌트를 구하여 사용하는 것으로, 학습 활용 시간 고려해야 함

2) 계획적 재사용

  1] 컴포넌트를 차후에 재사용가능하도록 전략적으로 설계 

서드파티 : 프로그래밍을 도와주는 플러그인이나 라이버리 등을 만드는 회사

6. 재사용 사례

1) 소프트웨어 라이브러리

  1] 코드 재사용의 매우 일반적인 예로, 라이브러리를 사용하는 것

  2] 각종 형식으로 정보의 변환, 외부기억장치 액세스, 외부 프로그램과의 인터페이스, 정보의 조작

  3] 라이브러리의 코드를 사용

  4] 차바퀴의 재발명과 같은 발생 X

  5] 세부사항을 조절할 수 없고 라이브러리 취득, 학습, 설정에 시간과 비용이 드는 단점이 존재

차바퀴의 재발명 
1) 라이브러리와 선행사례가 있음에도 여러 가지 이유로 그것을 이용하지 않고 코드나 프로그래밍 기법을 다시 처음부터 만드는 일로, 별 이득이 없음에도 새로 만드는 것을 비꼬는 말

2) 디자인패턴

  1] 비슷한 문제를 풀기 위한 범용적 해법

3) 프레임워크

  1] 개발자는 타사 응용 프로그램 및 프레임 워크를 통해 많은 소프트웨어를 재사용

  2] 도메인마다 다르고 응용 프로그램 그룹에 적용 가능

 

7. 모듈

1) 프로그램 구성 요소의 일부로, 관련된 데이터와 함수들이 묶여서 모듈을 형성

2) 주로 파일 단위로 구성

 

8. 모듈화의 원리

1) 분할과 지배 Divide conquer : 복잡한 문제를 분해, 모듈 단위로 문제 해결

2) 정보 은폐 information hiding : 어렵거나 변경 가능성이 있는 모듈을 타모듈로부터 은폐

3) 자료 추상화 data abstraction : 함수내에 자료 구조의 표현 내역을 은폐, 자료와 자료에 적용 가능한 오퍼레이션을 함께 정의

4) 모듈의 독립성 module independence : 낮은 결합도, 높은 응집도 보유

추상화
1) 복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화하는 기법
2) 기능 추상화 : 입력 자료를 출력 자료로 변환
3) 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의
4) 제어 추상화 : 외부 이벤트에 대한 반응을 추상화

9. 모듈화 측정 척도

1) 공통모듈의 구현을 위해 재사용성 강화를 위한 중요한 개념

2) 모듈은 내부 처리 요소간의 독립성을 나타내며 응집도가 높을수록 좋고 모듈간의 연관성을 루즐리커플(약결합)로 구현할 수 있는 결합도가 낮을수록 좋음

3) 응집도 : 모듈의 독립성

4) 결합도 : 모듈간 연관성, 상호의존성

 

10. 모듈화의 종류

1) 설계측면

  1] 모듈 : 설계 시 관련 있는 기능모아 한 부분에 모아놓고 라이브러리 형태로 사용

  2] 컴포넌트 : 바이너리형태재사용 가능한 형태로 인터페이스에 의해 로직을 수행

  3] 서비스 : 기존 컴포넌트 보다는 약결합한 형태의 기능을 제공

바이너리
1) 0과 1이라는 2진수 데이터로만 이뤄진 파일로 사람이 직접 읽을 수 없음

컴포넌트
1) 코드의 물리적 구조를 표현
2) 독립적인 서비스를 제공하는 소프트웨어 모듈
3) 바이너리 파일 형태의 재사용
4) 물리적 측면의 재사용
5) 모든 접근이 인터페이스를 통해 수행
6) 개발보다 조립에 초점

2) 구현측면

  1] 매크로 : 반복되는 부분에 이름을 부여하여 호출하여 실행할 수 있는 기법으로, 매크로가 사용된 모든 곳에 코드를 대체 / 정의 인식 -> 정의 저장 -> 호출 인식 -> 호출 확장 / 부프로그램과 달리 매크로 내용이 삽입되어 메모리절약, 실행이 빠름

  2] 함수 : 특정한 작업 수행하는 부분 프로그램으로, 결과값 반환 가능

  3] 인라인 : 매크로와 동일하지만 컴파일러가 인라인이 사용된 모든 곳에 코드를 복사해서 빠른 실행 가능

 

11. 결합도

1) 외부의 모듈과의 연관도

2) 서로 다른 기능을 수행

3) 인터페이스 복잡성에 의존적

4) 낮은 결합도가 복잡도를 감소

5) 에러 발생 시 오류가 전파되어 다른 오류의 원인이 되는 리플효과를 최소화

 

12. 강결합과 약결합

1) 강결합을 약결합으로 만드려면 인터페이스 진행

 

13. 응집도 cohesion

1) 정보은닉 개념의 확장개념

2) 하나의 모듈은 하나의 기능을 수행하는 집적성을 지칭

3) 모듈의 독립성을 나타내는 개념으로 모듈 내부 구성원간의 연관도

4) 클래스 목적에 부합하는 같인 기능영역의 함수들로 구성

5) 함수의 개수가 적으며 오로지 자신만이 할 수 있는 책임을 부여

6) 하나의 함수에 많은 기능을 부여하지 않고 다른 함수와 협력

 

14. 응집도 단계

1) 우연적 - 논리적 - 시간적 - 절차적 - 통신적 - 순차적 - 기능적

2) 응집도 높을수록 좋음

3) 모듈 내부 독립성 보장을 위해 단 하나의 기능만을 구현하는 것

 

15. 낮은 응집도

1) 하나의 모듈 내부에 다양한 기능을 구현해 독립성이 낮아짐

2) 단 하나의 기능만을 분리 구현해서 독립성이 보장되며 변경 시 쉬운 유지 보수성 수행이 가능은 높은 응집도로 수정