Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

공부해보잠

변수 본문

자격증/정보처리

변수

heejk 2025. 2. 9. 20:43
변수의 개요

 

변수는 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간으로, 변할 수 있는 값을 의미한다.
즉, 프로그램 실행 중 데이터를 저장하고 필요할 때 값을 변경하거나 사용할 수 있도록 하는 메모리 공간의 식별자이다.

 

 변수의 특징

  • 메모리 공간을 차지함 → 변수를 선언하면 특정 메모리 공간이 할당됨
  • 값을 변경할 수 있음 → 실행 중에도 새로운 값을 할당 가능
  • 자료형(데이터 타입)이 있음 → 저장하는 값의 유형(정수형, 실수형, 문자형, 포인터형 등)에 따라 구분됨
  • 이름을 통해 접근 가능 → 변수에 할당된 값은 변수명을 통해 사용됨
  • 초기화 후 사용해야 함 → 선언된 변수는 값을 할당(초기화)한 후 사용해야 함

변수의 역할

  • 데이터 저장 : 연산, 비교, 출력 등을 위해 데이터를 저장하는 역할
  • 유지 및 변경 가능 : 프로그램 실행 중 값을 유지하거나 변경할 수 있음
  • 가독성 향상 : 명확한 변수명을 사용하여 코드의 의미를 쉽게 이해할 수 있음
  • 메모리 관리 : 프로그램이 실행되는 동안 메모리를 효과적으로 관리

변수의 종류 (저장하는 값에 따른 분류)

구분 설명 예시
정수형(Integer Type) 정수 값을 저장하는 변수 int num = 10;
실수형(Floating Point Type) 소수점이 포함된 값을 저장하는 변수 float pi = 3.14;
문자형(Character Type) 하나의 문자를 저장하는 변수 char letter = 'A';
문자열형(String Type) 여러 개의 문자를 저장하는 변수 string message = "Hello";
포인터형(Pointer Type) 변수의 주소 값을 저장하는 변수 int* ptr = #

변수명 작성 규칙

프로그래밍에서 변수명을 작성할 때 반드시 지켜야 하는 규칙이 있습니다. 올바른 변수명을 사용하면 코드의 가독성이 좋아지고, 오류를 방지할 수 있습니다.

 

변수명 작성 규칙 정리

규칙 설명 올바른 예시 잘못된 예시
사용 가능한 문자 영문자(A-Z, a-z), 숫자(0-9), 언더바(_) 사용 가능 myVariable, count_1, _tempValue num#1, var name, 1stNumber
첫 글자 제한 영문자 또는 _(언더바)로 시작해야 하며, 숫자로 시작할 수 없음 _privateVar, userCount 1number, 123value
특수문자 사용 불가 *, +, -, / 등 특수문자 및 공백 사용 불가 my_value, number1 my value, num+total
대소문자 구분 Number와 number는 서로 다른 변수로 인식됨 count, Count (다른 변수로 취급됨)  
예약어 사용 불가 int, return, if 등 예약어 사용 불가 return_value, countIf int, return, if
세미콜론(;) 필수 (C, C++ 등) 문장 끝에 ; 추가해야 함 int num = 10; int num = 10
헝가리안 표기법 사용 가능 변수명 앞에 데이터 타입을 명시하여 가독성 향상 nCount, fValue, cLetter count, value

 

  • 헝가리안 표기법 (Hungarian Notation)
    • 변수명 앞에 데이터 타입을 명시하는 방식
    • 예시: nCount (n = 정수형 int), fValue (f = 실수형 float), bIsTrue (b = 불리언 bool)
  • 예약어(키워드)란?
    • 프로그래밍 언어에서 특별한 의미를 가지는 단어로, 변수명으로 사용할 수 없음
구분 C 예약어 JAVA 예약어 Python 예약어
제어문 if, else, switch, case if, else, switch, case, default if, elif, else
반복문 for, while, do for, while, do for, while
분기문 break, continue, return, goto break, continue, return break, continue, pass
논리 연산 &&, `   , !`
자료형 char, int, float, double, short, long, void byte, short, int, long, float, double, char, boolean int, float, complex, bool, str, list, tuple, set, dict
클래스 관련 - class, interface, enum, extends, implements class, self
객체 관련 - new, this, super, instanceof -
예외 처리 - try, catch, finally, throw, throws try, except, finally, raise, assert
접근 제어자 - public, private, protected -
기타 제어자 const, volatile, extern, static, register, auto static, final, abstract, synchronized, volatile, transient del, global, nonlocal
패키지/모듈 - package, import import, from, as
메모리 관련 malloc, free, sizeof new, finalize() del
기타 typedef, struct, union, enum void, assert, native, strictfp, goto(사용되지 않음), const(사용되지 않음) True, False, None, with, async, await

사용되지 않는다는 의미

  • goto(Java) → C에서는 사용되지만, Java에서는 권장되지 않으며, 공식적으로 지원되지 않음.
  • const(Java) → Java에서는 final을 사용하여 상수를 선언하므로 const는 의미가 없음.

변수명은 알기 쉽고 가독성이 좋은 이름을 사용하는 것이 중요합니다.
언어별 변수명 규칙을 준수해야 오류를 방지할 수 있습니다.
헝가리안 표기법을 사용하면 변수의 데이터 타입을 쉽게 파악할 수 있습니다.


변수를 상수로 만들어 사용하기

프로그래밍에서는 보통 변수를 사용하여 값을 저장하고 변경할 수 있습니다. 하지만 프로그램 실행 중 값이 절대 바뀌지 않아야 하는 경우, 변수를 상수(Constant) 로 선언할 수 있습니다.

예를 들어, 원주율(π) 값은 항상 3.1415927이므로 프로그램이 실행되는 동안 바뀌면 안 됩니다. 이때 상수를 사용하면 실수로 값을 변경하는 것을 방지할 수 있습니다

 

 

상수를 만드는 방법

C언어에서는 두 가지 방법으로 변수를 상수로 만들 수 있습니다.

 

const 예약어 사용하기

const 키워드를 사용하면 변수를 상수로 만들 수 있습니다.

 

예제 코드

#include <stdio.h>

int main() {
    const float PI = 3.1415927;  // 상수 선언
    float radius = 5.0;
    
    float area = PI * radius * radius;  // 원의 넓이 계산
    
    printf("원의 넓이: %f\n", area);
    
    // PI = 3.14;  //const로 선언된 값은 변경할 수 없음(오류)
    
    return 0;
}

const를 사용하면 프로그램 실행 중 PI 값을 변경할 수 없습니다.

 

#define 전처리기 사용하기

#define을 사용하면 특정 값을 이름으로 정의할 수 있습니다.
컴파일할 때 PI를 3.1415927로 치환하는 방식입니다.

 

예제 코드

#include <stdio.h>

#define PI 3.1415927  // 전처리기 상수

int main() {
    float radius = 5.0;
    
    float area = PI * radius * radius;  // 원의 넓이 계산
    
    printf("원의 넓이: %f\n", area);
    
    return 0;
}

#define은 값이 고정되며, 메모리에 저장되지 않고 코드에 직접 치환됩니다

 

const와 #define의 차이점

비교 항목 const 사용 #define 사용
처리 시점 컴파일 단계 전처리 단계 (컴파일 전에 치환)
타입 검사 있음 없음 (값이 단순 치환됨)
메모리 사용 변수로 저장됨 메모리를 사용하지 않음
디버깅 가능 어려움 (컴파일 후 원래 값이 사라짐)

const는 타입 검사와 디버깅이 가능하여 일반적으로 더 안전합니다.
#define은 메모리를 사용하지 않지만, 디버깅이 어렵습니다.

 

상수와 리터럴(Literal)의 차이

리터럴이란 그 자체로 변하지 않는 값을 의미합니다.

float pi = 3.1415927;  // 3.1415927 자체가 "리터럴"

위 코드에서 3.1415927은 리터럴이고, pi는 변수입니다.
하지만 아래처럼 선언하면 pi 변경할 수 없는 상수가 됩니다.

const float pi = 3.1415927;  // pi는 변경할 수 없는 상수

 

 

언제 const와 #define을 사용할까?

  • 변수를 사용할 때 타입 검사와 디버깅이 필요하면 const 사용
  • 간단한 숫자 상수(예: 원주율, 최대값)를 정의할 때는 #define 사용

요약

  • const와 #define을 사용하면 변수 값을 변경할 수 없도록 상수화할 수 있다.
  • const는 타입 검사 가능, #define은 컴파일 전에 값이 치환됨
  • 상수를 사용하면 프로그램이 실수로 값을 변경하는 문제를 예방할 수 있다

C 언어의 기억 클래스(Storage Class)

프로그래밍에서 변수를 선언하면 메모리 내에 값을 저장할 공간(기억영역) 이 할당됩니다.
이때, 변수가 저장될 위치, 사용 범위, 생존 기간 등을 결정하는 것이 기억 클래스(Storage Class) 입니다.

C 언어에서는 다음과 같이 5가지 종류의 기억 클래스를 제공합니다.

 

 기억 클래스 종류 및 특징 정리

기억 클래스기억영역예약어생존 기간사용 범위특징

           
기억 클래스 기억영역 예약어 생존
기간
사용
범위
특징
자동 변수 메모리(스택) auto (기본값) 일시적 지역적 - 함수나 블록 { } 내에서 선언됨
- 실행되는 동안만 존재하며, 블록을 벗어나면 자동 소멸됨
- 초기화하지 않으면 쓰레기 값(Garbage Value)이 저장됨
레지스터 변수 레지스터 register 일시적 지역적 - CPU 내부 레지스터에 저장되어 빠른 속도로 접근 가능
- 함수나 블록 실행 동안만 존재하고, 종료되면 소멸됨
- 레지스터 개수가 제한되어 있으면 메모리에 할당됨
- 변수의 메모리 주소를 가질 수 없어 & 연산자 사용 불가
정적 변수 (내부) 메모리(데이터) static 영구적 지역적 - 함수나 블록 { } 내에서 선언하지만, 프로그램 종료까지 값 유지
- 함수가 여러 번 호출되어도 기존 값을 유지함
- 초기화는 한 번만 가능하며, 생략하면 자동으로 0으로 초기화됨
정적 변수 (외부) 메모리(데이터) static 영구적 전역적 - 함수 밖에서 선언되며, 파일 내부에서만 접근 가능 (파일 범위 제한)
외부 변수 메모리(데이터) extern 영구적 전역적 - 다른 파일에서 선언된 변수를 참조할 때 사용
- 함수 외부에서 선언됨
- 함수가 종료된 뒤에도 값 유지됨
- 초기화 생략 시 자동으로 0으로 초기화됨

가비지 콜렉터(Garbage Collector)란
  • 프로그래밍에서 변수를 선언하면 메모리 공간이 할당됩니다.
  • 하지만 사용하지 않는 변수가 계속 남아 있으면 메모리가 낭비될 수 있습니다.
  • 이런 사용되지 않는 메모리(쓰레기 메모리) 를 자동으로 해제하여 다른 프로그램이 사용할 수 있도록 정리하는 과정 가비지 콜렉션(Garbage Collection) 이라고 합니다.
  • 이 작업을 수행하는 프로그램을 가비지 콜렉터(Garbage Collector, GC) 라고 합니다.

 왜 가비지 콜렉터가 필요할까?

  • 프로그램에서 더 이상 사용하지 않는 메모리가 있으면 자동으로 정리
  • 메모리 누수(Memory Leak) 방지
  • 프로그래머가 직접 메모리를 해제하지 않아도 됨 (편리함)

변수의 선언

변수를 선언(Declaration)한다는 것은 프로그램에서 사용할 변수를 정의하고, 메모리에 저장할 공간을 예약하는 과정입니다.

자료형 변수명 = 값;
int a = 5;  // 정수형 변수 a 선언 및 초기화
  • 자료형(Data Type): 변수에 저장될 데이터의 형식을 지정
  • 변수명(Variable Name): 사용자가 원하는 이름으로 변수 지정 (규칙에 맞아야 함)
  • 값(Value) [선택사항]: 변수 선언과 동시에 초기화할 값 (지정하지 않아도 가능)

변수 선언 예제 및 설명 정리 표

변수 선언 시 올바른 자료형을 사용하지 않으면 오류가 발생할 수 있습니다.
아래 표는 변수 선언 예제와 함께, 각 변수의 동작 방식과 오류 발생 이유를 정리한 것입니다.

 

올바른 변수 선언 예제

변수 선언 설명
int a = 10; 정수형 변수 a를 선언하고 값 10을 저장
float pi = 3.14; 실수형 변수 pi를 선언하고 값 3.14를 저장
char grade = 'A'; 문자형 변수 grade를 선언하고 문자 'A'를 저장
double d = 1.23e-2; 배정도 실수형 변수 d를 선언하고 값 1.23 × 10⁻²를 저장
short s = 32767; short의 최대값(32767)까지 정상적으로 저장 가능
int num = '5'; 문자 '5'를 저장하면 ASCII 코드 값(53) 으로 변환되어 저장됨
char ch = 100; 정수 100을 저장하면 ASCII 코드 기준으로 'd' 로 해석됨
float f = 'A'; 문자 'A'의 ASCII 코드 값(65.0)이 float로 저장됨
char str[] = "hello"; 문자열 "hello"를 저장할 수 있는 char 배열 선언

 

잘못된 변수 선언 예제 및 수정 방법

잘못된 변수 선언 오류 설명 올바른 선언
short s = 32768; short형은 최대값이 32767이라서 초과됨 int s = 32768;
int num = "5"; 정수형 변수에 문자열을 저장할 수 없음 char num = '5';
char ch = 10.5; char는 정수형이므로 실수를 저장할 수 없음 float ch = 10.5;
float f = "3.14"; float에는 문자열을 저장할 수 없음 float f = 3.14;
double d = "hello"; double에는 문자열 저장 불가 char str[] = "hello";
long long a = 1.5784E300L; long long은 정수형이라서 실수 저장 불가 long double a = 1.5784E300L;
char a = 10; char에 숫자를 저장하면 ASCII 문자로 해석됨 int a = 10;
  • 변수 선언 시 자료형에 맞는 값을 저장해야 함
  • char에는 반드시 한 글자의 문자만 저장 가능 ('A', '5' 등)
  • 정수형(int, short)에는 실수를 저장할 수 없음
  • 실수형(float, double)에는 문자열을 저장할 수 없음
  • 문자열을 저장하려면 char 배열을 사용해야 함

출저 및 참고

정보처리 산업기사 기본서(시나공)

728x90

'자격증 > 정보처리' 카테고리의 다른 글

데이터 입·출력  (0) 2025.02.10
연산자  (0) 2025.02.09
데이터 타입  (0) 2025.02.09
네트워크 관련 신기술  (0) 2025.02.08
DB관련 신기술  (0) 2025.02.08