0Pricing
C Academy · 강의

const 변수

값을 읽기 전용으로 만들어 보세요.

const 변수은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

const의 의미

const 키워드는 초기화가 끝난 후 변수의 값이 바뀌지 않아야 한다는 것을 컴파일러에 알립니다.

나중에 값을 수정하려고 하면 컴파일이 실패합니다. 이를 통해 계속 고정되어 있어야 하는 값을 보호할 수 있습니다.

const int MAX_USERS = 100;

const 선언하기

const 변수는 나중에 대입할 수 없으므로 선언할 때 값을 지정해야 합니다.

여기서는 PI를 한 번 초기화한 뒤, 읽기 작업에서는 일반 변수처럼 사용합니다.

#include <stdio.h>
int main(void) {
    const double PI = 3.14159;
    printf("%f\n", PI);
    return 0;
}

const 변경 시도하기

선언한 뒤 const 변수에 값을 대입하면 컴파일 오류가 발생합니다.

아래 줄은 컴파일러가 거부합니다. 이것이 바로 우리가 원하는 보호 기능입니다.

const int LIMIT = 50;
/* LIMIT = 60; <- compile error */

const에도 형식이 있습니다

단순한 매크로와 달리 const 변수에는 컴파일러가 검사하는 실제 형식이 있습니다.

따라서 형식 안전성을 얻을 수 있습니다. 컴파일러는 RATE가 double임을 알고 잘못된 사용을 경고합니다.

#include <stdio.h>
int main(void) {
    const double RATE = 0.05;
    double total = 200.0 * RATE;
    printf("%.2f\n", total);
    return 0;
}

포인터와 const: 데이터

포인터의 const 지정에는 두 가지 방식이 있습니다. const int *p는 p를 통해 가리키는 데이터를 변경할 수 없다는 뜻입니다.

p가 다른 대상을 가리키도록 이동할 수는 있지만, p를 통해 데이터를 쓸 수는 없습니다.

int x = 5;
const int *p = &x;
/* *p = 9; <- error: data is const */

포인터와 const: 포인터

int *const p는 포인터 자체를 다시 대입할 수 없지만, 가리키는 데이터는 변경할 수 있다는 뜻입니다.

선언은 오른쪽에서 왼쪽으로 읽으십시오. "p는 int를 가리키는 const 포인터입니다."

int x = 5, y = 8;
int *const p = &x;
*p = 9;       /* allowed */
/* p = &y;    <- error: pointer is const */

함수 인자 보호하기

포인터 매개변수에 const를 지정하면 함수가 호출한 쪽의 데이터를 수정하지 않겠다고 약속하는 것입니다.

이는 의도를 문서화하고 컴파일러가 실수로 발생한 쓰기를 찾아내도록 합니다.

#include <stdio.h>
void show(const char *msg) {
    printf("%s\n", msg);
}
int main(void) {
    show("hello");
    return 0;
}

계산에서 const 사용하기

흔히 세율이나 변환 계수처럼 고정된 설정값에 사용합니다.

상수를 읽어 사용하면 수식이 명확해지고 값도 한곳에서 관리할 수 있습니다.

#include <stdio.h>
int main(void) {
    const double KM_PER_MILE = 1.609;
    double miles = 10.0;
    printf("%.2f km\n", miles * KM_PER_MILE);
    return 0;
}

Const에는 메모리 위치가 있습니다

const는 실제 변수이므로 메모리를 차지하며 그 주소를 가져올 수 있습니다.

이는 주소가 없는 순수한 텍스트 치환인 #define 매크로와 다릅니다.

#include <stdio.h>
int main(void) {
    const int N = 42;
    const int *p = &N;
    printf("%d\n", *p);
    return 0;
}

범위와 수명

const는 일반 변수와 동일한 범위 규칙을 따릅니다.

함수 안에서 선언하면 지역 변수이고, 함수 밖에서 선언하면 전역 변수입니다. 이러한 범위 지정은 파일 전체에 적용되는 매크로보다 또 다른 장점입니다.

#include <stdio.h>
const int GLOBAL_MAX = 1000;
int main(void) {
    const int local_min = 1;
    printf("%d %d\n", local_min, GLOBAL_MAX);
    return 0;
}

const와 매직 넘버

코드의 숫자 그대로를 이름이 있는 const 값으로 바꾸면 "매직 넘버"가 사라집니다.

값이 바뀌더라도 전체 프로그램을 뒤질 필요 없이 한 줄만 수정하면 됩니다.

#include <stdio.h>
int main(void) {
    const int SECONDS_PER_MIN = 60;
    int minutes = 5;
    printf("%d seconds\n", minutes * SECONDS_PER_MIN);
    return 0;
}

빠른 확인

const의 동작을 얼마나 이해했는지 확인해 보세요.

복습

const 변수는 컴파일러가 변경되지 않도록 보호하는, 자료형이 지정된 읽기 전용 값입니다.

매크로와 달리 자료형, 범위, 주소를 가집니다. 포인터에서는 const가 데이터, 포인터 또는 둘 다에 적용될 수 있습니다. 다음에는 이를 #define과 비교해 보겠습니다.

자주 묻는 질문

“const 변수” 강의는 무료인가요?

네 — “const 변수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“const 변수”에서 뭘 배우나요?

값을 읽기 전용으로 만들어 보세요. 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“const 변수” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 열거형 정의하기
  2. 열거형 값과 범위
  3. const 변수
  4. #define 상수
← C Academy(으)로 돌아가기