#3. Top-down Design
하향식 설계 (top-down design) 는 문제가 주어졌을때 넓은 시야에서의 답으로부터 좁은 시야로 줄여나가며 문제를 해결하는 방식이다. 문제 해결의 틀을 잡아놓고 구체적인 방법을 찾아나가는 것이다.
그림을 그린다고 생각하면 쉽다. 구도를 먼저 잡고 디테일을 살려나가는 것이다. ( 아닐 때도 있지만... ) 인물화를 그리면서 발가락, 코, 팔꿈치를 그리고서 바디 라인을 연결하는 사람은 없다.
신문 배달을 예시로 하향식 설계를 설명하고자 한다.
상황 1: 신문 배달 시작
상황 2: 신문 배달 완료
상황 3: 복귀 완료
사진의 상황에 비춰볼 때 hubo는 아래와 같이 움직일 것이다. ( 본인이 신문 배달을 한다고 생각해보자 )
[ideation]
1: 출발
1->2: 4 계단을 올라간다.
2: 신문을 내려놓고 뒤로 돈다.
2->3: 4 계단을 내려온다.
3: 도착
[python code]
climb_up_4_stairs()
deliver_newspaper()
walkdown_4_stairs()
hubo가 가진 기본 명령어들에는 [4계단을 올라가라]는 식의 복잡한 명령어는 없다. 더 풀어쓸 필요가 있다. 따라서 아래와 같이 [1계단을 올라간다]라는 명령어를 4번 실행하는 방식을 생각해볼 수 있다.
[ideation]
1->2: 4계단을 올라간다.
1: 1 계단을 올라간다.
2: 1 계단을 올라간다.
3: 1 계단을 올라간다.
4: 1 계단을 올라간다.
[python code]
def climb_up_4_stairs():
for i in range(4):
climb_up_a_stair()
안타깝게도 [1 계단을 올라가라]는 명령어도 없다. 아직 복잡하다. 아래와 같이 더 풀어써보자. 1 계단을 오르는 행동을 5 단계로 나눌 수 있다.
[ideation]
1->2: 4계단을 올라간다.
1: 1 계단을 올라간다.
1: 앞으로 한 칸 이동한다.
2: 왼쪽으로 90도 돈다.
3: 앞으로 한 칸 이동한다.
4: 오른쪽으로 90도 돈다.
5: 앞으로 한 칸 이동한다.
[python code]
def climb_up_a_stair():
hubo.move()
hubo.turn_left()
hubo.move()
turn_right()
hubo.move()
위 5단계로 전개된 명령어들은 hubo가 알아들을 수 있는 기본 명령어로 제공된다. ( 하나만 빼고... )
이로써 4계단을 오르는 문제를 해결할 수 있다.
( 단계4에 있는 오른쪽으로 도는 명령어는 없지만, 연습 문제로 남겨둔다. )나머지 신문 배달 과정을 top-down으로 쪼개가는 과정은 생략한다.무튼 위와 같이 문제 해결의 틀 (top) 을 잡은 뒤에 해결 가능한 단계의 작은 문제 (down) 로 쪼개가는 과정을 하향식 설계라고 부른다. 만물의 진리를 깨우치는 공부와 같이 이론으로부터 쌓아올리는 방식이 아닌 큰 틀을 잡아놓고 점점 줄여나가며 문제를 해결하는 것이다. 이 설계 방식은 프로그래밍 과정에서, 소프트웨어 기능 단계를 디자인할 때 매우 유용하다. Computational Thinking 에서 이 Top-down design이 매우 중요하다.