3.1.1 문제를 나누어 해결하기

큰 문제를 작은 문제로 나눈다

우리는 큰 문제를 해결할 때 먼저 문제를 작은 문제로 나눈다. 문제를 나누어 다루는 것은 프로그래머가 아니더라도 누구에게나 좋은 전략이다. 예를 들어, 카페라테를 만드는 레시피(조리법)를 생각해 보자.

카페라테 레시피

A. 에스프레소 추출하기

  1. 분쇄된 커피 원두를 에스프레소 추출 기계에 넣는다.
  2. 기계에 컵을 받치고 추출 버튼을 누른다.

B. 우유 거품 만들기

  1. 냄비에 우유를 넣고 끓인다.
  2. 끓인 우유를 거품기로 거품이 충분히 날 때까지 젓는다.

C. 카페라테 만들기

  1. (A 과정에 따라) 에스프레소를 추출한다.
  2. (B 과정에 따라) 우유 거품을 만든다.
  3. 에스프레소에 우유를 붓고, 우유 거품을 올린다.

‘A. 에스프레소 추출하기’와 ‘B. 우유 거품 만들기’는 카페라테를 만드는 전체 과정의 부분 과정이다. 이렇게 부분 과정을 나누지 않고 전체 과정을 한꺼번에 나열해도 레시피를 쓸 수 있다. 하지만 의미상 구분되는 부분끼리 나누어 생각하면 작업의 의미와 과정을 파악하고 이해하기가 더 쉽다.

3.1.2 함수는 작은 문제를 해결하는 프로그램

카페라테 만드는 방법을 세부 과정으로 나누는 것처럼, 프로그래밍에서도 문제를 작게 나누어 각각의 작은 문제들을 해결하는 작은 프로그램들을 만들 수 있다. 이 작은 프로그램을 함수라고 한다. 각 기능을 구현한 함수를 모아 놓으면 하나의 전체 프로그램이 된다.

개념 정리

  • 크고 복잡한 문제는 작고 간단한 문제로 나누어 해결해야 한다.
  • 함수: 작은 문제를 해결하는 작은 프로그램

작은 프로그램이 이해하기 쉽다

프로그래밍에서 문제를 나누는 건 사람을 위한 것이다. 프로그램이 중간 과정의 구분 없이 한 덩어리로 쭉 나열되어 있더라도 컴퓨터는 아무 불평 없이 정확하게 수행할 수 있다. 하지만 그런 프로그램은 사람이 이해하기는 쉽지 않다. 사람은 한꺼번에 여러 가지를 기억하고 처리하지 못하기 때문이다. 그 때 그 때 필요한 데만 관심을 집중해야 헷갈리지 않는다. 그래서 작은 의미 단위로 나누어 작성된 프로그램이 더 이해하기 쉽다.

파이썬의 함수

파이썬에서 함수는 어떤 작업을 수행하는 코드를 모아 이름을 붙인 것이다. 변수를 이용해 데이터에 이름을 붙이는 것처럼, 함수를 이용해 프로그램 조각에 이름을 붙일 수 있다. 이렇게 코드를 묶어 이름을 붙이는 것을 함수 정의라고 한다.

대상에 이름을 붙여두면 이름만으로 그 대상을 부를 수 있다. 함수의 이름을 불러 함수 내용으로 정의된 코드를 실행시킬 수 있다. 이것을 함수 호출이라고 한다.

개념 정리

  • 함수 정의: 어떤 작업을 수행하는 코드를 모아 이름을 붙이는 것
  • 함수 호출: 함수의 이름을 불러 함수의 내용을 실행시키는 것