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μ μ¬μ©μ 리뷰νλ©΄, μ½λμ μμ μ±κ³Ό κ°λ μ±μ λμ΄λλ° λμμ΄ λ κ²μ λλ€.