πŸ“– Cλž‘ C++

C++ 클래슀 λ©€λ²„λ³€μˆ˜ μ΄ˆκΈ°ν™”λ₯Ό μ•Œμ•„λ³΄μž

bell22 2021. 3. 25. 14:40

클래슀λ₯Ό μ‚¬μš©ν•  λ•Œ, 

클래슀 μ•ˆμ— μžˆλŠ” 멀버 λ³€μˆ˜μ— λŒ€ν•΄μ„œ μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ€˜μ•Όν•œλ‹€λŠ” 것은

잘 μ•Œκ³  μžˆλŠ”λ° μ—¬λŸ¬κ°€μ§€ 방법 쀑 μ–΄λŠ 것을 μ¨μ•Όν• κΉŒ? 에 λŒ€ν•΄μ„œ

닀뀄보렀고 ν•œλ‹€

또 ν—·κ°ˆλ¦¬λŠ” 일이 없도둝 ~~

 

 

- 클래슀 멀버 λ³€μˆ˜λž€

- 클래슀 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™” 방법 3가지


1. 클래슀 멀버 λ³€μˆ˜ (Class Member Variable) λž€

클래슀 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™”λ₯Ό ν•˜λ €λ©΄, λ¨Όμ € 멀버 λ³€μˆ˜λ₯Ό μ•Œμ•„μ•Όν•˜λ‹ˆκΉŒ

짧게 μ •λ¦¬λ§Œ ν•˜λ €κ³  ν•œλ‹€

 

μœ„ν‚€λ°±κ³Ό 인용: 
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 멀버 λ³€μˆ˜(member variable) λ˜λŠ” 멀버 ν•„λ“œλŠ” νŠΉμ • 객체와 μ—°κ²°λœ λ³€μˆ˜μ˜ ν•˜λ‚˜μ΄λ©°, ν•΄λ‹Ή λ³€μˆ˜μ˜ λͺ¨λ“  λ©”μ†Œλ“œ(멀버 ν•¨μˆ˜)에 접근이 κ°€λŠ₯ν•˜λ‹€. 클래슀 기반 μ–Έμ–΄μ—μ„œ 이듀은 두 μ’…λ₯˜λ‘œ κ΅¬λ³„λœλ‹€: .....

 

κ·Έλ ‡λ‹€.. μ •μ˜λ₯Ό 읽으면 μ•Œ 수 μžˆλ“―μ΄ 멀버 λ³€μˆ˜λŠ”

C++μ΄λ‚˜ Java 같은 κ°μ²΄ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°œλ…μœΌλ‘œ

Class μ•ˆμ— μ†Œμ†(?) λ˜μ–΄μžˆλŠ” μΉœκ΅¬μ΄λ‹€

 

μ˜ˆμ‹œλ₯Ό λ“€μ–΄μ„œ 보도둝 ν•˜κ² λ‹€

 

#include <iostream>
using namespace std;

class initClass
{
    private:
        int var1;
        int var2;
        string str1;
};

 

initClassλΌλŠ” ν΄λž˜μŠ€μ—

μžλ£Œν˜•μ΄ intν˜•μΈ var1, var2λΌλŠ” 멀버 λ³€μˆ˜μ™€

μžλ£Œν˜•μ΄ string인 str1μ΄λΌλŠ” 멀버 λ³€μˆ˜κ°€ μ •μ˜λ˜μ–΄ μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€

 

ꡳ이 μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ•Όν•˜λ‚˜....? λΌλŠ” 생각을 ν•  수 μžˆλ‹Ή

ν•˜μ§€λ§Œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ ν•˜λΌκ³  ν•˜λŠ”κ±΄ 항상 μ΄μœ κ°€ μžˆλŠ”κ±°λ‹€

μ•„λž˜μ—μ„œ 짧게 닀루겠닀

 

 

1) λ³€μˆ˜ μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ•Όν•˜λŠ” 이유

 

사싀, μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ•Όν•˜λŠ” μ΄μœ λŠ” λ©”λͺ¨λ¦¬ κ΄€μ μ—μ„œ λ‹€λ€„μ•Όν•œλ‹€

ν•˜μ§€λ§Œ λˆˆμ— μ•ˆλ³΄μ΄λŠ” λ©”λͺ¨λ¦¬λ³΄λ‹€..! μ‹€μ œ μ°νžˆλŠ” 값을 봐야 와닿을 것 κ°™μ•„μ„œ

μ˜ˆμ‹œλ‘œ μ„€λͺ…을 ν•˜λ €κ³  ν•œλ‹€

 

#include <iostream>
using namespace std;

class initClass
{
    private:
        int var1;
        int var2;
        string str1;

    public:
        int getVar1() { return var1; }
        int setVar1(int var1) { this->var1 = var1; }

        int getVar2() { return var2; }
        string getStr1() { return str1; }
};

int main(void)
{
    initClass test;
    test.setVar1(10);

    cout << test.getVar1() << endl;
    cout << test.getVar2() << endl;
    cout << test.getStr1() << endl;

    return 0;
}

 

initClassλΌλŠ” 클래슀의 멀버 λ³€μˆ˜μΈ var1, var2, str1에 λŒ€ν•œ 값을

좜λ ₯ν•΄λ³΄λŠ” μ˜ˆμ‹œμ΄λ‹€

var1에 λŒ€ν•΄μ„œλ§Œ 10μ΄λΌλŠ” κ°’μœΌλ‘œ μ„€μ •ν•΄μ£Όμ—ˆλ‹€

 

μ‹€ν–‰μ‹œμΌœλ³΄λ©΄!!

 

10			/* int var1 */
32767			/* int var2 */
			/* string str1 */

 

값을 μ„€μ •ν•΄μ£ΌλŠ” var1은 10으둜 좜λ ₯이 λ˜μ—ˆμ§€λ§Œ,,

아무 값도 μ—†λŠ” var2은 μ“°λ ˆκΈ° 값을 λ±‰λŠ”λ‹€

stringν˜•μΈ str1은 " "을 좜λ ₯ν•œλ‹€

 

숫자 μžλ£Œν˜•μ€ 이처럼 μ›ν•˜μ§€ μ•ŠλŠ” 값이 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ—

μ›ν•˜λŠ” κ²°κ³Όκ°€ μ•ˆλ‚˜μ˜¬ μˆ˜λ„ μžˆλ‹€

예λ₯Ό λ“€μ–΄,, 쑰건문을 μ‚¬μš©ν•΄μ„œ κ°’ 비ꡐλ₯Ό ν•΄μ„œ 이게 정상적인 κ²½μš°μΈμ§€!!

잘λͺ»λœ κ²½μš°μΈμ§€!! 에 λŒ€ν•΄μ„œ 체크λ₯Ό 할텐데,

 

int main(void)
{
    initClass test;
    test.setVar1(10);

    cout << test.getVar1() << endl;
    cout << test.getVar2() << endl;
    cout << test.getStr1() << endl;

    if( test.getVar2() < 0 )
        cout << "var2λŠ” 잘λͺ»λœ κ°’" << endl;
    else
        cout << "var2λŠ” 정상인 κ°’" << endl;

    return 0;
}

 

μˆ«μžν˜• 값에 λŒ€ν•΄ μœ νš¨μ„±μ„ λ”°μ§ˆ λ•Œ, μš”λŸ°μ‹μœΌλ‘œ 비ꡐ할텐데

var2에 λŒ€ν•΄ λ³€μˆ˜ μ΄ˆκΈ°ν™”λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ 무슨 κ°’μœΌλ‘œ λ‚˜μ˜¬μ§€ λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ—

μ΄ˆκΈ°ν™”λŠ” μŠ΅κ΄€μ μœΌλ‘œ ν•΄μ£ΌλŠ” 것이 μ’‹λ‹€

(클래슀 λ©€λ²„λ³€μˆ˜λ₯Ό 예둜 λ“€μ—ˆμ§€λ§Œ, 일반적으둜 μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ“€λ„ λ‹Ήμ—°νžˆ ν•΄μ€˜μ•Όν•œλ‹€)

 

그러면 λ‹€μ‹œ 본둠으둜 λŒμ•„μ™€μ„œ, ν΄λž˜μ“° 멀버 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 방법을 정리해보겠당

 


2. 클래슀 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™” 방법 3가지

멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™” λ°©λ²•μ—λŠ” 3가지가 μžˆλ‹€ (더 μžˆμ„ μˆ˜λ„ 있음)

 

1) λ©€λ²„λ³€μˆ˜ μ •μ˜μ‹œ μ΄ˆκΈ°ν™” ν•˜κΈ° 

2) μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” ν•˜κΈ°

3) μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” 리슀트둜 μ΄ˆκΈ°ν™” ν•˜κΈ°

 

ν•˜λ‚˜μ”© 예λ₯Ό λ³΄λ©΄μ„œ μ •λ¦¬ν•˜κ² λ‹€

 

1) λ©€λ²„λ³€μˆ˜ μ •μ˜μ‹œ μ΄ˆκΈ°ν™” ν•˜κΈ° 

 

μš” 방법은 μš°λ¦¬κ°€ 보톡 λ³€μˆ˜μ— 값을 λ„£λŠ” 방법과 λ™μΌν•˜λ‹€

 

int var1 = 10;

 

μš”κ±°λ₯Ό ν΄λž˜μ“° μ•ˆμ—μ„œ 멀버 λ³€μˆ˜ μ •μ˜ν•  λ•Œ λ˜‘κ°™μ΄ 써주면 λœλ‹€ ^0^/

 

class initClass
{
    private:
        int var1 = 10;
};

 

μ΄λ ‡κ²Œ 말이닀 λ„ˆλ¬΄ κ°„λ‹¨ν•΄μ„œ 할말을 μžƒμ—ˆλ‹€

 

 

2) μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” ν•˜κΈ°

 

λ‘λ²ˆμ§Έ 방법은 μƒμ„±μžμ—μ„œ 값을 μ΄ˆκΈ°ν™” ν•΄μ£ΌλŠ” 것이닀

 

class initClass
{
    private:
        int var1 = 10;
        int var2;
        string str1;

    public:
        initClass()
        {
            var1 = 10;
        }
};

 

μƒμ„±μž μ•ˆμ—μ„œ 클래슀 멀버 λ³€μˆ˜μ— 값을 직접 μ΄ˆκΈ°ν™”ν•  수 있고,

μœ„μ— μ˜ˆμ‹œλŠ” κΈ°λ³Έ μƒμ„±μžλ‘œ μ΄ˆκΈ°ν™”λ₯Ό ν–ˆλŠ”λ°

νŒŒλΌλ―Έν„°κ°€ λ‹€λ₯Έ μƒμ„±μžλ₯Ό μ˜€λ²„λ‘œλ”©(Overloading)ν•΄μ„œ 값을 λ°›μ•„ μ΄ˆκΈ°ν™”ν•  μˆ˜λ„ μžˆλ‹€

 

class initClass
{
    private:
        int var1 = 10;
        int var2;
        string str1;

    public:
        /* Default μƒμ„±μž*/
        initClass()
        {
            var1 = 10;
        }
	/* Overloading ν•œ μƒμ„±μž*/
        initClass(int var)
        {
            var1 = var;
        }
};

int main(void)
{
    initClass test(10);
}

 

μ΄λŸ°μ‹μœΌλ‘œ 말이닀

그리고 μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” ν•˜λŠ” 방법이 ν•˜λ‚˜ 더 μžˆλŠ”λ°

그것은 λ°”λ‘œ ↓

 

 

3) μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” 리슀트둜 μ΄ˆκΈ°ν™” ν•˜κΈ°

 

λ°”λ‘œ... μ΄ˆκΈ°ν™” 리슀트 (Member Initialize List == λ©€λ²„μ΄λ‹ˆμ…œλΌμ΄μ¦ˆ) λΌλŠ” 것을

μ‚¬μš©ν•΄μ„œ μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€

말 κ·ΈλŒ€λ‘œ μ΄ˆκΈ°ν™”λ₯Ό 리슀트둜 μ—¬λŸ¬κ°œ~~ ν•˜λŠ”κ±°κ³ ,

μ‚¬μš©λ²•μ€ μƒμ„±μž ν•¨μˆ˜ μ˜†μ— 콜둠(:)을 λΆ™μ—¬μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€

 

initClass(int v1, int v2) : var1(v1), var2(v2) {}

 

μ΄λ ‡κ²Œ!! 멀버 λ³€μˆ˜μ— κ΄„ν˜Έλ₯Ό 톡해 νŒŒλΌλ―Έν„°λ‘œ 받은 값을 λŒ€μž…ν•΄μ£ΌλŠ” λͺ¨μ–‘이닀

μ•žμ—μ„œλ³Έ μƒμ„±μž ν˜•μ‹κ³Ό 비ꡐλ₯Ό 해보면

 

/* 1. Default μƒμ„±μž */
initClass()
{
	var1 = 10;
}
/* 2. μƒμ„±μž μ˜€λ²„λ‘œλ”©, κ°’ μ •μ˜ */
initClass(int var)
{
	var1 = var;
}
/* 3. μƒμ„±μž μ˜€λ²„λ‘œλ”©, μ΄ˆκΈ°ν™” 리슀트 μ‚¬μš© */
initClass(int v1, int v2) : var1(v1), var2(v2)
{}

 

μš”λ ‡κ²Œ λ˜μ‹œκ² λ‹€.

멀버 μ΄ˆκΈ°ν™” 리슀트 μ‚¬μš©μ€

μ΄λ ‡κ²Œ 멀버 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ

상속 받은 클래슀의 경우 λΆ€λͺ¨ 클래슀의 멀버 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•˜κ±°λ‚˜

λ³΅μž‘ν•  수 μžˆλŠ” 레퍼런슀(Reference) λ³€μˆ˜ μ΄ˆκΈ°ν™”μ—λ„ μœ μš©ν•˜λ‹€

 

멀버 λ³€μˆ˜κ°€ λ§Žλ‹€λ©΄, μ΄ˆκΈ°ν™” λ¦¬μŠ€νŠΈλ„  μ—„μ²­ 길어지기도 ν•œλ‹€ -_-a

 

 

2-1. κ·Έλž˜μ„œ 뭘 μ‚¬μš©ν•΄μ•Όν•˜λŠ”λ°

 

뭘 μ‚¬μš©ν•΄λ„ 사싀 상관 μ—†λ‹€!

ν•˜μ§€λ§Œ λ³΅ν•©μ μœΌλ‘œ μ‚¬μš©ν•  λ•Œλ„ μžˆμ„ 수 μžˆμœΌλ‹ˆ, μ΄ˆκΈ°ν™” 3가지 λ°©λ²•μ˜

μˆœμ„œλ§Œ μ•Œκ³  λ„˜μ–΄κ°€μž

 

μ§μ ‘ν•΄λ³΄λŠ” 것이 μ œμΌμ΄λ‹€

 

* μ½”λ“œ

#include <iostream>
using namespace std;

class initClass
{
    private:
        int var1 = myPrint(10, "λ©€λ²„λ³€μˆ˜μ •μ˜");

    public:
        initClass() : var1(myPrint(30, "μ΄ˆκΈ°ν™” 리슀트"))
        {
            var1 = myPrint(20, "μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”");
        }

    public:
        int getVar1() { return var1; }
        int myPrint(int ret, string str)
        {
            cout << ret << ", "<< str << endl;
            return ret;
        }
};

int main(void)
{
    initClass test;
    cout << test.getVar1() << endl;

    return 0;
}

 

* μ‹€ν–‰ κ²°κ³Ό

30, μ΄ˆκΈ°ν™” 리슀트
20, μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”
20

 

μ§œμž”.. μ •λ¦¬ν•΄λ³΄μžλ©΄

 

- μ΄ˆκΈ°ν™” μš°μ„ μˆœμœ„: μ΄ˆκΈ°ν™” 리슀트 > μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”

 

μ΄λ ‡κ²Œ 되고,

μœ„ μ˜ˆμ‹œμ—μ„œλŠ” λ©€λ²„λ³€μˆ˜ μ •μ˜λŠ” 호좜이 μ•ˆλ˜μ–΄μ„œ

μ΄ˆκΈ°ν™” 리슀트λ₯Ό μ§€μš°κ³ ! ν•œλ²ˆλ” ν…ŒμŠ€νŠΈ γ„±γ„±

 

* μ½”λ“œ

class initClass
{
    private:
        int var1 = myPrint(10, "λ©€λ²„λ³€μˆ˜μ •μ˜");

    public:
        initClass()
        {
            var1 = myPrint(20, "μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”");
        }
};

 

* μ‹€ν–‰ κ²°κ³Ό

10, λ©€λ²„λ³€μˆ˜μ •μ˜
20, μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”

 

κ·Έλ ‡λ‹€... 

- μ΄ˆκΈ°ν™” μš°μ„ μˆœμœ„: μ΄ˆκΈ°ν™” 리슀트 > 멀버 λ³€μˆ˜ μ •μ˜μ‹œ μ΄ˆκΈ°ν™” > μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”

 

μš”λ ‡κ²Œ λ˜μ‹œκ² λ‹€ ^^7

μ΅œμ’…μœΌλ‘œ μ΄ˆκΈ°ν™” λ˜λŠ” 값은 λ§ˆμ§€λ§‰ μš°μ„ μˆœμœ„ λ°©λ²•μœΌλ‘œ λ ν…Œλ‹ˆκΉŒ

μ£Όμ˜ν•˜μž

 

 


* μœ„ν‚€ λ°±κ³Ό - 멀버 λ³€μˆ˜

ko.wikipedia.org/wiki/%EB%A9%A4%EB%B2%84_%EB%B3%80%EC%88%98

 

멀버 λ³€μˆ˜ - μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전

μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전.

ko.wikipedia.org