Language Study/C

[C/C++] 04 - 함수 기초 - 함수 선언과 변수 유효 범위

지미닝 2022. 10. 3. 13:51

Index


함수 선언과 변수 유효 범위

  1. Function Definition vs. Function Prototype
  2. Interface & Implementation
  3. Variable Scope
  4. Local Variable vs Global Variable

1.Function Definition vs. Function Prototype 

① Function Prototype?

  • Function Definition에서 Body 부분을 제거하고 Header 부분만 남긴 형태
    • ; (semicolon)을 덧붙임에 유의
  • Function Prototype, Funcion Declaration, Function Interface 등의 이름으로 불림
  • 함수 호출에 필요한 정보는 모두 알려주지만 함수가 어떻게 구현/실현되는지를 보이지 않음
  • 함수를 호출하는 입장에서는 함수가 제공하는 기능을 이해하고 있다면 굳이 함수 Body내용을 알 필요는 없음
  • 함수를 호출하기 전에 Function Definition 또는 Prototype 중 하나가 있어야 함
  • Function Prototype을 이용하면 함수의 Body를 포함하는 Function Definition을 다른 곳으로 이동시켜 숨길 수 있음

  • Function Definition/Implementation의 분리
  • C의 경우 변수이든지 함수이든지 모든 식별자는 사용 전에 선언 또는 정의하는 것이 바람직하다

✓ Abstraction

Abstraction is the process of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose

 

Separation of Interface of Inplementation

 

Interface의 이해는 (Modular) Programming의 핵심

  • Software 개발의 상당 부분은 Assembly(조립)이다
  • 타인이 작성한 모듈과 나의 모듈을 결합시키는 작업
  • 응용 프로그램을 짜기 쉽도록 운영체제 또는 플랫폼에서 제공하는 함수/서비스 -> API : Application Programming Interface
  • 현실 S/W개발 시 이용할 수 있는 모듈/Library는 거의 100% 설명서가 영어임

2. Interface & Implementation

  • 함수(서비스)를 호출하는 입장에서는 함수가 제공하는 기능과 호출하는 방법을 안다면 함수의 세부 내용을 알 필요가 없음 -> Black Box
    • C/C++ 언어에서 Header File은 Interface의 역할Source File 은 Implementation의 역할을 한다.


3. Variable Scope

✓ 변수의 유효범위 (Scope)

Scope - 어떤 변수를 사용할 수 있는 프로그램 내의 범위

  • 유효 범위를 두지 않는다면: 변수 이름의 충돌이 발생할 수 있고 이는 프로그래밍 과정을 매우 복잡하게 만든다
  • 변수는 일반적으로 선언이 이뤄진 함수 내에서만 유효하다

4. Local Variable vs Global Variable

✓ 변수 선언 위치와 유효 범위

변수 선언 위치는 변수 유효범위 결정에 직접적 영향을 미친다

② C 소스 코드는 함수 내부 영역과 함수 외부 영역으로 영역을 구분할 수 있다

③ 함수 내부 영역에서 선언된 변수의 경우 해당 함수 내에서 유효하며 지역 변수(Local Variable)라고 한다

  • 엄밀하게는 변수 선언 위치부터 해당 블록(Block)의 끝까지 범위에서 유효

④ 함수 외부 영역에서 선언된 변수의 경우 해당 소스 파일의 전체 함수에서 유효하며 전역 변수(Global Variable)라고 한다

  • 엄밀하게는 변수 선언 위치부터 해당 파일(File)의 끝까지 범위에서 유효


✓ 지역 변수 유효 범위

① 지역 변수의 유효 범위

  • 선언된 위치에서부터 해당 블록(Block)의 끝까지 참조 가능

② 중첩 블록(nested block)

  • 중첩 블록 안에 선언된 변수는 해당 블록이 끝나는 범위까지 참조 가능하다

③ 매개 변수의 유효 범위

  • 매개변수는 해당 함수의 지역 변수로 해당 함수 내에서 참조가능하다

④ 다른 함수나 블록에서 선언된 변수의 경우 이름이 같아도 다른 변수임


✓ 전역 변수 유효 범위

선언된 위치에서부터 파일 끝까지 참조 가능


✓ 변수 충돌 (Variable Collision)

이름이 같은 변수들의 유효 범위가 겹치는 상황

→ 변수 충돌 시 보다 가까운 위치에서 선언된 변수로 해석, 결과적으로 주로 해당 블록 안에서 선언된 지역 변수로 해석됨


✓ 전역 변수의 활용 - 이전 작업 정보의 기억

언제 지역 변수를 사용할까?

① 지역 변수의 한계

  • 지역 변수는 함수 내에 선언된 변수로 함수 내부에서만 볼 수 있음
  • 지역 변수는 함수가 호출될 때 생성되어 메모리가 할당되고 함수가 종료하면 사라지는 자동 변수임(Automatic Variable)
  • 전역 변수는 프로그램 시작 시 생성되고 프로그램 종료 전까지는 유지됨

② 이전 작업 적보의 기억

  • 함수의 지역 변수는 함수가 끝나면 사라진다. 하지만, 전역 변수를 사용하면 함수가 끝나도 정보를 저장 할 수 있다.

③ 함수 간 정보 공유

  • 함수에게 정보를 전달하는 일반적 방법은 매개 변수를 이용하는 것이다
  • 전역 변수는 모든 함수에서 참조 가능하기 때문에 매개 변수를 사용하지 않고 전역 변수를 통해 함수 간 정보 공유가 가능하다

요약