1.일상생활에서의 작업 세분화
작업 세분화는 주변에서 흔히 사용된다.
건설 공사를 하는 경우, 어느 구역에 어떤 건물을 어떻게 지을지 계획하고, 각 층별로 어떻게 쌓을지 나눠 건설을 준비한다. 이렇게 '소형 아파트 단지를 짓자'라고 단순히 표현된 문장을 'A구역에는 101동을 30층 높이로 48평수로 짓고, B구역에서는 102동을 32층 높이로 48.5평수로 짓고, C구역에는 주민 휴식 공간을 건설하되 나무를 총 20그루 심고, 꽃은 민들레와 튤립으로 하며, 땅은 시멘트는 쓰지 말자'라는 식으로 세분화 하는 것이다.
일상 속에서 방청소를 하는 경우를 생각해보자.
'방청소 하기'라는 목적을 '창문 열기-침대 위의 물건을 치우고, 이부자리를 정리하기-바닥에 떨어진 물건을 제자리에 놓기-벗어놓은 옷들은 옷장에 정리하거나 세탁기에 넣어두기-책상에 있는 책을 분류해서 꽂아두기-먼지 털기-청소기 돌리기-걸레질 하기'로 세분해 하나하나 차례대로 해나갈 수 있다.
이렇게 작업을 세분화하면 어떤 작업을 먼저 혹은 나중에 해야 할지와 같은 우선순위를 정할 수 있으며, 작업이 끝났을 때 잘못된 곳이 있다면 그 부분만 다시 작업할 수도 있다. 배정 인원이 많다면 작업을 나누어 할 수 있어 시간도 단축할 수 있다. 즉, 작업 세분화는 작업 결과의 정확도, 작업의 처리 시간, 작업의 사후 관리 등에 영향을 주게 된다.
2. 나누어 정복하기(분할 정복)
작업 세분화는 당연히 컴퓨터 프로그래밍에서도 쓰인다. 복잡한 문제를 한 번에 처리하려면 프로그램의 길이도 길어지고 코드도 복잡해진다. 이런 경우 문제를 다루기 쉽게 작은 부분들로 나누고, 나누어진 부분 부분의 문제를 해결한 후, 해당 문제들을 재조합해 원래의 문제를 해결하는 방법인 나누어 정복하기 혹은 분할 정복(divide & conquer)을 사용한다.
다시 말해 분할 정복(divide and conquer)은 재귀적으로 동일하거나 관련된 두 개 이상의 하위 문제로 분해하며, 이러한 문제들이 직접 해결될 수 있을 정도로 단순해질 때까지 계속 반복한 뒤 하위 문제의 해결책을 결합해 원래 문제에 대한 해결책을 제시하는 알고리즘 설계 패러다임이다.
이 기법은 정렬 알고리즘(퀵 정렬, 병합 정렬 등), 곱셈 알고리즘(카라추바 알고리즘 등), 최근접 점쌍 문제, 구문 분석(하향식 구문 분석 등), 이산 푸리에 변환(고속 푸리에 변환 등)과 같은 다양한 문제에 대한 효율적인 알고리즘의 기반이라고 할 수 있다. 여기서 퀵 정렬 알고리즘 그리고 병합 정렬 알고리즘과의 차이를 이해할 수 있는데, 분할 정복은 해당 정렬 알고리즘의 설계 패러다임이라고 할 수 있다.
프로그램에서 전체를 총괄하는 중심 뼈대가 되는 주프로그램(main program)을 메인 모듈(main module)이라고 하며, 작게 쪼개져 여러 번 반복 사용할 수 있는 부프로그램(subprogram)을 서브 모듈(sub module) 혹은 서브루틴(sub routine), 함수(procedure, function)라고 한다. 프로그램의 세세한 실행을 담당하는 서브 모듈은 메인 모듈에 의해 호출될 때만 실행된다.
한편, 메인 모듈과 서브 모듈은 매개변수를 이용해 데이터를 주고받을 수도 있다.
프로그램을 여러 개의 서브 모듈로 작성하는 가장 큰 이유는 각각의 모듈이 해야할 일이 간단명료해져 프로그램의 오류를 확 줄일 수 있기 때문이다. 혹시 오류가 나더라도 프로그램 전체를 다 훑을 필요 없이 오류가 난 서브 모듈만 확인하고 수정하면 되기 때문에 프로그램의 디버깅(debugging, 버그 찾기)이 쉬워진다. 또한 작성한 서브 모듈은 여러 번 재사용할 수 있으므로, 코드 작성과 프로그램 코드를 줄일 수 있다. 그러는 한편, 복수의 CPU를 가지는 멀티 프로세싱이 가능한 컴퓨터인 경우에는 여러 개의 서브 모듈을 동시에 실행시킬 수 있어서 작업 시간을 현저히 줄일 수도 있다.
'용어 정리, 이슈 > 과학&기술' 카테고리의 다른 글
GAIQ 자격증 - 애널리틱스 아카데미 수강신청 방법 (0) | 2022.07.13 |
---|---|
닌텐도의 버추얼 콘솔 (0) | 2022.07.09 |
정렬 : 크기 순서대로 나열하기 (0) | 2022.06.30 |
효율적 컴퓨팅 사고 : 자료에서 정보 찾기 (0) | 2022.06.29 |
애플이 하루 만에 삭제한 부자들만 살 수 있었던(?) 앱 (0) | 2022.06.20 |