29|형과 객체의 특징: 변수·형 검사·바인딩

글 요약

사무자동화산업기사 – 프로그램에서 사용하는 변수와 상수의 차이부터 선언문과 배정문, 정적·동적 형 검사, 형 확장과 형 축소, 바인딩과 바인딩 시간까지 연결하여 정리합니다.

프로그램은 처리할 값을 그대로 반복해서 적는 대신 변수와 상수에 이름을 붙여 데이터를 관리합니다. 이때 변수의 이름이 어떤 자료형·메모리 위치·값과 연결되는지, 그 연결이 언제 결정되는지를 이해해야 선언문, 배정문, 형 검사와 형 변환의 관계를 정확하게 파악할 수 있습니다.

이 장에서는 변수와 바인딩을 중심으로 변수와 상수의 차이, 지역·비지역·전역 변수, 선언문과 배정문, 정적·동적 형 검사, 형 확장과 형 축소, 정적·동적 바인딩을 연결하여 정리합니다. 시험에서는 정의를 그대로 묻는 문제뿐 아니라 비슷한 용어의 차이와 각 개념이 결정되는 시점을 구분하는 문제가 자주 출제됩니다.

이 장의 핵심 내용

  • 변수는 값을 저장하거나 객체를 참조하기 위해 사용하는 이름 있는 저장 공간입니다.
  • 변수는 이름·자료형·값·저장 위치·범위·수명 등의 속성을 가집니다.
  • 상수는 프로그램 실행 중 변경하지 않을 값을 이름이나 리터럴로 표현한 자료입니다.
  • 지역·비지역·전역 변수는 선언 위치와 이름을 사용할 수 있는 범위를 기준으로 구분합니다.
  • 선언문은 이름과 자료형 등의 속성을 알리고, 배정문은 변수에 값을 저장하거나 변경합니다.
  • 정적 형 검사는 주로 번역·컴파일 단계에서 자료형의 적합성을 확인합니다.
  • 동적 형 검사는 프로그램 실행 중 현재 값이나 객체의 자료형을 기준으로 적합성을 확인합니다.
  • 형 확장은 더 넓은 표현 범위의 자료형으로, 형 축소는 더 좁은 표현 범위의 자료형으로 변환합니다.
  • 바인딩은 이름이나 기호를 자료형·메모리 위치·값·실행할 코드 등의 속성과 연결하는 것입니다.
  • 바인딩 시간은 변수나 기호의 속성이 연결되는 시점을 의미합니다.
  • 정적 바인딩은 실행 전에 연결이 결정되고, 동적 바인딩은 실행 중 연결이 이루어집니다.

변수와 상수는 어떤 특징을 가지는가?

변수(Variable)는 프로그램이 처리하는 값을 저장하거나 객체를 가리키기 위해 사용하는 이름 있는 저장 공간입니다. 변수는 단순히 현재 값 하나만 의미하지 않으며 이름, 자료형, 저장 위치, 범위와 수명 같은 여러 속성을 함께 가집니다.

변수의 속성의미
이름프로그램에서 변수를 식별하는 명칭score
자료형저장할 수 있는 값과 허용되는 연산의 종류정수형
현재 변수에 저장되거나 연결된 실제 자료80
저장 위치변수에 할당된 메모리 주소 또는 저장 장소메모리의 특정 영역
범위프로그램에서 변수 이름을 사용할 수 있는 영역함수 내부
수명변수의 저장 공간이 유효하게 존재하는 기간함수 실행 중
변수는 이름과 값뿐 아니라 자료형·저장 위치·범위·수명까지 포함해 이해해야 합니다.

변수명은 프로그래밍 언어가 정한 식별자 규칙에 따라 작성합니다. 숫자로 시작할 수 없거나 예약어를 변수명으로 사용할 수 없는 언어가 많으며, 변수의 자료형이 언제 결정되고 실행 중 변경될 수 있는지는 언어의 형 체계에 따라 달라집니다.

변수

프로그램 실행 과정에서 새로운 값을 배정할 수 있는 저장 공간입니다. 같은 변수 이름이 유지되어도 저장된 값은 달라질 수 있습니다.

예: 점수 변수의 값을 70에서 80으로 변경

상수

프로그램 실행 중 변경하지 않을 값을 이름이나 리터럴로 표현한 자료입니다. 언어에 따라 상수를 선언하고 보호하는 방법은 다릅니다.

예: 원주율을 나타내는 PI = 3.14159

혼동 주의: PI = 3.14에서 3.14는 값을 직접 적은 실수 리터럴입니다. PI가 실제 상수인지 여부는 해당 언어에서 값을 변경할 수 없도록 선언했는지에 따라 결정됩니다. 이름을 대문자로 작성했다는 이유만으로 상수가 되는 것은 아닙니다.

지역·비지역·전역 변수는 무엇을 기준으로 구분하는가?

지역 변수, 비지역 변수와 전역 변수는 주로 변수가 선언된 위치와 그 이름을 사용할 수 있는 범위를 기준으로 구분합니다. 변수의 범위는 이름을 참조할 수 있는 프로그램 영역이고, 변수의 수명은 실제 저장 공간이 존재하는 기간입니다.

구분선언 위치와 사용 범위일반적인 특징
지역 변수
Local Variable
함수·메서드·블록 내부에서 선언되어 해당 영역에서 사용함수나 블록이 실행될 때 생성되고 종료될 때 소멸하는 경우가 많음
비지역 변수
Nonlocal Variable
현재 함수 내부에는 선언되지 않았지만 바깥쪽 영역에 선언되어 참조 가능바깥 함수의 변수나 전역 변수가 현재 함수의 관점에서 비지역 변수가 될 수 있음
전역 변수
Global Variable
프로그램이나 모듈의 최상위 영역에 선언되어 여러 함수에서 사용 가능프로그램 또는 모듈이 유지되는 동안 존재하는 경우가 많음
언어에 따른 차이: 일반적인 프로그래밍 언어 이론에서는 현재 지역 영역 밖에서 선언된 변수를 넓은 의미의 비지역 변수라고 부를 수 있습니다. 다만 Python의 nonlocal 문은 바깥 함수 범위의 변수를 가리키며, 모듈 전역 변수는 global 문으로 별도 구분합니다.

지역 변수는 함수가 호출될 때마다 새로운 저장 공간을 가질 수 있습니다. 전역 변수는 여러 함수에서 공유하기 쉽지만 프로그램의 여러 부분이 값을 변경하면 현재 상태와 변경 원인을 추적하기 어려워질 수 있습니다.

범위와 수명: 범위는 ‘코드의 어느 부분에서 변수 이름을 사용할 수 있는가’를 나타내고, 수명은 ‘그 변수의 저장 공간이 언제부터 언제까지 존재하는가’를 나타냅니다.

선언문과 배정문은 무엇이 다른가?

선언문(Declaration)은 프로그램에서 사용할 이름과 그 속성을 언어 처리계에 알리는 문장입니다. 정적 자료형 언어에서는 변수의 자료형, 필요한 저장 공간과 허용되는 연산을 결정하는 근거가 되며 컴파일러가 오류를 미리 발견하는 데에도 이용됩니다.

배정문 또는 대입문(Assignment Statement)은 계산된 값을 변수의 저장 공간에 넣는 문장입니다. 이미 값이 들어 있는 변수에 새로운 값을 배정하면 기존 값이 새 값으로 변경됩니다.

정수형 score;       // 선언
score ← 80;         // 배정
정수형 count ← 10;  // 선언과 동시에 초기화
count ← count + 1;  // 기존 값을 이용한 재배정
구분핵심 역할
선언이름과 자료형 등의 속성을 알림정수형 score;
초기화변수가 생성될 때 최초 값을 부여정수형 score ← 80;
배정변수에 값을 저장하거나 기존 값을 변경score ← 90;

언어에 따른 차이: 일부 언어는 변수를 사용하기 전에 별도의 선언문을 요구합니다. 반면 Python처럼 대입 등의 연산이 이름을 객체와 연결하며 전통적인 형태의 변수 선언문을 사용하지 않는 언어도 있습니다.

형 검사는 언제 이루어지는가?

형 검사(Type Checking)는 연산자나 함수가 요구하는 자료형에 맞는 값이 전달되는지, 변수에 배정하려는 값이 해당 변수의 자료형과 호환되는지를 확인하는 과정입니다. 숫자 덧셈 연산에 호환되지 않는 객체가 전달되거나 변수에 허용되지 않는 자료형의 값을 저장하려 하면 형 오류가 발생할 수 있습니다.

비교 항목정적 형 검사동적 형 검사
주요 검사 시점번역·컴파일 단계프로그램 실행 단계
오류 발견실행 전에 많은 형 오류를 발견문제가 되는 코드가 실행될 때 오류 발견
자료형 판단선언과 식의 자료형 정보를 분석현재 값이나 객체의 실제 자료형을 확인
실행 중 정보상대적으로 적은 형 정보가 필요실행 중 자료형 정보를 유지해야 함
일반적 특징사전 검증과 실행 효율에 유리유연성과 실행 중 변경에 유리

정적 형 검사

  • 프로그램을 번역하거나 컴파일하는 과정에서 주로 수행합니다.
  • 실행 전에 많은 형 오류를 발견할 수 있습니다.
  • 변수와 식의 자료형 정보를 컴파일러가 분석합니다.
  • 자료형 사용이 비교적 엄격하지만 실행 중 검사 부담을 줄일 수 있습니다.

동적 형 검사

  • 프로그램을 실제로 실행하는 과정에서 수행합니다.
  • 현재 값이나 객체의 자료형을 기준으로 연산 가능 여부를 판단합니다.
  • 이름이 실행 중 다른 자료형의 객체에 다시 연결될 수 있는 언어가 많습니다.
  • 유연성이 높지만 실행 중 자료형 정보 유지와 검사가 필요합니다.

구분 보완: 시험에서는 정적 형 검사를 컴파일 언어, 동적 형 검사를 인터프리터 언어와 연결해 설명하는 경우가 많지만 두 분류는 완전히 같은 개념이 아닙니다. 하나의 언어도 컴파일 단계의 검사와 실행 단계의 검사를 함께 사용할 수 있습니다.

형 확장과 형 축소는 어떻게 다른가?

형 변환(Type Conversion)은 한 자료형의 값을 다른 자료형으로 바꾸는 과정입니다. 연산이나 배정 과정에서 언어가 자동으로 수행하는 암시적 변환과, 프로그래머가 변환할 자료형을 직접 지정하는 명시적 변환으로 나눌 수 있습니다.

구분의미대표 예주의점
형 확장
Widening
표현 범위가 상대적으로 좁은 형을 더 넓은 형으로 변환정수형 → 실수형자동 변환되는 경우가 많지만 모든 값의 정밀도가 항상 완전히 보존되는 것은 아님
형 축소
Narrowing
표현 범위가 상대적으로 넓은 형을 더 좁은 형으로 변환실수형 → 정수형소수 부분 제거·범위 초과·값 손실이 발생할 수 있어 명시적 변환을 요구하는 경우가 많음
정수형 count ← 10;
실수형 average ← count;         // 형 확장

실수형 price ← 12.8;
정수형 result ← 정수형(price);  // 형 축소: 12가 될 수 있음

시험 핵심: 형 확장은 더 넓은 표현 범위로 옮기는 변환이고, 형 축소는 더 좁은 표현 범위로 옮기는 변환입니다. 형 축소에서는 값 손실 가능성이 크다는 점을 기억합니다.

바인딩은 무엇을 연결하는가?

바인딩(Binding)은 프로그램의 이름이나 기호를 그 의미와 연결하는 것입니다. 변수 이름을 자료형, 메모리 위치 또는 실제 값과 연결할 수 있고, 연산 기호를 특정 연산과 연결하거나 함수 호출을 실제 함수 코드와 연결할 수도 있습니다.

바인딩 대상연결되는 속성
변수 이름자료형score를 정수형으로 결정
변수 이름메모리 위치함수 호출 시 지역 변수 저장 공간 할당
변수 또는 이름값이나 객체score80을 배정
연산 기호수행할 연산+를 숫자 덧셈 또는 문자열 연결로 해석
함수 호출실행할 함수 코드호출 이름을 실제 함수와 연결

바인딩 시간(Binding Time)은 이러한 연결이 결정되는 시점입니다. 한 변수의 모든 속성이 같은 시점에 결정되는 것은 아닙니다. 이름과 자료형은 번역 시점에 연결되고, 메모리 위치는 함수가 호출될 때 결정되며, 값은 배정문이 실행될 때 연결될 수 있습니다.

단답형 문제: 시험에서 변수의 속성이 결정되는 시점을 묻는 문제의 답은 바인딩 시간입니다. 엄밀하게는 자료형·메모리 위치·값과 같은 각 속성이 서로 다른 시점에 바인딩될 수 있습니다.

정적 바인딩과 동적 바인딩은 무엇이 다른가?

정적 바인딩(Static Binding)은 프로그램 실행 전에 연결이 이루어지고 실행 중 그 연결이 변하지 않는 경우입니다. 언어 정의 시점, 언어 구현 시점, 번역·컴파일 시점과 링크 시점에 결정되는 바인딩이 대표적입니다.

동적 바인딩(Dynamic Binding)은 프로그램 실행 과정에서 연결이 이루어지거나 실행 상황에 따라 연결될 대상이 달라지는 경우입니다. 프로그램 시작, 모듈 적재, 함수 호출, 블록 진입, 객체 사용과 배정문 실행 시점의 바인딩이 대표적입니다.

비교 항목정적 바인딩동적 바인딩
결정 시점프로그램 실행 전프로그램 실행 중
변경 가능성실행 중 연결이 유지됨실행 상황에 따라 연결 대상이 달라질 수 있음
일반적 장점사전 분석과 실행 효율에 유리유연성과 재사용성에 유리
일반적 단점실행 중 변경의 유연성이 낮음실행 중 탐색·검사 비용이 발생할 수 있음
대표 시점언어 정의·구현·번역·링크 시점프로그램 시작·모듈 적재·함수 호출·객체 사용 시점

정적 바인딩 시점

  • 언어 정의 시간
  • 언어 구현 시간
  • 번역·컴파일 시간
  • 링크 시간

동적 바인딩 시점

  • 프로그램 시작·적재 시간
  • 모듈 활성화 시간
  • 함수·메서드 호출 시간
  • 실행 중 객체·변수 사용 시점

바인딩 시점의 구분: 정적·동적 바인딩은 프로그램 전체를 한 종류로만 분류하는 개념이 아닙니다. 하나의 프로그램에서도 자료형은 컴파일 시점에 정적으로 바인딩되고, 지역 변수의 메모리 위치와 값은 함수 호출이나 배정문 실행 시점에 동적으로 바인딩될 수 있습니다.

선언부터 실행까지 개념은 어떻게 연결되는가?

변수와 바인딩의 관계는 프로그램이 처리되는 순서에 맞춰 살펴보면 이해하기 쉽습니다. 다음 과정은 서로 독립된 개념이 아니라 하나의 변수에 필요한 속성을 차례로 연결하고 검사하는 흐름입니다.

순서과정핵심 내용
1선언변수의 이름과 자료형 등의 속성을 알림정수형 score;
2형 바인딩과 검사score를 정수형과 연결하고 사용할 연산과 배정 가능한 값을 검사정수형 연산 허용
3저장 공간 할당실행 전 또는 함수·블록 진입 시 이름을 실제 메모리 위치와 연결지역 변수 공간 생성
4배정과 형 변환저장 공간에 값을 넣고 필요한 경우 호환되는 자료형으로 변환score ← 80;

전체 연결: 선언문이 변수의 존재와 속성을 알리면, 바인딩이 이름을 자료형·위치·값과 연결하고, 형 검사가 그 연결의 적합성을 확인하며, 배정문이 실제 값을 저장합니다.

시험에서 자주 혼동되는 개념

변수와 상수

변수는 실행 중 새로운 값을 배정할 수 있고, 상수는 정해진 값을 변경하지 않도록 표현합니다. 상수 이름과 리터럴은 관련되지만 동일한 개념은 아닙니다.

선언과 배정

선언은 이름과 자료형 등의 속성을 알리고, 배정은 변수의 저장 공간에 값을 넣습니다. 선언하면서 처음 값을 넣는 것은 초기화입니다.

범위와 수명

범위는 변수 이름을 사용할 수 있는 코드 영역이고, 수명은 해당 변수의 저장 공간이 실제로 존재하는 기간입니다.

정적 형 검사와 정적 바인딩

정적 형 검사는 실행 전에 자료형의 적합성을 검사하고, 정적 바인딩은 이름과 속성의 연결이 실행 전에 결정되어 유지되는 것입니다.

형 확장과 형 축소

형 확장은 더 넓은 표현 범위로 변환하고, 형 축소는 더 좁은 표현 범위로 변환합니다. 형 축소에서는 값 손실 가능성이 큽니다.

정적 바인딩과 동적 바인딩

정적 바인딩은 실행 전에 연결이 결정되고, 동적 바인딩은 실행 중 연결이 이루어지거나 연결 대상이 달라질 수 있습니다.

암기 흐름: ‘선언 → 형 검사 → 저장 공간 연결 → 값 배정’의 과정에서 이름과 자료형·위치·값을 연결하는 행위가 바인딩이며, 그 연결이 결정되는 시점이 바인딩 시간입니다.

이번 장 핵심 요약

  1. 변수는 값을 저장하거나 객체를 참조하기 위한 이름 있는 저장 공간입니다.
  2. 변수는 이름·자료형·값·저장 위치·범위·수명의 속성을 가집니다.
  3. 상수는 실행 중 변경하지 않을 값을 이름이나 리터럴로 표현한 자료입니다.
  4. 지역 변수는 현재 함수나 블록 내부에서 선언되어 해당 영역에서 사용됩니다.
  5. 비지역 변수는 현재 영역의 바깥쪽에서 선언되어 현재 영역에서 참조되는 변수입니다.
  6. 전역 변수는 프로그램이나 모듈의 최상위 영역에 선언되어 여러 함수에서 사용될 수 있습니다.
  7. 범위는 이름을 사용할 수 있는 영역이고 수명은 저장 공간이 존재하는 기간입니다.
  8. 선언은 이름과 자료형 등의 속성을 알리고 배정은 변수에 값을 저장합니다.
  9. 초기화는 변수가 생성될 때 최초 값을 부여하는 것입니다.
  10. 정적 형 검사는 번역·컴파일 단계에서 주로 수행됩니다.
  11. 동적 형 검사는 프로그램 실행 중 현재 값이나 객체의 자료형을 기준으로 수행됩니다.
  12. 형 확장은 더 넓은 표현 범위로 변환하고 형 축소는 더 좁은 범위로 변환합니다.
  13. 형 축소에서는 소수 부분 제거·범위 초과·값 손실이 발생할 수 있습니다.
  14. 바인딩은 이름이나 기호를 자료형·메모리 위치·값·실행 코드 등의 속성과 연결하는 것입니다.
  15. 바인딩 시간은 변수나 기호의 속성이 연결되는 시점입니다.
  16. 정적 바인딩은 실행 전에, 동적 바인딩은 실행 중 이루어집니다.
  17. 번역 시간과 링크 시간은 정적 바인딩의 대표적인 시점입니다.
  18. 프로그램 시작·모듈 활성화·함수 호출·객체 사용 시점은 동적 바인딩의 대표적인 시점입니다.
  19. 하나의 변수도 자료형·메모리 위치·값이 서로 다른 시점에 바인딩될 수 있습니다.

복습 문제

프로그램에서 변수가 갖는 속성이 완전히 결정되는 시간을 무엇이라고 하는가?

바인딩 시간입니다.

변수와 상수의 가장 중요한 차이는?

변수는 실행 중 새로운 값을 배정할 수 있지만 상수는 정해진 값을 변경하지 않도록 표현한다는 점입니다.

변수의 범위와 수명은 어떻게 다른가?

범위는 변수 이름을 사용할 수 있는 코드 영역이고, 수명은 변수의 저장 공간이 실제로 존재하는 기간입니다.

변수의 이름과 자료형 등의 속성을 알리는 문장은?

선언문입니다.

변수에 값을 저장하거나 기존 값을 변경하는 문장은?

배정문 또는 대입문입니다.

프로그램을 번역하는 과정에서 주로 수행되는 형 검사는?

정적 형 검사입니다.

프로그램 실행 과정에서 현재 값의 자료형을 확인하는 검사는?

동적 형 검사입니다.

정수형을 실수형으로 변환하는 것은 일반적으로 어떤 형 변환인가?

형 확장입니다.

실수형을 정수형으로 변환하는 것은 일반적으로 어떤 형 변환인가?

형 축소입니다.

정적 바인딩에 해당하는 대표 시점은?

언어 정의 시간, 언어 구현 시간, 번역·컴파일 시간과 링크 시간입니다.

동적 바인딩에 해당하지 않는 시점은 번역 시간과 실행 시간 중 어느 것인가?

번역 시간입니다. 번역 시간은 정적 바인딩의 대표적인 시점입니다.

함수 호출 시 지역 변수의 저장 공간이 결정되는 것은 정적·동적 바인딩 중 어느 것인가?

실행 중에 이루어지므로 동적 바인딩입니다.

정적 형 검사와 정적 바인딩은 같은 개념인가?

아닙니다. 정적 형 검사는 실행 전에 자료형의 적합성을 검사하는 과정이고, 정적 바인딩은 이름과 어떤 속성의 연결이 실행 전에 결정되는 것입니다.

참고자료

이 글은 사무자동화산업기사 제2과목 프로그래밍 일반의 변수와 상수, 선언문과 배정문, 형 검사, 형 변환과 바인딩 개념을 이해하고 복습할 수 있도록 재구성한 정리입니다. 자료형 결정 방식, 변수의 범위와 수명, 형 변환과 바인딩 시점은 프로그래밍 언어와 실행 환경에 따라 다를 수 있으므로 최신 출제기준과 사용하는 언어의 공식 명세를 함께 확인해야 합니다.


같은 주제의 다른 글

이 글과 같은 카테고리에 있는 이전 글과 다음 글을 확인해보세요.