κ°μ²΄μ ν΄λμ€
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ νλ‘κ·Έλ¨ μ€κ³ λ°©λ² μ€ νλμ΄λ€.
OPPμ κ°μ₯ μ€μν κΈ°λ₯
- μΆμν
- μΊ‘μνμ λ°μ΄ν° μλ
- λ€ν
- μμ
- μ½λμ μ¬νμ©
ν΄λμ€(class)λ μ΄λ¬ν opp κΈ°λ₯λ€μ ꡬν λ° κ²°ν©νλλ° κ°μ₯ μ€μν c++ λꡬμ΄λ€.
μ μ°¨μ νλ‘κ·Έλλ°κ³Ό κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
oppμ κ·Ό λ°©μμ μ¬μ©νμ¬, νλ‘κ·Έλλ¨Έλ κ°μ²΄λ₯Ό μμ νλλ° νμν λ°μ΄ν°μ, μ¬μ©μκ° κ·Έ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°©λ²μ λν΄ μκ°νλ©΄μ, μ¬μ©μκ° μ΄ν΄νλ λ°©μλλ‘ κ°μ²΄μ μ΄μ μ λ§μΆλ€.
μΆμνμ ν΄λμ€
-λ°μ΄ν°νμ΄λ 무μμΈκ°?
κΈ°λ³Ένμ μμ νλ κ²μ λ€μκ³Ό κ°μ μΈ κ°μ§λ₯Ό κ²°μ νλ κ²μ΄λ€.
- λ°μ΄ν° κ°μ²΄μ νμν λ©λͺ¨λ¦¬μ ν¬κΈ°λ₯Ό κ²°μ νλ€
- λ©λͺ¨λ¦¬μ μλ λΉνΈλ€μ μ΄λ»κ² ν΄μν μ§ κ²°μ νλ€
- λ°μ΄ν° κ°μ²΄λ₯Ό μ¬μ©νμ¬ μνν μ μλ μ°μ°μ΄λ λ©μλλ₯Ό κ²°μ νλ€
c++μ ν΄λμ€
ν΄λμ€λ μΆμνλ₯Ό μ¬μ©μ μ μ λ°μ΄ν°νμΌλ‘ λ³νν΄ μ£Όλ c++μ μλ¨μ΄λ€. λ°μ΄ν° ννκ³Ό λ°μ΄ν°λ₯Ό μ‘°μνλ λ©μλλ€μ νλμ ν¨ν€μ§ μμ κ²°ν©ν¨
ν΄λμ€ μ μΈ: λ°μ΄ν° λ©€λ²μ public μΈν°νμ΄μ€,(λ©μλλΌκ³ λΆλ₯΄λ) λ©€λ² ν¨μλ₯Ό μ΄μ©νμ¬ λ°μ΄ν° ννμ μμ νλ€.
ν΄λμ€ λ©μλ μ μ: ν΄λμ€ λ©€λ² ν¨μκ° μ΄λ»κ² ꡬνλλμ§λ₯Ό μμ νλ€.
μ κ·Ό μ μ΄
privateμ publicλΌλ μλ‘μ΄ ν€μλκ° λμ λ¨.
μ΄ λ μ΄λΈλ€μ ν΄λμ€ λ©€λ²μ λν μ κ·Ό μ μ΄λ₯Ό μμ νλ€.
νΉμ ν΄λμ€μ κ°μ²΄λ₯Ό μ¬μ©νλ νλ‘κ·Έλ¨μ κ·Έ κ°μ²΄μ publicλΆλΆμλ μ§μ μ κ·Ό ν μ μλ€.
κ·Έλ¬λ νλ‘κ·Έλ¨μ public λ©€λ²ν¨μλ₯Ό ν΅ν΄μλ§ κ·Έ κ°μ²΄μ private λ©€λ²μ μ κ·Όν μ μλ€.
public λ©€λ²ν¨μλλ©€λ² ν¨μλ κ°μ²΄μ private λ©€λ²μ νλ‘κ·Έλ¨μ μλ λ€λ¦¬ μν μ΄λ€. μ¦ public λ©€λ² ν¨μλ κ°μ²΄μ νλ‘κ·Έλ¨ μ¬μ΄μ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€. μ΄μ κ°μ΄ νλ‘κ·Έλ¨μ΄ λ°μ΄ν°μ μ§μ μ κ·Όνμ§ λͺ»νκ² μ°¨λ¨νλ κ²μ λ°μ΄ν° μλ(data hiding)μ΄λΌ ν¨.
public μΈν°νμ΄μ€λ μ€κ³μ μΆμνλ₯Ό λνλΈλ€.
μΈλΆμ μΈ κ΅¬νλ€μ λ°λ‘ κ²°ν©νμ¬ μΆμνμ λΆλ¦¬νλ κ²μ μΊ‘μνλΌ νλ€.(λ°μ΄ν° μλμ΄ μΊ‘μνμ ν μμ΄λ€)
μΊ‘μνμ λ λ€λ₯Έ μλ ν΄λμ€ ν¨μλ€μ μ μλ₯Ό ν΄λμ€ μ μΈκ³Ό λ 립λ νμΌμ λ£λ κ²μ΄λ€.
λ©€λ² μ κ·Ό μ μ΄: public λλ private?
μΌλ°μ μΌλ‘ λ°μ΄ν°νλͺ©λ€μ private λΆλΆμ μ μΈλλ€.
ν΄λμ€ μΈν°νμ΄μ€λ₯Ό ꡬμ±νλ λ©€λ² ν¨μλ€μ public λΆλΆμ μ μΈλλ€. κ·Έλ μ§ μμΌλ©΄, ν¨μ νΈμΆ λΆκ°
private λΆλΆμ μ μΈλ λ©€λ²ν¨μλ νλ‘κ·Έλ¨μμ μ§μ νΈμΆν μ μλ€. (public λ©μλλ€μ μ¬μ© κ°λ₯)
μΌλ°μ μΌλ‘ private λ©€λ²ν¨μλ public μΈν°νμ΄μ€λ₯Ό ꡬμ±νμ§ μλ μΈλΆμ μΈ κ΅¬νμ μ²λ¦¬νλ λ° μ¬μ©λ¨.
ν΄λμ€ κ°μ²΄μ λν λν΄νΈ μ κ·Όμ μ΄κ° privateλ‘ μ§μ λμκΈ° λλ¬Έμ ν΄λμ€ μ μΈμμ ν€μλ privateλ μμ΄λ λλ€.
-ν΄λμ€ λ©€λ²ν¨μμ ꡬν
λ©€λ² ν¨μμ μ μλ κ°κ° νλμ ν¨μ 머리μ νλμ ν¨μ λͺΈμ²΄λ₯Ό κ°μ§λ€. λ©€λ² ν¨μ μ μλ 리ν΄νκ³Ό 맀κ°λ³μλ₯Ό κ°μ§ μ μλ€.
λ©€λ² ν¨μλ₯Ό μ μν λ, κ·Έ λ©€λ² ν¨μκ° μ΄λ ν΄λμ€μ μνλμ§ λνλ΄κΈ° μν΄ μ¬μ© λ²μ κ²°μ μ°μ°μ(::)λ₯Ό μ¬μ©ν΄μΌ ν¨
ν΄λμ€μ λ©μλλ κ·Έ ν΄λμ€μ private λΆλΆμλ§ μ κ·Ό κ°λ₯
ex) void Stock::update(double price)
Stock::update()λ κ·Έ ν¨μμ κ²μ¦λ μ΄λ¦μ΄λΌ λΆλ₯Έλ€. ννΈ, κ°λ¨ν update()λ κ·Έ μ 체 μ΄λ¦μ μ½μ νκΈ°λ‘, κ·Έ ν΄λμ€ μ¬μ©λ²μ μμμλ§ μ¬μ© κ°λ₯
λ©μλλ λ©€λ²κ° μλ ν¨μλ€μ μ¬μ©νμ¬ μ΄ λ°μ΄ν° λ©€λ²λ€μ μ κ·Όνλ € μλνλ©΄, μ»΄νμΌλ¬κ° λ©μΆκ² νλ€.
μΈλΌμΈ λ©μλ
ν΄λμ€ μ μΈ μμ μ μλ₯Ό κ°μ§κ³ μλ λͺ¨λ ν¨μλ μλμΌλ‘ μΈλΌμΈ ν¨μκ° λλ€.
μνλ€λ©΄ ν΄λμ€ μ μΈμ μΈλΆμ λ©€λ² ν¨μλ₯Ό μ μνκ³ , κ·Έκ²μ μΈλΌμΈ ν¨μλ‘ λ§λ€ μ μλ€. ν΄λμ€ μΈλΆ ꡬν λΆλΆμμ κ·Έ ν¨μλ₯Ό μ μν λ inlineμ΄λΌλ μ νμλ₯Ό λΆμ΄λ©΄ λλ€.
class Stock
{
private:
void set_tot();//μ μ λΆλ¦¬
public:
...
};
inline void Stock::set_tot()
{
total_val=shares*share_val;
}
μΈλΌμΈ ν¨μλ€μ κ·Έλ€μ΄ μ¬μ©λλ κ°κ°μ νμΌμμ μ μλ κ²μ μꡬν¨.
λ€μ€ νμΌ νλ‘κ·Έλ¨μ ꡬμ±νλ λͺ¨λ νμΌμμ μΈλΌμΈ μ μλ₯Ό μ¬μ©νλ κ°μ₯ μ¬μ΄ λ°©λ²μ, ν΄λΉ ν΄λμ€κ° μ μλΌμλ ν€λ νμΌμ μΈλΌμΈ μ μλ₯Ό ν¨κ» λ£λ κ².
μ΄λ κ°μ²΄κ° λ©μλλ₯Ό μ¬μ©ν κΉ?
κ°μ²΄λ₯Ό μμ±νλ λ°©λ² μ€ κ°μ₯ κ°λ¨ν κ²μ ν΄λμ€ λ³μλ₯Ό μ μΈνλ κ²μ΄λ€.
Stock kate,joe;
μ΄κ²μ kateμ joeλΌλ, stack ν΄λμ€μ λ κ°μ²΄λ₯Ό μμ±ν¨.
μ΄λ€ κ°μ²΄μ λ©€λ² ν¨μλ₯Ό μ¬μ©νλ λ°©λ²μ ꡬ쑰체μ ꡬ쑰체 λ©€λ²λ₯Ό μ¬μ©νλ―μ΄, λ©€λ² μ°μ°μλ₯Ό μ¬μ©νλ κ²μ΄λ€.
kate.show(); //kate κ°μ²΄κ° λ©€λ² ν¨μ νΈμΆ
joe.show(); //joe κ°μ²΄κ° λ©€λ² ν¨μ νΈμΆ
λ©€λ² ν¨μλ₯Ό νΈμΆν λμλ κ·Έ λ©€λ² ν¨μλ₯Ό νΈμΆνλ λ° μ¬μ©λ νΉμ ν κ°μ²΄μ λ°μ΄ν° λ©€λ²λ€μ΄ μ¬μ©λλ€.
μ€νμμ λ³κ²½
ostream ν΄λμ€λ μμμ 컨νΈλ‘€νλ λ©€λ² ν¨μλ₯Ό μ§λ λ€.
std::cout.setf(std::ios_base::fixed,std::ios_base::floatfield);
μ΄κ²μ νλκ·Έλ₯Ό κ³ μ μμμ νκΈ°λ₯Ό μ¬μ©νκΈ° μν΄ cout κ°μ²΄ μμ νλκ·Έλ₯Ό μΈν νλ€. λ€μμ ꡬ문μ coutλ‘ νμ¬κΈ κ³ μ μμμ νκΈ°λ₯Ό μ¬μ©ν λ, μμμ μ΄ν μΈ μ리κΉμ§ 보μ¬μ£Όλλ‘ ν¨. std::cout.precision(3);
λ©μλμ λν λ³κ²½ μ¬νμ ꡬνν λμλ, ν΄λΌμ΄μΈνΈ νλ‘κ·Έλ¨μ λ€λ₯Έ λΆλΆμ λνμ¬ μν₯μ μ£Όμ§ μμμΌ ν¨. λ°λΌμ λ©μλκ° νΈμΆλκΈ° μ΄μ μ μνλ‘ μ 보λ₯Ό 리μ νλ κ²μ΄ μμ λ μ¬μ©λ²μ΄λ€.
std::streamsize prec = std::cout.precision(3);
//μ νμ±μ μν΄ μ΄μ κ°μ μ μ₯
...
std::cout.precision(prec); //κ³Όκ±° κ°μΌλ‘ 리ν΄
//μλ³Έ νλκ·Έ μ μ₯
std::ios_base::fmtflags orig = std::cout.setf(std::ios_base::fixed);
...
//μ μ₯λ κ° λ¦¬μ
std::cout.setf(orig,std::ios_base::floatfield);
μ§κΈκΉμ§μ μ€λͺ μμ½
ν΄λμ€ μ€κ³λ₯Ό μμ νλ 첫 λ²μ§Έ λ¨κ³λ ν΄λμ€ μ μΈμ μ 곡νλ κ²μ΄λ€. ν΄λμ€ μ μΈμ λ°μ΄ν° λ©€λ²μ ν¨μ λ©€λ²λ₯Ό κ°μ§λ€. private λΆλΆμ μ μΈλ λ©€λ²λ€μ λ©€λ² ν¨μλ€μ ν΅ν΄μλ§ μ κ·Ό κ°λ₯. public λΆλΆμ μ μΈλ λ©€λ²λ€μ ν΄λμ€ κ°μ²΄λ₯Ό μ¬μ©νμ¬ νλ‘κ·Έλ¨μ΄ μ§μ μ κ·Ό κ°λ₯.
μΌλ°μ μΌλ‘, λ°μ΄ν° λ©€λ²λ€μ private λΆλΆμ λ€μ΄κ°κ³ , λ©€λ² ν¨μλ€μ public λΆλΆμ λ€μ΄κ°λ€.
ν΄λμ€ μ μΈμ μΌλ°μ μΈ νμ
class className
{
private:
data member declarations
public:
member function prototypes
};
ν΄λμ€ μ€κ³λ₯Ό μμ νλ λ λ²μ§Έ λ¨κ³λ ν΄λμ€ λ©€λ² ν¨μλ₯Ό ꡬννλ κ².
ν΄λμ€ μ μΈμ ν¨μ μν λμ μμ ν ν¨μ μ μλ₯Ό λ£μ μ μμΌλ, μΌλ°μ μΌλ‘ λ§€μ° μ§§μ ν¨μλ€μ μ μΈνκ³ ν¨μ μ μλ€μ λ°λ‘ λΆλ¦¬νμ¬ μ 곡νλ€.
κ·Έ ν, λ©€λ² ν¨μκ° μ΄λ ν΄λμ€μ μνλμ§ μ¬μ© λ²μ κ²°μ μ°μ°μλ₯Ό μ¬μ©ν¨.
μλ₯Ό λ€μ΄ Bozo ν΄λμ€κ° charλ₯Ό μ§μνλ ν¬μΈν°λ₯Ό 리ν΄νλ Retort()λΌλ λ©€λ² ν¨μλ₯Ό κ°μ§λ€ νλ©΄ ν¨μ 머리λ λ€μκ³Ό κ°λ€.
char * Bozo::Retort()
μ΄λ€ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ €λ©΄, ν΄λμ€ μ΄λ¦μ λ°μ΄ν°νμ²λΌ μ¬μ©νλ©΄ λλ€.
Bozo bozetta;
ν΄λμ€ κ°μ²΄λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ ν΄λμ€ λ©€λ² ν¨μ(λλ λ©μλ)λ₯Ό νΈμΆνλ€. λνΈ λ©€λ² μ°μ°μλ₯Ό μ¬μ©ν΄μΌ νλ€.
cout<<bozetta.Retort();
ν΄λμ€ μμ±μμ νκ΄΄μ
c++λ, μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ κ·Έλ€μ λ°μ΄ν° λ©€λ²μ κ°μ λμ ν΄ μ£Όλ ν΄λμ€ μμ±μ(class constructor)λΌλ νΉλ³ν λ©€λ² ν¨μλ₯Ό μ 곡ν¨
μμ±μμ μ΄λ¦μ ν΄λμ€μ μ΄λ¦κ³Ό κ°λ€. μλ₯Ό λ€μ΄, Stockμ΄λΌλ ν΄λμ€μ μμ±μλ Stock()μ΄λΌλ μ΄λ¦μ λ©€λ² ν¨μμ΄λ€.
μμ±μλ λ¦¬ν΄ κ°μ΄ μλλ°λ void νμΌλ‘ μ μΈνμ§ μλλ€. μμ±μμλ λ°μ΄ν°νμ μ μΈνμ§ μλλ€.
μμ±μμ μ μΈκ³Ό μ μ
Stock κ°μ²΄λ μΈλΆμμ μ 곡λλ μΈ κ°μ κ°μ κ°μ§λ€κ³ νμ.
(const string &,long , double νμ 맀κ°λ³μλ₯Ό μ 곡νκ³ , longκ³Ό double νμ κ°λ€μ 0μΌλ‘ μ€μ νκΈ°λ₯Ό μνλ€κ³ κ°μ .(λν΄νΈ 맀κ°λ³μ μ¬μ©))
//λν΄νΈ 맀κ°λ³μλ₯Ό μ¬μ©νλ μμ±μμ μν
Stock(const string & co,long n=0,double pr=0.0);
//μμ±μ μ μ
Stock::Stock(const string &co, long n, double pr)
{
company=co;
if(n<0)
{
std::cout<<"μ£Όμ μλ μμκ° λ μ μμΌλ―λ‘,"
<<company<<" sharesλ₯Ό 0μΌλ‘ μ€μ .\n";
shares=0;
}
else
shares=n;
share_val=pr;
set_tot();
}