본문 바로가기
프로그래밍/c++

c++ 18. 함수 function

by 지나팩 2024. 2. 22.

함수는 특정 작업을 수행하는 코드들을 묶어놓은 코드 블록입니다.

함수는 코드의 재사용성을 높이고, 구조를 개선하여 가독성과 유지 보수성을 향상시킬 수 있습니다.

 

아래는 함수의 기본 구조입니다.

 

반환타입: 

함수가 실행 완료된 후 호출한 곳으로 반환하는 값의 데이터 타입입니다. 반환할 값이 없는 경우 void를 사용합니다.

 

함수이름: 

함수를 식별하는 데 사용되는 고유한 이름입니다.

 

매개변수 목록: 

함수가 작업을 수행하는 데 필요한 입력 값을 정의하는 부분입니다. 매개변수가 필요 없는 경우 비워둘 수 있습니다.

 

함수 본문: 

함수가 호출될 때 실행되는 코드 블록입니다.

 

반환문: 

함수가 결과값을 호출한 곳으로 반환하는 명령입니다. return 키워드를 사용합니다. void 타입일 경우 생략 가능.

 

 

우선 반환할 값과 매개변수가 없는 함수를 알아봅시다.

 

위 예제는 반환할 값과 매개변수가 없는 함수를 선언 및 구현한 것입니다. 함수를 사용하는 걸 호출(call)한다고 표현합니다. void 키워드는 반환할 값이 없는 경우 사용합니다. 함수 내 연산에 따른 결과값을 외부로 줄 필요가 없는 경우 void 타입을 사용하면 됩니다. 여기서 주의해야 할 점은 만약 함수를 Main 함수 아래에 작성하게 된다면 컴파일 시 Main함수가 먼저 연산되기에 작성한 Hello 함수를 알 수 없는 상황이 발생합니다.

 

이럴 경우 함수 원형을 Main함수 위에 선언함으로써 컴파일 시 해당 함수가 있다는 걸 알려줍니다.

 

물론 선언과 구현을 동시에 해도 되지만 위처럼 함수 원형과 구현부분을 따로 작성하는 이유는 함수의 구현을 프로그램의 다른 부분과 분리할 수 있습니다. 이를 통해 코드의 가독성과 유지보수성이 향상됩니다. 이외에도 더 많은 이유들이 있지만따로 알아보도록 하겠습니다.

 

 

이번엔 반환할 값은 여전히 없지만 매개변수가 있는 함수를 작성해보겠습니다.

 

위 예제는  string 타입의 매개변수가 포함된 Hello 함수입니다. 매개변수가 있는 함수를 호출할 경우 매개변수에 해당하는 같은 타입의 값을 반드시 제공해야합니다. 위 코드에서 보듯 ()괄호안에 매개변수와 같은 문자열 타입이 포함되어 Hello함수를 호출하는 걸 볼 수 있습니다. Hello("안녕하세요"); 하게되면 "안녕하세요"라는 문자열 값이 매개변수 str에 대입됩니다. str = "안녕하세요" 라고 한 것과 같습니다. 그래서 함수 내부의 str 값을 출력하면 매개변수로 제공한 값들이 출력되는 걸 볼 수 있습니다.

 

만약 매개변수를 제공하지 않는다면 에러가 발생합니다. 

 

 

더불어 매개변수는 여러개 포함할 수 있습니다.

위 예제는 두 개의 정수형 매개변수를 받아서 그 두 값을 더한 결과를 출력하는 함수를 작성한 것 입니다. 값을 직접적으로 넣어서 호출할 수도 있지만, 값을 대입한 변수를 함수의 매개변수에 전달할 수도 있습니다.

 

 

마지막으로 반환할 값이 있는 함수를 알아보겠습니다.

 

위 예제는 int 정수형 타입을 반환하고 int 정수형 매개변수 두 개를 받는 함수입니다. 예제에서 보듯 변수 a에 Add 함수의 연산 결과를 대입하는 걸 볼 수 있습니다. 당연히 출력도 가능합니다. return 키워드를 통해서 명시한 반환 타입에 해당하는 값을 반드시 반환해야합니다. 당연히 반환타입이 string 이라면 string을 반환해야합니다.

 

 

위 처럼 함수를 활용하게 되면 여러 이점을 누릴 수 있습니다.

  • 코드의 재사용성을 높이고 싶을 때
  • 복잡한 문제를 작은 단위로 나누어 해결하고자 할 때
  • 코드의 가독성과 구조를 개선하고자 할 때

함수를 사용하면 프로그램의 각 부분을 독립적으로 작성하고 테스트할 수 있으며, 전체적인 프로그램의 이해와 수정이 용이해집니다. 그렇다고 모든 코드를 함수로 만드는 것도 정답은 아닙니다. 재사용 빈도가 낮거나 아주 짧은 내용이라면 함수로 만드는 것이 오히려 독이 될 수도 있습니다. 본인이 작성하고 있는 프로그램에 맞게 사용하시면 됩니다. 

 

함수에 따른 더 많은 내용은 다음 포스트에서 다루도록 하겠습니다.

'프로그래밍 > c++' 카테고리의 다른 글

c++ 20. 배열 Array  (0) 2024.03.13
c++ 19. 함수 오버로딩  (0) 2024.02.23
c++ 17. 중첩 반복문  (0) 2024.02.19
c++ 16. 조건문 중첩  (0) 2024.02.02
c++ 15. while 반복문  (2) 2024.01.30

댓글