[E-Z] const λ¦¬λ·°ν•˜κΈ°πŸ¨

codereview

[E-Z] const λ¦¬λ·°ν•˜κΈ°πŸ¨

μ €λŠ” μ’…μ’… λ‹¨μˆœν•œ μƒμˆ˜λ₯Ό 써야할 λ•Œ const, enum, inline λ“± μ—¬λŸ¬ κ΅¬ν˜„ 방법이 μžˆλŠ”λ°λ„ 맀크둜λ₯Ό κ³§λ°”λ‘œ νŽΈν•˜κ²Œ μ“Έ λ•Œκ°€ λ§ŽμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 λ•Œμ˜ 맀크둜의 단점은 λšœλ ·ν•˜κΈ΄ ν•˜μ£ . κ°€μž₯ λ¨Όμ € μƒκ°λ‚˜λŠ” 것은 숫자 μƒμˆ˜λ‘œ λŒ€μ²΄λœ μ½”λ“œμ—μ„œ 컴파일 μ—λŸ¬λΌλ„ λ°œμƒν•˜λ©΄ ν—·κ°ˆλ¦°λ‹€λŠ” μ μž…λ‹ˆλ‹€.πŸ™„

디버깅이 μ‰¬μš΄ const

#define PI 3.14
const double pi=3.14;

μ†ŒμŠ€μ½”λ“œκ°€ μ»΄νŒŒμΌλŸ¬μ—κ²Œ PIλ₯Ό μ•Œλ €μ£ΌκΈ° 전에, μ„ ν–‰ μ²˜λ¦¬μžκ°€ 숫자 μƒμˆ˜λ‘œ λŒ€μ²΄ν•΄λ²„λ¦¬λ―€λ‘œ μ»΄νŒŒμΌλŸ¬λŠ” PIκ°€ μ•„λ‹ˆλΌ 3.14둜 μΈμ‹ν•©λ‹ˆλ‹€. 즉, PIλŠ” 컴파일러의 기호 ν…Œμ΄λΈ”μ— λ“€μ–΄κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ 되면 맀크둜 μ‚¬μš© 쀑 였λ₯˜κ°€ λ°œμƒν•˜λ©΄, 컴파일러의 μ—λŸ¬ λ©”μ‹œμ§€κ°€ 맀크둜 μΉ˜ν™˜μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—λŸ¬μ˜ 원인을 μΆ”μ ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‹¨μˆœν•œ μƒμˆ˜λ₯Ό μ“Έ λ•ŒλŠ”, 맀크둜 λŒ€μ‹  const 객체(λ˜λŠ” enum)λ₯Ό μ“°λŠ” 편이 μ’‹μŠ΅λ‹ˆλ‹€. const λ³€μˆ˜λŠ” μ‹€μ œ λ©”λͺ¨λ¦¬ μœ„μΉ˜μ— μ €μž₯되기 λ•Œλ¬Έμ—, 디버깅 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜μ˜ 값을 직접 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ—λŸ¬λ₯Ό μΆ”μ ν•˜λŠ”λ° μœ λ¦¬ν•©λ‹ˆλ‹€.

λ‹¨μˆœν•œ μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ”λ° 맀크둜λ₯Ό 썼닀면, κ·Έ λŒ€μ‹ μ— 디버깅에 μš©μ΄ν•œ const λ³€μˆ˜λ₯Ό μ¨λ³΄μžλŠ” μ½”λ“œλ¦¬λ·°λ₯Ό ν•  수 μžˆκ² μŠ΅λ‹ˆλ‹€.

νƒ€μž… μ—λŸ¬λ₯Ό 체크할 수 μžˆλŠ” const

const int MAX_SIZE = 100;
int array[MAX_SIZE];

constλŠ” νƒ€μž…μ„ κ°–κΈ° λ•Œλ¬Έμ—, λ³€μˆ˜μ˜ νƒ€μž…κ³Ό κ°’μ˜ 일관성을 보μž₯ν•©λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” νƒ€μž…κ³Ό κ΄€λ ¨λœ 였λ₯˜λ₯Ό 체크할 수 μžˆμŠ΅λ‹ˆλ‹€.

#define MAX_SIZE 100
int array[MAX_SIZE];

맀크둜 μƒμˆ˜λŠ” νƒ€μž…μ΄ μ—†κΈ° λ•Œλ¬Έμ—, 맀크둜 μƒμˆ˜μ™€ λ‹€λ₯Έ νƒ€μž…μ˜ 값이 연산에 μ‚¬μš©λ  λ•Œ νƒ€μž… κ΄€λ ¨ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μŠ€μ½”ν”„ λ‚΄μ—μ„œ μœ νš¨ν•œ const

const int MAX_SIZE = 100;

void function() {
    int array[MAX_SIZE];
    // `const` λ³€μˆ˜ MAX_SIZEλŠ” νƒ€μž…μ΄ λͺ…ν™•ν•˜κ³ , μŠ€μ½”ν”„κ°€ μ œν•œλ¨
}

const λ³€μˆ˜λŠ” μŠ€μ½”ν”„ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ―€λ‘œ, μ „μ—­μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ§€ν¬λ‘œμ— λΉ„ν•΄ 이름 좩돌의 κ°€λŠ₯성이 μ μŠ΅λ‹ˆλ‹€. 이 λ•Œ, μƒμˆ˜κ°€ ν•„μš”ν•œ μŠ€μ½”ν”„ λ‚΄μ—μ„œλ§Œ μ„ μ–Έλ˜μ—ˆλŠ”μ§€ κ²€ν† ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

#define MAX_SIZE 100

void function() {
    int array[MAX_SIZE];
    // 맀크둜 μƒμˆ˜ MAX_SIZEκ°€ λ³€κ²½λ˜λ©΄, λͺ¨λ“  μ‚¬μš© μ½”λ“œμ— 영ν–₯을 λ―ΈμΉ¨
}

λ°˜λŒ€λ‘œ λ§€ν¬λ‘œλŠ” μ „μ—­μ μœΌλ‘œ μœ νš¨ν•˜κΈ° λ•Œλ¬Έμ—, 이름 μΆ©λŒμ΄λ‚˜ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ™μž‘μ„ μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ „μ—­μ μœΌλ‘œ μœ νš¨ν•˜λ‹€λŠ” νŠΉμ„±μ„ μ΄μš©ν•΄μ„œ 효율적으둜 μ½”λ“œλ₯Ό ꡬ성할 λ•Œλ„ μžˆμ§€λ§Œ, 이름 μΆ©λŒμ— λŒ€ν•œ λ¦¬μŠ€ν¬λŠ” μžˆμŠ΅λ‹ˆλ‹€. λ°˜λ“œμ‹œ ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄, λΆˆν•„μš”ν•œ 전역선언을 ν”Όν•˜κ³  const λ³€μˆ˜λ₯Ό μ“Έ 수 μžˆλ„λ‘ 리뷰할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ 가독성을 λ†’μ΄λŠ” const

constλŠ” 개발자의 μ˜λ„κ°€ λΆ„λͺ…ν•˜κ²Œ λ…Ήμ•„ μžˆμŠ΅λ‹ˆλ‹€. const ν‚€μ›Œλ“œκ°€ 뢙은 κ°μ²΄λŠ” μ™ΈλΆ€ 변경이 μ•ˆλ˜κ³ , 이λ₯Ό 의미적인 μ œμ•½μ΄λΌκ³  ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 의미적인 μ œμ•½μ„ μ†ŒμŠ€ μ½”λ“œ μˆ˜μ€€μ—μ„œ 뢙이고, μ»΄νŒŒμΌλŸ¬κ°€ μ œμ•½μ„ μ§€μΌœμ€λ‹ˆλ‹€. ν•œ λ§ˆλ””λ‘œ, μ–΄λ–€ 값이 λΆˆλ³€μ΄μ–΄μ•Ό ν•œλ‹€λŠ” μ œμž‘μžμ˜ μ˜λ„λ₯Ό μ»΄νŒŒμΌλŸ¬μ™€ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έμ™€ λ‚˜λˆŒ 수 μžˆλŠ” μˆ˜λ‹¨μž…λ‹ˆλ‹€.
μ½”λ“œ κ°€λ…μ„±μΈ‘λ©΄μ—μ„œ μ†Œκ°œν–ˆμ§€λ§Œ, 이 의미적인 μ œμ•½μ—λŠ” μ˜λ„μΉ˜ μ•Šμ€ 버그 λ°©μ§€, 높은 μœ μ§€λ³΄μˆ˜μ„±, 주석 없이 λΆˆλ³€μ„± λͺ…μ‹œ 등을 μ „λΆ€ λ‚΄ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

상황별 const의 λΆˆλ³€μ„± μœ μ˜ν•˜κΈ°

μƒμˆ˜ λ³€μˆ˜

첫째, λ³€μˆ˜μ˜ λΆˆλ³€μ„±μ„ ν™•μΈν•˜λ©΄μ„œ const λ³€μˆ˜λ₯Ό 리뷰할 수 μžˆμŠ΅λ‹ˆλ‹€.

const x = 10;
x = 20; // 였λ₯˜ λ°œμƒ

λ‘˜μ§Έ, μƒμˆ˜λ‘œ μ„ μ–Έλœ λ³€μˆ˜λ“€μ΄ μ‹€μ œλ‘œ λ³€κ²½λ˜μ§€ μ•Šμ•„μ•Ό ν•˜λŠ” 값듀인지 κ²€ν† ν•©λ‹ˆλ‹€. 즉, λ³€μˆ˜μ˜ λΆˆλ³€μ„±μ΄ λ…Όλ¦¬μ μœΌλ‘œ λ§žλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

const MAX_USERS = 100; // μƒμˆ˜λ‘œ 적절
const userName = 'John'; // μƒμˆ˜λ‘œ 적절

κ³„μ†ν•΄μ„œ const의 μž₯점 μœ„μ£Όλ‘œ μ„€λͺ…ν–ˆμ§€λ§Œ, κ°’μ˜ 변경이 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ, κ²½μš°μ— 따라 μœ μ—°μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€λŠ” 단점이 될 수 μžˆμŠ΅λ‹ˆλ‹€. 값이 변경될 κ°€λŠ₯성이 μžˆλŠ” κ²½μš°μ—λŠ” constλ₯Ό μ‚¬μš©ν•˜κΈ° μ μ ˆν•˜μ§€ μ•Šμ„ 수 μžˆμœΌλ―€λ‘œ ν”„λ‘œμ νŠΈμ˜ μ—¬λŸ¬ 상황을 κ³ λ €ν•˜μ—¬ λ³€μˆ˜ λΆˆλ³€μ„±μ— λŒ€ν•œ 논리성을 리뷰해볼 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°μ²΄λ‚˜ λ°°μ—΄

κ°μ²΄λ‚˜ 배열을 const둜 μ„ μ–Έν•œ 경우, ν•΄λ‹Ή κ°μ²΄λ‚˜ λ°°μ—΄μ˜ μš”μ†ŒλŠ” λ³€κ²½ν•  수 μžˆμ§€λ§Œ λ³€μˆ˜ 자체λ₯Ό μž¬ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이 점을 μ΄ν•΄ν•˜κ³  적절히 μ‚¬μš©λ˜κ³  μžˆλŠ”μ§€ λ¦¬λ·°ν•©λ‹ˆλ‹€.

const arr = [1, 2, 3];
arr[2] = 4; // κ°€λŠ₯
arr = [1, 2, 3, 4]; // 였λ₯˜ λ°œμƒ

μƒμˆ˜ 포인터

μƒμˆ˜ ν¬μΈν„°λŠ” ν¬μΈν„°μ˜ 값을 λ³€κ²½ν•  수 없도둝 μ„€μ •ν•œ 포인터λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 포인터 자체의 μƒμˆ˜μ„±κ³Ό 관련이 있으며, 포인터가 κ°€λ¦¬ν‚€λŠ” λŒ€μƒμ˜ λ°μ΄ν„°μ™€λŠ” λ‹€λ¦…λ‹ˆλ‹€. 보톡 μ£Όμ†Œ 변경을 λ°©μ§€ν•˜λ©΄μ„œ 데이터에 μ ‘κ·Όν•˜κ³  μˆ˜μ •ν•  수 μžˆλ„λ‘ ν•˜λŠ” κ²½μš°μ— μœ μš©ν•©λ‹ˆλ‹€.

#include <iostream>

int main() {
    int value1 = 10;
    int value2 = 20;
    int* const ptr = &value1; // ptr은 μƒμˆ˜ 포인터

    std::cout << "Value1: " << *ptr << std::endl; // Output: Value1: 10

    *ptr = 30; // κ°€λŠ₯: ptr이 κ°€λ¦¬ν‚€λŠ” λ°μ΄ν„°λŠ” λ³€κ²½ κ°€λŠ₯
    std::cout << "Value1 after modification: " << *ptr << std::endl; // Output: Value1 after modification: 30

    // ptr = &value2; // 였λ₯˜: ptr은 μƒμˆ˜ ν¬μΈν„°μ΄λ―€λ‘œ, λ‹€λ₯Έ μ£Όμ†Œλ₯Ό 가리킬 수 μ—†μŒ
    
    return 0;
}

이 μ˜ˆμ œμ—μ„œ, ptr은 value1의 μ£Όμ†Œλ₯Ό 가리킀고 μžˆμŠ΅λ‹ˆλ‹€. 포인터 ptr을 톡해 value1의 값을 λ³€κ²½ν•  수 μžˆμ§€λ§Œ, ptr이 λ‹€λ₯Έ μ£Όμ†Œλ₯Ό 가리킀도둝 ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. ptr에 μƒˆλ‘œμš΄ μ£Όμ†Œλ₯Ό ν• λ‹Ήν•˜λ €κ³  ν•˜λ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μƒμˆ˜ 데이터 (const int* ptr)λŠ” 포인터가 κ°€λ¦¬ν‚€λŠ” λ°μ΄ν„°μ˜ μƒμˆ˜μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€. 포인터가 κ°€λ¦¬ν‚€λŠ” λ°μ΄ν„°λŠ” λ³€κ²½ν•  수 μ—†μ§€λ§Œ, 포인터 μžμ²΄λŠ” λ‹€λ₯Έ μ£Όμ†Œλ₯Ό 가리킬 수 μžˆμŠ΅λ‹ˆλ‹€.

#include <iostream>

int main() {
    int value1 = 10;
    const int* ptr = &value1; // ptr은 μƒμˆ˜ 포인터

    std::cout << "Value1: " << *ptr << std::endl; // Output: Value1: 10

    *ptr = 30; // 였λ₯˜: *ptrλŠ” const둜 μ„ μ–Έλ˜μ—ˆμœΌλ―€λ‘œ λ³€κ²½ λΆˆκ°€
    return 0;
}

μ•„λž˜μ˜ κ²½μš°λŠ” 포인터와 포인터가 κ°€λ¦¬ν‚€λŠ” 데이터 λͺ¨λ‘λ₯Ό μƒμˆ˜λ‘œ λ§Œλ“­λ‹ˆλ‹€.

const char* const name = "Pando Kim"; //const std::string name = "Pando Kim";

μœ„μ˜ 차이λ₯Ό μœ μ˜ν•˜μ—¬ 상황에 맞게 μ“°μ˜€λŠ”μ§€ 리뷰할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜

ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜μ— constλ₯Ό 뢙일 수 μžˆλŠ”λ°, 이λ₯Ό 톡해 λ§€κ°œλ³€μˆ˜κ°€ ν•¨μˆ˜ λ‚΄μ—μ„œ λ³€κ²½λ˜μ§€ μ•ŠμŒμ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

void printMessage(const std::string& message) {
    std::cout << message << std::endl;
    // messageλŠ” const 참쑰둜 μ „λ‹¬λ˜μ–΄μ„œ ν•¨μˆ˜ λ‚΄μ—μ„œ λ³€κ²½ν•  수 μ—†μŒ
}

μ—¬κΈ°μ„œ const std::string&λŠ” messageκ°€ ν•¨μˆ˜ λ‚΄μ—μ„œ λ³€κ²½λ˜μ§€ μ•ŠμŒμ„ 보μž₯ν•©λ‹ˆλ‹€. μ΄λŠ” 특히 객체λ₯Ό 참쑰둜 전달할 λ•Œ μœ μš©ν•˜λ©°, λ§€κ°œλ³€μˆ˜κ°€ μˆ˜μ •λ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•©λ‹ˆλ‹€.

ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž…

ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž…μ— constλ₯Ό 뢙일 수 μžˆλŠ”λ°, c와 cpp μ—μ„œμ˜ ν™œμš© λΆ„μ•Όκ°€ 살짝 λ‹€λ₯΄λ‹€λŠ” 점을 이해해야 ν•©λ‹ˆλ‹€. Cμ—μ„œλŠ” ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž…μ— constλ₯Ό λΆ™μ΄λŠ” 것이 μ œν•œμ μ΄κ³ , 주둜 포인터와 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€. ν•¨μˆ˜κ°€ 포인터λ₯Ό λ°˜ν™˜ν•˜λ©°, λ°˜ν™˜λœ 포인터λ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 변경을 λ°©μ§€ν•©λ‹ˆλ‹€.

const char* getGreeting() {
    return "Hello, world!";
}

int main() {
    const char* greeting = getGreeting();
    // greeting[0] = 'h'; // 였λ₯˜: λ°˜ν™˜λœ λ¬Έμžμ—΄μ€ const둜 μ„ μ–Έλ˜μ–΄ μˆ˜μ •ν•  수 μ—†μŒ
}

λ¬Όλ‘  κΈ°λ³Έ 데이터 νƒ€μž…μ—μ„œλ„ λ°˜ν™˜ 값이 λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, κ°’ νƒ€μž…μ—λŠ” 주둜 constλ₯Ό λΆ™μ΄λŠ” 것이 거의 ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

const int getValue() {
    return 42;
}

int main() {
    const int value = getValue();
    // value = 50; // 였λ₯˜: valueλŠ” const둜 μ„ μ–Έλ˜μ–΄μ„œ λ³€κ²½ λΆˆκ°€
}

cppμ—μ„œλŠ” ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž…μ— constλ₯Ό 더 널리 μ‚¬μš©ν•˜λ©°, 포인터, μ°Έμ‘°, 객체 λ“± λ‹€μ–‘ν•œ κ²½μš°μ— μ μš©λ©λ‹ˆλ‹€. 포인터 λ°˜ν™˜μ˜ 경우, c와 κ°™μŠ΅λ‹ˆλ‹€.
const 객체 μ°Έμ‘° λ°˜ν™˜μ€ 객체λ₯Ό 참쑰둜 λ°˜ν™˜ν•˜λ˜, 객체의 변경을 λ°©μ§€ν•©λ‹ˆλ‹€. 특히 클래슀의 멀버 ν•¨μˆ˜μ—μ„œ μœ μš©ν•©λ‹ˆλ‹€.

class MyClass {
public:
    const std::string& getName() const {
        return name;
    }
private:
    std::string name = "Example";
};

int main() {
    MyClass obj;
    const std::string& name = obj.getName();
    // name += " Changed"; // 였λ₯˜: name은 const둜 μ„ μ–Έλ˜μ–΄μ„œ μˆ˜μ • λΆˆκ°€
}

μ—¬κΈ°μ„œ const std::string&λŠ” getName ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” μ°Έμ‘°κ°€ const둜 λ˜μ–΄ μžˆμ–΄, λ°˜ν™˜λœ μ°Έμ‘°λ₯Ό 톡해 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€. const 객체 λ°˜ν™˜μ€ 객체λ₯Ό λ°˜ν™˜ν•˜λ˜, λ°˜ν™˜λœ κ°μ²΄λŠ” λ³€κ²½ν•  수 μ—†μŒμ„ 보μž₯ν•©λ‹ˆλ‹€.

const std::string getString() {
    return "Hello, world!";
}

int main() {
    const std::string str = getString();
    // str += " Changed"; // 였λ₯˜: str은 const둜 μ„ μ–Έλ˜μ–΄μ„œ μˆ˜μ • λΆˆκ°€
}

μ—¬κΈ°μ„œ const std::stringλŠ” λ°˜ν™˜λœ std::string 객체가 λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ constλ₯Ό 적절히 μ‚¬μš©ν•˜λ©΄, ν•¨μˆ˜μ˜ λ°˜ν™˜ 값이 μ˜λ„ν•œ λŒ€λ‘œ λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ ν•˜μ—¬ μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό 신뒰성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μƒμˆ˜ 멀버 ν•¨μˆ˜

μƒμˆ˜ 멀버 ν•¨μˆ˜λŠ” ν•΄λ‹Ή 멀버 ν•¨μˆ˜κ°€ μƒμˆ˜ 객체에 λŒ€ν•΄ 호좜될 ν•¨μˆ˜μž…λ‹ˆλ‹€. 즉, 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒμ„ 보μž₯ν•©λ‹ˆλ‹€.

class MyClass {
public:
  void myMethod() const {
    // 이 λ©”μ„œλ“œλŠ” 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ
  }
};

const 멀버 ν•¨μˆ˜κ°€ 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”μ§€ κ²€ν† ν•˜κ³ , ν•„μš”ν•  λ•Œ constλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ 리뷰할 수 μžˆμŠ΅λ‹ˆλ‹€.

마치며

λ§€ν¬λ‘œμ™€ constλ₯Ό λΉ„κ΅ν•˜λ©° 글을 μ‹œμž‘ν–ˆμ§€λ§Œ, constμ—λŠ” μž₯점만 μžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. 결둠적으둜 constλ₯Ό μ‚¬μš©ν•  μœ„μΉ˜μ™€ λͺ©μ μ— 맞게 μ‚¬μš©ν•  수 μžˆλ„λ‘ 리뷰해야 ν•©λ‹ˆλ‹€.πŸ˜‰ λ³€μˆ˜, 객체, λ°°μ—΄, ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜ λ“± 각각의 μ»¨ν…μŠ€νŠΈμ—μ„œ constκ°€ μ–΄λ–»κ²Œ μ μš©λ˜λŠ”μ§€ μ΄ν•΄ν•˜κ³ , μ½”λ“œλ₯Ό μ•ˆμ •μ μœΌλ‘œ λ§Œλ“œλŠ” 방법을 κ³ λ―Όν•΄λ³Ό 수 μžˆλŠ” μ‹œκ°„μ΄ λ˜μ—ˆλ‹€λ©΄ κ°μ‚¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μœ„μ—μ„œ μ–ΈκΈ‰ν•œ μ—¬λŸ¬ κ°€μ§€ κ΄€μ μ—μ„œ const의 μ‚¬μš©μ„ λ¦¬λ·°ν•˜λ©΄, μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό 가독성을 λ†’μ΄λŠ”λ° 도움이 될 κ²ƒμž…λ‹ˆλ‹€.