하나의 특정 작업을 수행하도록 독립적으로 설계된 프로그램 코드의 단위
C언어 (절차지향 언어)는 함수를 건축물 벽돌처럼 사용
만들어진 함수를 쉽게 재사용(re-use) 가능
입력 / 출력만 알면 내부는 블랙박스처럼 모르고 사용 가능
*함수의 필요성
반복 작업 용이
함수를 이용하여 작성하면 여러 번 반복 사용이 용이
재사용성(reusability) 용이
printf(), scanf() 함수를 쉽게 여러 번 사용이 가능함
C언어에서 다양한 함수를 제공
가독성(readability) 증대
함수는 입력과 출력으로 동작하는 일종의 블랙박스와 같이 동작
각 함수의 세부 내용을 이해할 필요 없음
함수를 이용하면 소프트웨어의 흐름을 이해하기 용이함
*함수 선언
함수도 변수처럼 데이터 타입 정보를 포함하고 있음
함수를 사용하기 전에 컴파일러에게 어떤 데이터 타입을 사용하는지 알림
stdio.h 파일 내에 printf(), scanf()의 함수 선언이 포함되어 있음
printf(), scanf() 사용전에 #include <stdio.h> 추가해야 함
*함수 정의
함수가 실행되는 경우 동작하는 코드 작성
*함수 호출
정의한 함수를 실제 호출하여 사용함
*함수의 인자 전달
함수 호출 시 전달인자가 호출된 함수로 복사됨
호출된 함수내에 새로운 변수(저장 공간)이 만들어지고 값만 복사됨
*함수 호출 시 변수 저장
스택 (Stack) 메모리
함수 별 저장 공간을 제공하기 위해 사용하는 데이터 구조
아래에서 위 방향으로 커지며, 후입선출 (last in – first out) 방식으로 동작
함수가 종료되면 해당 메모리 공간은 제거됨
새로운 함수가 호출되면 스택에 전용 공간을 할당함
*함수 호출 시 값 전달 방법
값에 의한 호출 (call-by-value)
인자의 값이 호출한 함수의 Local 변수로 복사하여 사용
인자의 데이터 사이즈가 큰 경우 복사 오버헤드 큼 (메모리, 복사 시간)
복사본을 사용하기 때문에 동일한 변수를 여러 함수에서 접근해 발생하는 문제 방지 가능
참조에 의한 호출(call-by-reference)
인자의 주소 값을 호출한 함수의 Local 변수로 복사하여 사용
주소 정보를 이용하여 원본에 직접 접근 가능
구조체, 배열 등 큰 데이터 타입을 매개변수로 활용하는 경우 사용
기본 데이터 타입의 값을 호출한 함수 내에서 변경할 때 사용
포인터 reference
참조 reference
*재귀함수
순환(recursion) 함수
함수 수행 도중 자기 자신 다시 호출하여 문제를 해결하는 기법
재귀함수 (Recursion Function) 이라고도 부름
순환 함수가 종료하는 조건이 반드시 필요함
종료 조건이 없거나 잘못되는 경우 메모리 오버플로우 발생
재귀호출출(recursive call)
함수 안에서 함수 자기자신을 호출하는 방식
일반적으로 이해가 어렵고, 오류 발생 가능성이 높아 사용 X
댓글 없음:
댓글 쓰기