함수의 기초
선수학습(1개)
요약
함수의 정의, 선언, 호출 방법을 알아봅니다. 매개변수와 반환값, void 함수 등 정보처리기사 실기 코딩 문제의 기초가 되는 함수 개념을 C언어, Java, Python으로 비교하며 정리합니다.
함수 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 함수 정의 | 함수의 동작을 작성하는 것 | int gamja(int a, int b) { return a + b; } |
| 함수 호출 | 정의된 함수를 실행하는 것 | gamja(3, 5) |
| 매개변수 | 함수가 외부에서 받는 값 | int a, int b |
| 반환값 | 함수가 호출한 곳에 돌려주는 값 | return a + b; |
| void 함수 | 반환값이 없는 함수 | void print() { ... } |
함수 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 메서드 정의 | 메서드의 동작을 작성하는 것 | static int gamja(int a, int b) { return a + b; } |
| 메서드 호출 | 정의된 메서드를 실행하는 것 | gamja(3, 5) |
| 매개변수 | 메서드가 외부에서 받는 값 | int a, int b |
| 반환값 | 메서드가 호출한 곳에 돌려주는 값 | return a + b; |
| void 메서드 | 반환값이 없는 메서드 | static void print() { ... } |
함수 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 함수 정의 | def 키워드로 함수를 정의 | def gamja(a, b): return a + b |
| 함수 호출 | 정의된 함수를 실행하는 것 | gamja(3, 5) |
| 매개변수 | 함수가 외부에서 받는 값 | a, b |
| 반환값 | 함수가 호출한 곳에 돌려주는 값 | return a + b |
| 반환값 없는 함수 | return이 없으면 None 반환 | def greet(): print("hi") |
함수란? 쌩기초
함수는 특정 작업을 수행하는 코드 묶음입니다. 한 번 정의해두면 필요할 때마다 호출하여 사용할 수 있습니다.
C언어의 함수는 크게 두 종류입니다.
| 종류 | 설명 | 예시 |
|---|---|---|
| main 함수 | 프로그램의 시작점. 모든 C 프로그램에 반드시 하나 있어야 함 | int main() { ... } |
| 사용자 정의 함수 | 개발자가 직접 만든 함수. main에서 호출하여 사용 | int gamja(int a, int b) { ... } |
프로그램은 항상 main 함수에서 시작합니다. main 안에서 사용자 정의 함수를 호출하는 구조입니다.
gamja(3, 5)를 호출하면 main과 gamja 두 함수의 메모리 공간이 동시에 존재합니다.

gamja 함수가 return a + b;로 8을 반환하면, gamja의 메모리 공간은 사라지고 반환값이 result에 저장됩니다.

Java에서는 함수를 메서드(Method) 라고 부릅니다. 모든 메서드는 클래스 안에 작성해야 합니다.
| 종류 | 설명 | 예시 |
|---|---|---|
| main 메서드 | 프로그램의 시작점 | public static void main(String[] args) { ... } |
| 사용자 정의 메서드 | 개발자가 직접 만든 메서드 | static int gamja(int a, int b) { ... } |
프로그램은 항상 main 메서드에서 시작합니다. main 안에서 다른 메서드를 호출하는 구조입니다.
Python에서는 def 키워드로 함수를 정의합니다. C/Java와 달리 main 함수가 필수가 아닙니다. 코드는 위에서 아래로 실행됩니다.
함수를 정의한 뒤 아래에서 호출하면 됩니다.
함수 정의 쌩기초
함수를 정의할 때는 함수명, 매개변수, 함수 본문, 반환값을 작성합니다.
| 구성 요소 | 의미 | 예시에서 |
|---|---|---|
| 반환형 | 함수가 돌려주는 값의 자료형 | int |
| 함수명 | 함수의 이름 | gamja |
| 매개변수 | 함수가 받는 입력값 | int a, int b |
| 함수 본문 | 함수가 수행하는 코드 | return a + b; |
반환형은 어떻게 정하나?
return으로 돌려주는 값의 자료형을 함수명 앞에 적습니다.
위 예시에서 a + b는 int + int이므로 결과도 정수(int)입니다. 정수를 반환하니까 함수명 앞에 반환형을 int라고 명시합니다.
avg 함수에서 2.0은 실수(double)입니다. 정수와 실수를 함께 연산하면 결과가 실수가 되므로 반환형을 double로 지정합니다. 자세한 내용은 정수 나눗셈 vs 실수 나눗셈을 참고하세요. printf가 처음이라면 printf() - 서식 지정 출력을 먼저 읽어보세요.
| 반환형 | 의미 | return문 |
|---|---|---|
int | 정수를 반환 | return 정수값; |
double | 실수를 반환 | return 실수값; |
char | 문자를 반환 | return 문자; |
void | 반환값 없음 | return; 또는 생략 |
| 구성 요소 | 의미 | 예시에서 |
|---|---|---|
| 반환형 | 메서드가 돌려주는 값의 자료형 | int |
| 메서드명 | 메서드의 이름 | gamja |
| 매개변수 | 메서드가 받는 입력값 | int a, int b |
| 메서드 본문 | 메서드가 수행하는 코드 | return a + b; |
반환형은 어떻게 정하나?
return으로 돌려주는 값의 자료형을 메서드명 앞에 적습니다. C언어와 동일한 방식입니다.
| 반환형 | 의미 | return문 |
|---|---|---|
int | 정수를 반환 | return 정수값; |
double | 실수를 반환 | return 실수값; |
char | 문자를 반환 | return 문자; |
String | 문자열을 반환 | return 문자열; |
void | 반환값 없음 | return; 또는 생략 |
| 구성 요소 | 의미 | 예시에서 |
|---|---|---|
def | 함수를 정의하는 키워드 | def |
| 함수명 | 함수의 이름 | gamja |
| 매개변수 | 함수가 받는 입력값 | a, b |
| 함수 본문 | 함수가 수행하는 코드 (들여쓰기로 구분) | return a + b |
Python은 반환형을 적지 않습니다
C/Java와 달리 Python은 함수명 앞에 반환형을 적지 않습니다. 어떤 자료형이든 자유롭게 반환할 수 있습니다.
함수 호출 쌩기초
함수를 호출하면 프로그램의 실행 흐름이 해당 함수로 이동합니다. 함수가 끝나면 호출한 위치로 돌아옵니다.
실행 흐름

실행 흐름
실행 흐름
매개변수와 반환값 쌩기초
매개변수 (Parameter)
매개변수는 함수가 외부에서 값을 받기 위한 변수입니다. 함수를 호출할 때 전달한 인자 값이 매개변수에 복사됩니다.
multiply(4, 7)을 호출하면 인자 4와 7이 매개변수 x, y에 복사됩니다.

매개변수가 없는 함수도 있습니다.
반환값 (Return Value)
return문은 함수의 실행 결과를 호출한 곳에 돌려줍니다. return이 실행되면 함수는 즉시 종료됩니다.
반환된 값은 호출한 자리에 그대로 들어갑니다.
반환된 값은 호출한 자리에 그대로 들어갑니다.
반환된 값은 호출한 자리에 그대로 들어갑니다.
return 이후의 코드는 실행되지 않습니다
return이 실행되면 함수가 즉시 종료되므로, 그 아래의 코드는 무시됩니다.
if문 안에서도 마찬가지입니다. return이 실행되면 함수 자체가 종료되므로, return 아래 코드는 물론이고 if문 밖의 코드도 실행되지 않습니다.
func(5)를 호출하면 n > 0이 참이므로 if 블록에 진입합니다. n = 5 + 10 = 15가 되고, return 15로 함수가 즉시 종료됩니다. 그 아래 코드는 전부 무시됩니다.
| 해석 | n의 변화 | 출력 |
|---|---|---|
| return 아래도 실행된다고 착각 | 5 → 15 → 115 → 1115 | 1115 |
| 정답: return에서 즉시 종료 | 5 → 15 → return | 15 |
출력: 15
반환값이 없는 함수 쌩기초
void 함수는 반환값이 없는 함수입니다. 값을 돌려주지 않고, 출력이나 값 변경 같은 동작만 수행합니다.
| 반환형 | return문 | 함수 호출 결과 |
|---|---|---|
int, char 등 | return 값; 필요 | 값을 반환 |
void | return; 또는 생략 | 값 없음 |
void 함수에서 return;을 쓰면 함수를 중간에 종료할 수 있습니다.
void 메서드는 반환값이 없는 메서드입니다. 값을 돌려주지 않고, 출력이나 값 변경 같은 동작만 수행합니다.
| 반환형 | return문 | 메서드 호출 결과 |
|---|---|---|
int, String 등 | return 값; 필요 | 값을 반환 |
void | return; 또는 생략 | 값 없음 |
void 메서드에서 return;을 쓰면 메서드를 중간에 종료할 수 있습니다.
Python에서는 return이 없거나 return만 단독으로 쓰면 None을 반환합니다. C/Java의 void에 해당합니다.
| 상황 | return문 | 반환값 |
|---|---|---|
| 값을 반환 | return 값 | 해당 값 |
| return만 단독 사용 | return | None |
| return 없음 | (생략) | None |
return만 쓰면 함수를 중간에 종료할 수 있습니다.
함수 풀이 순서 쌩기초
시험에서 함수가 포함된 코드를 분석할 때는 다음 순서를 따릅니다.
- main 함수부터 읽기: 프로그램은 항상
main에서 시작합니다 - 함수 호출을 만나면 이동: 호출된 함수의 정의로 이동합니다
- 인자값을 매개변수에 대입: 실제 전달된 값을 매개변수에 넣고 분석합니다
- return값을 호출 위치에 대입: 반환값을 호출한 자리에 넣고 계속 읽습니다
예제
풀이 과정:
main시작 →a = 3square(a)호출 →square(3)→ 매개변수n = 3n * n= 3 * 3 = 9 반환b = 9a + b= 3 + 9 = 12
출력: 12
- main 메서드부터 읽기: 프로그램은 항상
main에서 시작합니다 - 메서드 호출을 만나면 이동: 호출된 메서드의 정의로 이동합니다
- 인자값을 매개변수에 대입: 실제 전달된 값을 매개변수에 넣고 분석합니다
- return값을 호출 위치에 대입: 반환값을 호출한 자리에 넣고 계속 읽습니다
예제
풀이 과정:
main시작 →a = 3square(a)호출 →square(3)→ 매개변수n = 3n * n= 3 * 3 = 9 반환b = 9a + b= 3 + 9 = 12
출력: 12
- 코드를 위에서 아래로 읽기: 함수 정의는 건너뛰고 호출 코드부터 봅니다
- 함수 호출을 만나면 이동: 호출된 함수의 정의로 이동합니다
- 인자값을 매개변수에 대입: 실제 전달된 값을 매개변수에 넣고 분석합니다
- return값을 호출 위치에 대입: 반환값을 호출한 자리에 넣고 계속 읽습니다
예제
풀이 과정:
a = 3square(a)호출 →square(3)→ 매개변수n = 3n * n= 3 * 3 = 9 반환b = 9a + b= 3 + 9 = 12
출력: 12
다음 학습
함수의 기초를 익혔다면, 다음 개념들을 학습할 수 있습니다.
- 함수 프로토타입 - 함수를 미리 선언하는 방법
- 매개변수 전달 방식 (Call by Value) - 함수에 값을 전달할 때 원본이 바뀌는지 여부
- 재귀함수 - 함수가 자기 자신을 호출하는 구조
- static 변수 - 함수 호출 간에 값이 유지되는 변수
- 변수의 유효 범위 - 변수가 어디서 접근 가능한지
- 매개변수 전달 방식 (Call by Value) - 메서드에 값을 전달할 때 원본이 바뀌는지 여부
- 오버로딩 - 같은 이름의 메서드를 매개변수를 다르게 하여 여러 개 정의
- static - static 키워드의 의미와 활용
- 변수의 유효 범위 - 변수가 어디서 접근 가능한지
- Python 함수 심화 (lambda, map, type) - 기본 매개변수, lambda 표현식, map 함수
- 매개변수 전달 방식 (Call by Value) - 함수에 값을 전달할 때 원본이 바뀌는지 여부
- 변수의 유효 범위 - 변수가 어디서 접근 가능한지