# ꡬ쑰체(struct)
ꡬ쑰체(struct)λ κ΄λ ¨λ λ°μ΄ν°λ₯Ό λ¬Άμ΄ νννκΈ° μν μ¬μ©μ μ μ λ°μ΄ν° νμμ λλ€. ꡬ쑰체λ λ©€λ² λ³μμ μ§ν©μΌλ‘ μ΄λ£¨μ΄μ§λ©°, κ° λ©€λ² λ³μλ λ€λ₯Έ λ°μ΄ν° νμμ κ°μ§ μ μμ΅λλ€. ꡬ쑰체λ ν΄λμ€μ μ μ¬νμ§λ§ ν΄λμ€μλ λͺ κ°μ§ μ€μν μ°¨μ΄μ μ΄ μμ΅λλ€.
ꡬ쑰체λ μΌλ°μ μΌλ‘ κ΄λ ¨λ λ°μ΄ν°λ₯Ό κ·Έλ£ΉννκΈ° μν΄ μ¬μ©λλ©°, νΉμ λμμ ꡬννκΈ° μν λ©€λ² ν¨μλ₯Ό κ°μ§ μ μμ΅λλ€. μ¬μ€ C++μμλ λ©€λ² ν¨μλ₯Ό μΌλ§λ μ§ κ°μ§ μλ μμ§λ§, λ°μ΄ν°λ₯Ό λ€λ£¨λ ꡬ쑰체μ νΉμ±μ λ§μ κΈ°λ₯μ νλ ν¨μλ μ μνμ§ μμ΅λλ€.(κ·Έλ΄ λ°μ ν΄λμ€λ₯Ό μ¨μΌ ν©λλ€) λ©€λ² λ³μλ μ£Όλ‘ κ΅¬μ‘°μ²΄ λ΄μμ μ§μ μ κ·Όλμ΄ μ¬μ©λ©λλ€. λν, ꡬ쑰체μ κΈ°λ³Έμ μΈ κ°μμ±μ publicμΌλ‘ μ€μ λμ΄ μμ΅λλ€. μ¦, ꡬ쑰체μ λ©€λ² λ³μμ ν¨μλ κΈ°λ³Έμ μΌλ‘ μΈλΆμμ μ§μ μ κ·Όν μ μμ΅λλ€.(ꡬ쑰체μ κΈ°λ³Έ μ κ·Ό μ§μ μλ publicμ λλ€. ν΄λμ€λ privateμ λλ€.)
struct Person {
std::string name;
int age;
float height;
};
name, age, heightλ Person ꡬ쑰체μ λ©€λ² λ³μμ λλ€. κ° λ©€λ² λ³μλ ν΄λΉ ꡬ쑰체 λ΄μμ λ°μ΄ν°λ₯Ό μ μ₯νλ μν μ ν©λλ€. μλ₯Ό λ€μ΄, Person ꡬ쑰체μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ©€λ² λ³μμ κ°μ ν λΉν μ μμ΅λλ€.
int main() {
Person person;
person.name = "John";
person.age = 30;
person.height = 175.5;
std::cout << "Name: " << person.name << std::endl;
std::cout << "Age: " << person.age << std::endl;
std::cout << "Height: " << person.height << std::endl;
return 0;
}
Person ꡬ쑰체μ μΈμ€ν΄μ€μΈ personμ μμ±νκ³ , λ©€λ² λ³μ name, age, heightμ κ°μ ν λΉν©λλ€. μ΄ν, std::coutλ₯Ό μ¬μ©νμ¬ λ©€λ² λ³μμ κ°μ μΆλ ₯ν©λλ€.
ꡬ쑰체λ μ£Όλ‘ λ°μ΄ν° μ μ₯μ΄λ κ°λ¨ν λ°μ΄ν° ꡬ쑰λ₯Ό νννλ λ° μ¬μ©λ©λλ€.
λν ν¨μμ 맀κ°λ³μμ κ°μκ° λ§μμ§λ©΄ κ΅¬μ‘°μ²΄λ‘ λ΄μμ 보λ΄κ±°λ, λ©€λ² λ³μμ ννν λλ κ΅¬μ‘°μ²΄λ‘ νννλ κ²½μ°λ λ§μ΅λλ€.
# ν΄λμ€(class)
C++μμ ν΄λμ€λ λ°μ΄ν°μ ν΄λΉ λ°μ΄ν°μ λν λμμ κ²°ν©νλ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κΈ°λ³Έμ μΈ κ΅¬μ± μμμ
λλ€. ν΄λμ€λ κ°μ²΄μ νμ΄λ©°, κ°μ²΄λ ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€μ
λλ€. ν΄λμ€λ μμ±(λ©€λ² λ³μ)κ³Ό λμ(λ©€λ² ν¨μ)μ μ μν©λλ€.
ν΄λμ€λ₯Ό μ μνλ κ²μ μλ‘μ΄ λ°μ΄ν° νμμ μμ±νλ κ²κ³Ό μ μ¬ν©λλ€. ν΄λμ€λ μΌλ°μ μΌλ‘ ν€λ νμΌ(.h λλ .hpp)μ μ μΈλλ©°, ν΄λμ€ μ μλ ν΄λΉ ν€λ νμΌμ ν¬ν¨λ©λλ€. ν΄λμ€μ λ©€λ² λ³μλ ν΄λμ€ λ΄μμ μ μΈλλ©°, κ°μ²΄μ μνλ₯Ό λνλ΄λ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€. λ©€λ² ν¨μλ ν΄λμ€ λ΄μμ μ μΈλκ³ μ μλλ©°, κ°μ²΄μ λμμ ꡬνν©λλ€.
class MyClass {
private:
int myVariable; // λ©€λ² λ³μ
public:
void setVariable(int value) {
myVariable = value;
}
int getVariable() {
return myVariable;
}
};
MyClassλ ν΄λμ€ μ΄λ¦μ΄λ©°, myVariableμ MyClassμ λ©€λ² λ³μμ λλ€. setVariableκ³Ό getVariableμ MyClassμ λ©€λ² ν¨μμ λλ€. setVariableμ myVariable κ°μ μ€μ νκ³ , getVariableμ myVariable κ°μ λ°νν©λλ€.
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄μ ν΄λΉ ν΄λμ€μ κ°μ²΄λ₯Ό μ μΈν΄μΌ ν©λλ€.
int main() {
MyClass obj;
obj.setVariable(42);
int value = obj.getVariable();
// valueλ 42κ° λ¨
return 0;
}
MyClass obj;λ MyClassμ κ°μ²΄μΈ objλ₯Ό μμ±ν©λλ€. obj.setVariable(42);λ objμ setVariable λ©€λ² ν¨μλ₯Ό νΈμΆνμ¬ myVariable κ°μ 42λ‘ μ€μ ν©λλ€. int value = obj.getVariable();λ objμ getVariable λ©€λ² ν¨μλ₯Ό νΈμΆνμ¬ myVariable κ°μ λ°ννκ³ , μ΄λ₯Ό value λ³μμ ν λΉν©λλ€.
ν΄λμ€λ λ°μ΄ν° μΊ‘μν, μμ, λ€νμ± λ± κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ€μν κ°λ
μ ꡬννλ λ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ ꡬ쑰ν, μ¬μ¬μ©μ±, μ μ§ λ³΄μμ±μ ν₯μμν¬ μ μμ΅λλ€.
# μμ±μμ μλ©Έμ κ·Έλ¦¬κ³ μ΄λμ λΌμ΄μ
μμ±μ
μμ±μλ κ°μ²΄κ° μμ±λ λ νΈμΆλλ λ©€λ² ν¨μμ λλ€. μμ±μλ ν΄λμ€μ λμΌν μ΄λ¦μ κ°μ§λ©°, λ°ν νμ μ κ°μ§μ§ μμ΅λλ€. μμ±μλ κ°μ²΄μ μ΄κΈ°ν μμ μ μννκ³ , λ©€λ² λ³μλ₯Ό μ΄κΈ°ννκ±°λ νμν 리μμ€λ₯Ό ν λΉνλ λ±μ μμ μ μ²λ¦¬ν©λλ€. μμ±μλ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μλμΌλ‘ νΈμΆλλ©°, κ°μ²΄λ₯Ό μ΄κΈ°ννλ λ° μ¬μ©λ©λλ€. μμ±μλ μ¬λ¬ κ°λ₯Ό μ€λ²λ‘λ©νμ¬ λ€μν μ΄κΈ°ν λ°©λ²μ μ 곡ν μ μμ΅λλ€.
μμ±μλ κ°μ²΄κ° λ§λ€μ΄μ§ λ νΈμΆλκΈ° λλ¬Έμ νλμ κ°μ²΄μ λν΄ μμ± μ νμ μμλ‘ νΈμΆν μ μμ΅λλ€.
class MyClass {
public:
MyClass() {
// κΈ°λ³Έ μμ±μ
}
MyClass(int value) {
// 맀κ°λ³μλ₯Ό λ°λ μμ±μ
}
};
μλ©Έμ
μλ©Έμλ κ°μ²΄κ° μλ©Έλ λ νΈμΆλλ λ©€λ² ν¨μμ λλ€. μλ©Έμλ ν΄λμ€μ λμΌν μ΄λ¦μ κ°μ§λ©°, μ΄λ¦ μμ ~ κΈ°νΈκ° λΆμ΅λλ€. μλ©Έμλ κ°μ²΄κ° λ μ΄μ νμνμ§ μμ λ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ λ¦¬μμ€λ₯Ό μ 리νκΈ° μν΄ μ¬μ©λ©λλ€. μλ©Έμλ κ°μ²΄κ° μ€μ½νλ₯Ό λ²μ΄λκ±°λ delete μ°μ°μλ‘ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν λ μλμΌλ‘ νΈμΆλ©λλ€. ν΄λμ€ λ΄μλ νλμ μλ©Έμλ§ μ μν μ μμΌλ©°, 맀κ°λ³μλ₯Ό κ°μ§μ§ μμ΅λλ€.
class MyClass {
public:
~MyClass() {
// μλ©Έμ
}
};
μ΄λμ λΌμ΄μ (Initializer)
μ΄λμ
λΌμ΄μ λ μμ±μμμ λ©€λ² λ³μλ₯Ό μ΄κΈ°ννλ λ° μ¬μ©λλ νΉλ³ν ꡬ문μ
λλ€. μ΄λμ
λΌμ΄μ λ μμ±μμ λͺΈμ²΄μμ λ©€λ² λ³μμ μ΄κΈ° κ°μ μ€μ νλ μν μ ν©λλ€. μ΄λμ
λΌμ΄μ λ λ©€λ² λ³μμ μμ±κ³Ό λμμ κ°μ ν λΉνλ―λ‘ μ±λ₯ ν₯μκ³Ό κ°μ²΄ μ΄κΈ°νμ μ μ©ν©λλ€.
class MyClass {
private:
int myVariable;
public:
MyClass(int value) : myVariable(value) {
// μ΄λμ
λΌμ΄μ λ₯Ό μ¬μ©νμ¬ myVariable μ΄κΈ°ν
}
};
μμ μμμμ myVariableμ μ΄λμ
λΌμ΄μ λ₯Ό μ¬μ©νμ¬ valueλ‘ μ΄κΈ°νλ©λλ€. μ΄λμ
λΌμ΄μ λ μ½λ‘ (:) λ€μμ λ©€λ² λ³μμ ν΄λΉ κ°μ μ§μ νλ ꡬ문μΌλ‘ μμ±λ©λλ€.
# λ°μ΄ν°μλ(Data Encapsulation)
C++μμ λ°μ΄ν° μλ(Data Encapsulation)μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μμΉ μ€ νλλ‘, ν΄λμ€μ λ΄λΆ λ°μ΄ν°λ₯Ό μΈλΆλ‘λΆν° μ¨κΈ°λ κ²μ μλ―Έν©λλ€. λ°μ΄ν° μλμ ν΄λμ€μ λ©€λ² λ³μμ λ©€λ² ν¨μλ₯Ό μ μ ν μΊ‘μννμ¬ μ§μ μ μΈ μ κ·Όμ μ ννκ³ , ν΄λμ€ λ΄λΆμμ λ°μ΄ν°λ₯Ό μ‘°μνκ³ μ μ§ν μ μλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ ν΄λμ€μ λ΄λΆ ꡬν μΈλΆ μ¬νμ μ¨κΈ°κ³ , λ°μ΄ν°μ λν μ κ·Όμ μ μ΄νμ¬ μμ μ±κ³Ό 보μμ±μ ν₯μμν΅λλ€.
C++μμ λ°μ΄ν° μλμ ꡬννλ λ°©λ²μ μ£Όλ‘ μ κ·Ό μ μ΄ μ§μμ(Access Specifiers)λ₯Ό νμ©ν©λλ€. C++μμλ μΈ κ°μ§μ μ κ·Ό μ μ΄ μ§μμλ₯Ό μ 곡ν©λλ€:
public: publicμΌλ‘ μ μΈλ λ©€λ² λ³μμ λ©€λ² ν¨μλ ν΄λμ€ μΈλΆμμ μμ λ‘κ² μ κ·Όν μ μμ΅λλ€. μ¦, ν΄λμ€ κ°μ²΄λ₯Ό ν΅ν΄ μ§μ μ μΌλ‘ μ κ·Όν μ μμ΅λλ€.
private: privateμΌλ‘ μ μΈλ λ©€λ² λ³μμ λ©€λ² ν¨μλ ν΄λμ€ μΈλΆμμ μ§μ μ κ·Όν μ μμ΅λλ€. μ€μ§ ν΄λμ€ λ΄λΆμμλ§ μ κ·Όν μ μμ΅λλ€. privateμΌλ‘ μ μΈλ λ©€λ²λ μΈλΆλ‘λΆν° μλλμ΄ μΈλΆμμμ μ€μ©μ λ°©μ§ν©λλ€.
protected: protectedλ‘ μ μΈλ λ©€λ² λ³μμ λ©€λ² ν¨μλ κΈ°λ³Έμ μΌλ‘ μΈλΆμμ μ κ·Όν μ μμ§λ§, νμ ν΄λμ€μμ μ κ·Όν μ μμ΅λλ€. protected λ©€λ²λ μμκ³Ό κ΄λ ¨λ κ°λ
μΈ μμλ ν΄λμ€μμ μ¬μ©λ λ μ£Όλ‘ νμ©λ©λλ€.
class MyClass {
private:
int privateVariable; // private λ©€λ² λ³μ
public:
void publicMethod() {
// public λ©€λ² ν¨μ
// privateVariableμ μ κ·Ό κ°λ₯
}
};
privateVariableμ privateμΌλ‘ μ μΈλμμΌλ―λ‘ ν΄λμ€ μΈλΆμμ μ§μ μ κ·Όν μ μμ΅λλ€. κ·Έλ¬λ publicMethodλ publicμΌλ‘ μ μΈλμ΄ ν΄λμ€ μΈλΆμμ μ κ·Όν μ μμΌλ©°, λ΄λΆμμ privateVariableμ μ κ·Όν μ μμ΅λλ€.
λ°μ΄ν° μλμ ν΄λμ€μ λ΄λΆ λ°μ΄ν°λ₯Ό 보νΈνκ³ κ°μ²΄μ 무결μ±μ μ μ§νκΈ° μν΄ μ€μν©λλ€. ν΄λμ€μ λ΄λΆ ꡬν μΈλΆ μ¬νμ μΈλΆλ‘λΆν° κ°μΆλ©΄, μ½λμ μ μ§ λ³΄μμ±μ΄ ν₯μλκ³ μλͺ»λ μ¬μ©μΌλ‘ μΈν μ€λ₯λ₯Ό λ°©μ§ν μ μμ΅λλ€. λν, λ°μ΄ν° μλμ μΊ‘μνμ ν¨κ» κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ
μ€ νλλ‘, μ½λμ λͺ¨λμ±κ³Ό μ¬μ¬μ©μ±μ λμ΄λ λ° λμμ μ€λλ€.
μμμ κ΄ν΄μλ λ€μ μ±ν°μμ μμΈν λ€λ£¨λλ‘ νκ² μ΅λλ€.
λκΈ