코딩 공부/C, C++

6. 함수와 변수

갬성꿈돌이 2024. 1. 23. 15:47
반응형
반응형

목차

    함수

     

     

    함수(function)란, 특정 동작을 수행하도록 작성된 독립된 프로그램으로 하나의 기능을 정의하는 것이다.

    함수의 형태는 우리가 자주 쓰는 main을 통해 예시를 들어보면 아래와 같다.

     

     

    함수끼리는 인수를 통해 서로 정보를 교환하며 모듈(Module) 또는 파일(file)은 특정한 일을 하도록 꾸며진 함수들의 집합으로 2가지 종류가 있다.

     

    표준 함수(standard library function)

     

    C/C++언어체계에 정의된 함수로 어떤 목적을 위해 미리 만들어진 코드

    헤더파일
    표준함수
    설명
    stdio.h
    printf, scanf, putchar, getchar, puts, gets, ...
    입출력에 관련된 함수
    stdlib.h
    atoi, itoa, qsort, random...
    수치변환, 난수함수
    string.h
    strcat, strcmp, strcpy, ...
    문자열에 관련된 함수
    ctype.h
    isalnum, isalpha, isdigit, ...
    문자 판별, 변환 함수
    math.h
    sin, cos, tan, sqrt, ...
    수학함수
    complex.h
    creal, cimag, cabs, ...
    복소수 관련 함수들
    ...
       

    등등 수백여 개의 표준함수들을 위의 표처럼 관련 기능 함수끼리 묶어서 각각 원형을 선언해 놓은 것이 바로 우리가 쓰는 그 헤더 파일이다.

     

     

     

     

    사용자 정의함수(programmer defined function)

     

    프로그램에서 제공하는 기본 함수들을 사용해 사용자가 만든 함수로 선언 > 호출 > 정의를 해줘야한다. C언어는 위에서 아래로 진행되는 절차진행형 언어로 반드리 위의 순서대로 진행해주어야 한다.

     

    선언(Decalaration)이란, 함수를 사용하기 이전에 '이런 이름의 함수를 사용할 것이다'라고 프로그램에게 말해주는 것으로 그 함수가 정의될 main문보다 먼저 이야기해줘야한다.

    호출(Call)이란, 컴파일러에 의해 불러져 사용되는 것으로 선언과 정의는 필수지만 호출은 사용하지 않아도 된다.

    정의(Definition)이란, 내가 선언한 그 함수가 어떤 기능/역할을 할지 등을 정하는 것으로 main문 내에 작성된다.

     

     

     

     

    함수의 모듈화

     

     

    실제 프로그램은 아주 작은 함수들이 모여 큰 함수가 되고 큰 함수들이 모여 작동되며, 아주 작은 기능을 각각의 함수로 만들어 여기저기 사용되게 쌓아올려 큰 기능을 할 수 있도록 모듈화를 잘 해야 한다.

     

    기능의 모듈화를 이해가 쉽도록 예를 들어보자.

     

    아이스크림 공장에서 만드는 방법, 재료가 모두 동일하고 마지막에 겉에 묻히는 토핑만 다른 A 아이스크림과 B 아이스크림을 만든다. A아이스크림의 토핑은 오른쪽에 있고 B 아이스크림의 토핑은 왼쪽에 있어 가장 마지막에 오른쪽으로 갈지 왼쪽으로만 갈지에 따라 아이스크림이 변한다.

     

    작업자 김씨는 A 아이스크림을 만드는 기능을 통채로 하나의 함수로 만들어 사용했다. 그러나 B아이스크림을 만들 때 토핑 문제로 A 아이스크림의 함수를 사용하지 못하고 B 아이스크림을 만드는 기능을 통채로 또 다른 하나의 함수로 만들어야 했다.

     

    하지만, 새로 들어온 작업자 이씨가 보아하니 마지막 과정만 다른 제품이기에 그 전까지의 과정은 하나의 함수로 만들어 A와 B 아이스크림 모두가 사용하고 토핑을 묻히는 기능만 A용 함수, B용 함수로 만들어 사용하였다.

     

    시간이 흘러 회사는 신제품 C와 D 아이스크림을 만들고자 하였다. C 아이스크림은 A 아이스크림에서 잼을 뺀 제품이고 D 아이스크림은 B 아이스크림에서 초콜릿과 토핑을 묻히지 않은 제품이다. 신제품을 만들기위해 스카웃 된 작업자 박씨는 모든 단계를 각각의 함수로 세세히 나눠 모듈화 시켰다.

     

    각 작업자에 따라 만들어진 함수

     

    김씨와 이씨의 경우는 잼, 초콜릿, 토핑 여부에 따라 커다란 크기의 함수를 여러개 만들어야 하는 반면, 박씨는 모든 기능을 나누어 작은 함수로 만들었기에 A, B, C, D 아이스크림 뿐만 아니라 나중에 잼, 초콜릿, 토핑 여부에 따른 또 다른 신제품을 만들 때 새로운 함수를 만들 필요가 없어진다.

     

    즉, 실제로 만들어야 하는 함수 크기는 최소화되고 사용성은 극대화되기 때문에 모듈화 꼭 중요시 하자.

     

     

     

     

    변수

     

     

    변수(variable)란, 데이터를 저장하기 위해 이름을 할당받은 메모리 공간으로 이름, 타입, 크기, 값+범위, 생존시간, 연결의 속성을 가지고 있다.

     

     

    범위(scope) : 변수가 사용 가능한 범위

    생존시간(lifetime) : 메모리에 존재하는 시간

    연결(linkage) : 다른 영역에 있는 변수와의 연결 상태

     

     

     

    1. 지역변수 : 한 함수의 블럭 안에 들어있는 변수.

    2. 전역변수 : 함수의 블럭 안이 아닌 외부에 선언된 변수.

    3. 정적변수 : 함수 블럭 내부, 외부 모두 선언 가능하며 크게 3가지로 나뉨.

    4. 외부변수 : 선언데 제한이 많이 따르며 컴파일, 분할구현에 대해 배울 때 필요.

     

     

     

    조금 더 자세한 내용은 아래 자료들을 다운받거나 확인하며 공부하자.

    Kocw강의자료_제3장_함수와변수.pdf
    0.12MB

     

     

     

    https://vmilsh.tistory.com/402

     

    C 언어 함수와 변수

    안녕하세요? 허니입니다. 오늘은 C 언어의 함수와 변수에 대해 포스팅 하려고 합니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다. C 언어란? 함수

    vmilsh.tistory.com

     

    반응형

    '코딩 공부 > C, C++' 카테고리의 다른 글

    5. define과 비트연산자  (0) 2024.01.19
    4. 조건문  (0) 2024.01.17
    3. 연산자  (0) 2024.01.17
    2. 자료형  (0) 2024.01.17
    1. C언어 기초  (0) 2024.01.16