ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C programming 기초 6강
    과외 수업 자료/C 2022. 11. 17. 17:38

    이번에는 함수의 추가적인 내용, 지역 변수와 전역 변수에 대해 알아볼 것이다.


    1. 함수


    1.1 함수의 형태 네 가지

    함수의 형태는 크게 네 가지로 나눌 수 있다.

    이때 형태를 나누는 방법은 다음과 같다.

     

    함수의 출력 형태의 유무

    • 출력 형태가 있으면 : 1
    • 출력 형태가 없으면 : 0

    함수의 입력 형태의 유무

    • 입력 형태가 있으면 : 1
    • 입력 형태가 없으면 : 0

    이러한 조건으로 형태를 나누어 보면 밑의 표와 같다.

    함수의 네 가지 형태

    우리가 함수를 어떻게 사용할 것인지에 맞춰 이 네 가지 형태 중 하나를 선택하여 사용하게 된다.

     

    그럼 이제 네 가지 형태들의 특징을 알아보자.

     

    11 형태

    int sum(int x, int y)
    출력 형태 있음 (int) -> 1
    입력 형태 있음 (int x, int y) -> 1
    해석 x, y를 입력받아 sum() 함수의 기능을 처리하고 int형으로 출력한다.
    특이점 출력 형태가 있어서 함수 내에 반드시 return 문을 사용해야 한다.

    10 형태

    int input(void)
    출력 형태 있음 (int) -> 1
    입력 형태 없음 (void) -> 0
    해석 입력받는 값 없이 input() 함수의 기능을 처리하고 int형으로 출력
    특이점 출력 형태가 있어서 함수 내에 반드시 return 문을 사용해야 한다.

    01 형태

    void print(int x)
    출력 형태 있음 (void) -> 0
    입력 형태 있음 (int x) -> 1
    해석 값 하나를 입력 받아 print() 함수의 기능을 처리하고 출력은 하지 않는다.
    특이점 출력 형태가 void이므로 함수 내에 return 문이 없어도 된다.

    00 형태

    void output(void)
    출력 형태 없음 (void) -> 0
    입력 형태 없음 (void) -> 0
    해석 입력받은 값 없이 output() 함수의 기능을 처리하고 출력은 하지 않는다.
    특이점 출력 형태가 void이므로 함수 내에서 return 문이 없어도 된다.

    1.2 함수 적용 방법

    지금까지 배운 함수의 기본 요소와 함수의 형태를 가지고 이제 프로그래밍에 적용할 차례이다.

    적용 방법에는 두 가지가 있다.

    • 첫 번째 방법 : 함수의 정의 -> 함수의 호출
    • 두 번째 방법 : 함수의 선언 -> 함수의 호출 -> 함수의 정의

     

    1.2.1 첫 번째 함수의 적용 방법

    함수를 프로그래밍에 적용하는 첫 번째 방법으로 함수의 정의와 함수의 호출이 있다.

     

    함수의 정의 : 함수의 기능을 정의한 문장

    함수의 호출 : 정의한 함수를 호출하는 문장

    첫 번째 방법을 그림으로 설명하면 다음과 같다.

    이렇듯 첫 번째 방법으로 함수의 사용할 때는 함수의 정의가 반드시 main 문 위에 존재해야 한다.

    위에서 컴파일러가 "sum 이라는 함수가 있구나!"라는 것을 알고 main 함수에서 sum 함수가 호출되었을 때 "여기에 sum 함수가 있었지!" 하면서 sum 함수로 찾아간다라고 기억하면 좋다.

    함수를 선언하고 호출하는 예시 코드 및 실행 결과

    다음과 같이 max 함수를 먼저 정의한 뒤에 main 문에서 max 함수를 호출하였을 때 다음과 같은 결과 나옴을 확인할 수 있다.

    함수를 main 문 아래에 정의하였을 경우

    위 그림과 같이 함수를 main 문 아래에 정의를 하면 컴파일러는 sum 이라는 함수가 존재하는 것을 모르고 있기 때문에 에러가 발생한다.

     

    1.2.2 두 번째 함수의 적용 방법

    위와 같은 에러를 해결할 수 있는 함수의 적용 방법이 바로 두 번째 방법이다.

    함수를 프로그래밍에 적용하는 두 번재 방법으로는 함수의 선언, 함수의 호출과 함수의 정의가 있다.

    두 번째 방법을 그림으로 설명하면 다음과 같다.

    위 그림과 같이 sum 이라는 함수가 존재한다는 것을 미리 선언하면 main 문 아래에 함수를 정의해도 에러가 나지 않는다.

    컴파일러에게 먼저 'sum 이라는 함수가 있어!'라고 선언을 하고 main 문에서 함수 sum을 호출하게 되면 'sum 함수가 있다고 들었는데' 하며 sum 함수를 찾아가게 된다고 기억하면 좋다.

    두 번째 방법 예시 코드

    위 코드를 보면 sum, input과 output이라는 함수를 위에서 미리 선언해주고 main 문 아래에 정의한 것을 확인할 수 있다.

    이 코드의 작업 순서는 아래 그림과 같다.

    코드의 실행 순서

    위 순서를 보면 우선 main에서 sum 함수를 호출한다. 호출된 sum 함수로 들어가 sum 함수의 기능을 수행하다 함수 내부에서 input 함수를 호출하게 되고 input 함수의 기능을 먼저 수행한다. 그렇게 input의 기능을 수행하여 val 변수를 return 받게 되고 이는 num에 저장이 된다. sum 함수의 기능 수행을 완료하면 total 변수를 return 받아 main 문의  변수 result에 저장하게 되고 result는 다시 output 함수의 입력 변수로 사용되고 output 함수의 기능을 수행한다.

    그렇게 최종 결과로 result가 출력되고 프로그램이 종료된다.


    2. 지역 변수와 전역 변수


    변수는 유효 범위에 따라 크게 지역 변수와 전역 변수로 나눌 수 있다.


    2.1 지역 변수 (Local Varable)

    지역 변수 (Local Varable)는 main(), 함수, 조건문, 반복문의 중괄호(블록, { }) 내부와 함수의 매개 변수 (Parameter)로 사용된다.

    특정 지역에서만 선언되어 사용되고 그 지역을 벗어나면 소멸하게 된다.

    지역 변수

    위 코드에서 보이듯 sum 함수 안에서 선언된 result와 main 문 안에 있는 result 변수는 서로 다른 변수이다.

    sum 함수 안에서 선언 및 초기화된 result는 sum 함수가 종료됨과 동시에 소멸하게 된다.

     

    지역 변수는 초기화를 하지 않으면 쓰레기 값이 저장된다.

     

    지역 변수의 메모리 생성 시점 : 중괄호 내에서 초기화할 때

    지역 변수의 메모리 소멸 시점 : 중괄호를 탈출할 때


    2.2 전역 변수 (Global Varable)

    전역 변수 (Global Varable)는 지역 변수와 다르게 중괄호 외부에 선언되는 변수를 말한다.

    어느 지역에서도 사용이 제한되지 않는 즉, 프로그램 어디에서든 접근이 가능한 변수이다.

    전역 변수

    다음 그림과 같이 외부에서 선언된 변수 z는 코드 어디에서든 접근이 가능하다.

     

    전역 변수는 지역 변수와 달리 초기화를 하지 않아도 자동으로 0이 저장된다.

    전역 변수의 메모리 생성 시점 : 프로그램이 시작될 때

    전역 변수의 메모리 소멸 시점 : 프로그램이 종료될 때


    마치며..

    함수의 사용법과 지역 변수, 전역 변수에 대해서 알아보았다.

    함수의 형태와 함수를 적용하는 방법의 선택은 프로그래머가 어떻게 함수를 선언하고 사용할 것인가? 에 따라서 유동적으로 변화한다. 그러니 그때그때 알맞은 형식을 사용하여 효율적이고 좋은 코드를 짜기 위해서 실습을 많이 해보며 감각을 익히는 것이 중요할 것이다.

    또한 전역 변수와 지역 변수의 개념은 요즘 많은 IDE에서 error가 생기지 않게 자동으로 처리해주는 경우가 많아 이를 간과하고 있는 사람이 꽤나 있는 편이다. 그러나 메모리 공간을 효율적으로 사용하기 위해서는 반드시 숙지하고 있어야 하는 부분이며 어떤 변수를 어떻게 어디에서 선언하고 소멸시킬 것인가에 대한 계획을 구체적으로 세우고 코딩을 하는 것이 중요하다.


    < 참고 자료 >

    책 : 열혈강의 C언어 본색 / 박정민

    '과외 수업 자료 > C' 카테고리의 다른 글

    C programming 기초 8강  (0) 2022.11.30
    C programming 기초 7강  (0) 2022.11.28
    C programming 기초 5강  (0) 2022.11.07
    C programming 기초 4강  (0) 2022.11.03
    C programming 기초 3강  (0) 2022.10.20
Designed by Tistory.