- Contents
- Preprocessor Wrappers
- Member ํจ์์ scope
- Class Scope and Accessing Class Members
- Constructors with Default Arguments
- Destructors
- ์์ฑ์์ ์๋ฉธ์์ ํธ์ถ์๊ธฐ
- Default Memberwise Assignment
- Copy Constructor
- const Objects and const Member Functions
- Composition: Objects as Members of Classes
- friend Functions and friend Classes
- Using this Pointer
- Dynamic Memory Management with Operators new and delete
- static Class Members
- ์ฝ๋๊ฐ ๋๋ฒ ์ด์ ํฌํจ(include)๋๋ ๊ฒ์ ๋ฐฉ์ง
#ifndef
XXX โ โif XXX is not defined yetโ- : ๋ง์ฝ XXX๊ฐ ์ด๋ฏธ ํฌํจ๋์ด ์๋ค๋ฉด ์ด ์ฝ๋๋ฅผ ๊ฑด๋ ๋ด๋ค,
#define
XXX- : ์ด ์ฝ๋๊ฐ ๋์ค์ ๋ค์ ํฌํจ๋์ง ์๋๋ก ๋ผ๋ฒจ(label) XXX์ ์ ์ (define)
#endif
: #ifndef ์ pair๋ก ๊ตฌ์ฑ๋จ
- ๋ง์ฝ ํค๋๊ฐ ์ด์ ์ ํฌํจ๋์๋ค๋ฉด
- ๋ผ๋ฒจ XXX์ ์ด๋ฏธ ์ ์ ๋์๊ณ , ๋ฐ๋ผ์ ํค๋ํ์ผ์ ๋ ์ด์ ํฌํจ๋์ง ์๋๋ค.
- ๋ค์ค ์ ์ (multiple definition) ์๋ฌ๋ฅผ ๋ฐฉ์ง
// prevent multiple inclusions of header file
#ifndef TIME_H
#define TIME_H
// Time class definition
class Time
{
public:
Time(); // constructor
void setTime(int, int, int); // set hour, minute and second
void printuniversal(); // print time in universal-time format
void printStandard(); // print time in standard-time format
private:
int hour; // 0-23 (24-hour clock format)
int minute; // 0 - 59
int second; // 0 - 59
};
#endif // !TIME_H
- ํด๋์ค ์ ์ ๋ด์์ ์ ์ธ๋(declared) ๋ฉค๋ฒ ํจ์๋ฅผ ํด๋์ค ์ธ๋ถ์์ ์ ์(define)ํ๋ค๊ณ ํ๋๋ผ๋ ๋ฉค๋ฒ ํจ์๋ ์ฌ์ ํ class scope์ ์กด์ฌํ๋ค.
- ๋ค์์ ์ฐ์ฐ์๋ค์ ํตํด์ ์ ๊ทผํ์ง ์๋ ์ด์ ํด๋์ค์ ๋ฉค๋ฒ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์๋ ค์ง๊ฒ ๋๋ค.
- ํด๋์ค ๊ฐ์ฒด
- ํด๋์ค ๊ฐ์ฒด์ ์ฐธ์กฐ ๋๋ ํด๋์ค ๊ฐ์ฒด์ ํฌ์ธํฐ
- ์ดํญ ์ค์ฝํ ์๋ณ ์ฐ์ฐ์ (binary scope resolution operator)
- ์ด๊ฒ์ ์ด์ฉํ์ฌ ํด๋์ค ์ธ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉค๋ฒ ํจ์๋ฅผ ์ ์ํจ
void Time::setTime(...)
- ํด๋์ค ์ค์ฝํ
- ๋ฐ์ดํฐ ๋ฉค๋ฒ
- ํด๋์ค ์ ์ ๋ด์ ์ ์ธ๋ ๋ณ์ (member variables)
- ๋ฉค๋ฒ ํจ์
- ํด๋์ค ์ ์ ๋ด์ ์ ์ธ๋ ํจ์ (member functions)
- ๋ฐ์ดํฐ ๋ฉค๋ฒ
- ํด๋์ค ๋ฉค๋ฒ๊ฐ ์๋ ํจ์๋ค์ ํ์ผ ์ค์ฝํ (file scope)์ ์ ์ ๋์ด์ผ ํ๋ค.
-
ํด๋์ค ์ค์ฝํ ๋ด๋ถ์์
- ํด๋์ค ๋ฉค๋ฒ๋ ๋ชจ๋ ๋ฉค๋ฒ ํจ์์ ์ํด ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
-
ํด๋์ค ์ค์ฝํ ์ธ๋ถ์์
- public ํด๋์ค ๋ฉค๋ฒ๋ ๋ค์ ํธ๋ค(handle)์ ์ด์ฉํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ๋ค
- ๊ฐ์ฒด ์ด๋ฆ (object name)
- ๊ฐ์ฒด ์ฐธ์กฐ (reference to an object)
- ๊ฐ์ฒด ํฌ์ธํฐ (pointer to an object)
- public ํด๋์ค ๋ฉค๋ฒ๋ ๋ค์ ํธ๋ค(handle)์ ์ด์ฉํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ๋ค
-
๋ฉค๋ฒ ํจ์ ๋ด๋ถ์์ ์ ์๋ ๋ณ์
- Block scope๋ฅผ ๊ฐ์ง -> ํจ์ ๋ด๋ถ์์๋ง ์ด์์๋ ์ง์ญ ๋ณ์ (local variable)
-
๋ฉค๋ฒ ๋ณ์์ ๊ฐ์ ์ด๋ฆ์ ์ง์ญ ๋ณ์๊ฐ ๋ฉค๋ฒ ํจ์์ ์ ์๋๋ค๋ฉด?
- ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋
::
์ ๊ทผ์๋ฅผ ํตํด์ ์ ๊ทผํด์ผ ํจ- ์)
Time::hour
- ๊ทธ๋ ์ง ์์ผ๋ฉด, ๊ทธ ๋ณ์๋ ์ง์ญ ๋ณ์๋ฅผ ์๋ฏธํจ
- ์)
- ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋
-
์ (dot) ๋ฉค๋ฒ ์ ํ ์ฐ์ฐ์ (
.
)- ๊ฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด์ ์ด๋ฆ(name) ์ด๋ ๊ฐ์ฒด์ ์ฐธ์กฐ(reference)์ ์ฌ์ฉ
- ์)
sunset.printUniversal( );
- ์)
-
ํ์ด (arrow) ๋ฉค๋ฒ ์ ํ ์ฐ์ฐ์ (
->
)- ๊ฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด์ ํฌ์ธํฐ์ ์ฌ์ฉํ๋ค.
- ์)
timePtr->printUniversal( )
- ์)
- ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ด๊ธฐํ ํ๋ค.
- ์ฌ์ง์ด ์์ฑ์์ ์ธ์๊ฐ ์ฃผ์ด์ง์ง ์์ ๊ฒฝ์ฐ ํฌํจ
Time(int=0, int=0, int=0); // default constructor
- ๋ชจ๋ ์ธ์์ ๋ํดํธ ์ธ์๊ฐ ์ง์ ๋ ์์ฑ์๋ ์ญ์ ๋ํดํธ ์์ฑ์(default constructor)์ด๋ค.
- ์ด๋ ํ ์ธ์๋ ์์ด ํธ์ถ ํ ์ ์๋ค.
- ํด๋์ค๋น ์ต๋ ํ ๊ฐ์ ๋ํดํธ ์์ฑ์๋ฅผ ๊ฐ์ง๋ค.
#pragma once
class Time {
public:
Time();
void setTime(int, int, int);
void printUniversal();
void printStandard();
private:
int hour;
int minute;
int second;
};
- ํน๋ณํ ์ฉ๋์ ๋ฉค๋ฒ ํจ์
- ์๋ฉธ์์ ์ด๋ฆ:
~
์ ํด๋์ค์ ์ด๋ฆ์ ๋ถ์- ์)
~Time
- ์)
- ๊ฐ์ฒด๊ฐ ์๋ฉธ ๋ ๋ ๋ฌด์กฐ๊ฑด ํธ์ถ๋๋ค.
- ์) ์๋๋ณ์๋ก ์ ์ธ๋ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ๋
- ์ข ๋ฃ ์ ๋ฆฌ ์์ (termination housekeeping)์ ์ํ
- ์๋ฉธ์ ์คํ ํ, ์์คํ
์ด ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์
- ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ์ฌ์ฉ ๋ ์ ์๊ฒ ๋๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ง๋ ์๊ณ ๊ฐ์ ๋ฐํํ์ง๋ ์๋๋ค.
- ์์ฑ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์๊ณ , ์ค๋ฒ๋ก๋ฉ๋ ๊ฐ๋ฅํจ.
- ๋ฐํํ์ด ์๋ค. (
void
ํ๋ ์๋)
- ํด๋์ค๋ ๋จ ํ ๊ฐ์ ์๋ฉธ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์๋ฉธ์ ์ค๋ฒ๋ก๋ฉ(overloading)์ ํ๋ฝ๋์ง ์๋๋ค.
- ์ ์ด์ ์ค๋ฒ๋ก๋ฉ ํ ์ผ์ด ์๋ค.
- ์๋ฉธ์ ์ค๋ฒ๋ก๋ฉ(overloading)์ ํ๋ฝ๋์ง ์๋๋ค.
- ๋ง์ฝ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช
์์ ์ผ๋ก ์๋ฉธ์๋ฅผ ์ง์ ํ์ง ์์๋ค๋ฉด, ์ปดํ์ผ๋ฌ๋ โ๋น(empty)โ ์๋ฉธ์๋ฅผ ๋ง๋ ๋ค.
- ์๋ฌด ์ผ๋ ํ์ง ์์
- ๊ฐ์ฒด ์์ฑ๊ณผ ์๋ฉธ์ ๋ด๋ถ์ ์ผ๋ก (implicitly) ์๋ ํธ์ถ๋จ
- ์์ฑ์์ ์๋ฉธ์์ ํธ์ถ ์๊ธฐ์ ์์๋ ์ด๋ scope์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋๋์ ๋ฐ๋ผ ๋ค๋ฆ
- ์์ ์ฐธ์กฐ
- ์ผ๋ฐ์ ์ผ๋ก ์์ฑ์์ ํธ์ถ ์์์ ์ญ์์ผ๋ก ์๋ฉธ์๊ฐ ํธ์ถ๋จ
- ์ ์ญ ๋ณ์๋ ํ๋ก๊ทธ๋จ ์ํ ๋ด๋ด ์ด์์์
- main ํจ์๊ฐ ์์๋๊ธฐ ์ ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์์ฑ์ ํธ์ถ
- main ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๊ฐ์ฒด๊ฐ ์๋ฉธ๋์ด ์๋ฉธ์ ํธ์ถ
๊ฐ์ฒด๊ฐ ์๋ ์ง์ญ ๋ณ์ (local automatic variable) ์ผ ๋ (: ๋ณดํต main ํจ์ ์์ ์๋ ๊ฒ)
- ๊ฐ์ฒด๊ฐ ์ ์๋ ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์์ฑ์ ํธ์ถ
- ๊ฐ์ฒด๊ฐ ํฌํจ๋ scope๋ฅผ ๋ฒ์ด๋ ๋ ์๋ฉธ๋์ด ์๋ฉธ์ ํธ์ถ
- Static ๋ณ์๋ ๋จ ํ๋ฒ ์์ฑ๋์ด ํ๋ก๊ทธ๋จ ์ํ ๋ด๋ด ์ด์์๋ ๋ณ์์ด๋ค
- ๋ฐ๋ผ์ ์์ฑ์๋ ๊ฐ์ฒด๊ฐ ์ฒ์ ์์ฑ๋ ๋ ๋จ ํ๋ฒ ํธ์ถ
- main ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๊ฐ์ฒด๊ฐ ์๋ฉธ๋์ด ์๋ฉธ์ ํธ์ถ
#pragma once
#include <string>
using std::string;
class CreateAndDestory {
public:
CreateAndDestory(int, string);
~CreateAndDestory();
private:
int objectID;
string message;
};
#include <iostream>
using std::cout;
using std::endl;
#include "Create.h"
void create(void); // prototype
CreateAndDestory Temp(2, "Temp");
CreateAndDestory first(1, "(global before main)"); // global object
int main()
{
cout << "\nMAIN FUNCTION: EXECUTION BEGINS" << endl;
CreateAndDestory second(2, "(local automatic in main)");
static CreateAndDestory third(3, "(local static in main)");
create(); // call function to create objects
cout << "\nMAIN FUNCTION: EXECUTION RESUMES" << endl;
CreateAndDestory fourth(4, "(local automatic in main)");
cout << "\nMAIN FUNCTION: EXECUTION ENDS" << endl;
return 0;
}
void create(void)
{
cout << "\nCREATE FUNCTION: EXECUTION BEGINS" << endl;
CreateAndDestory fifth(5, "(local automatic in create)");
static CreateAndDestory sixth(6, "(local static in create)");
CreateAndDestory seventh(7, "(local automatic in create)");
cout << "\nCREATE FUNCTION: EXECUTION ENDS" << endl;
}
#include <iostream>
using std::cout;
using std::endl;
#include "Create.h"
CreateAndDestory::CreateAndDestory(int ID, string msg)
{
objectID = ID;
message = msg;
cout << "Object " << objectID << " constructor runs " << message << endl;
}
CreateAndDestory::~CreateAndDestory()
{
// output newline for certain objects; helps readability
cout << (objectID == 1 || objectID == 6 ? "\n" : "");
cout << "Object " << objectID << " destructor runs "
<< message << endl;
}
1 constructor runs (global before main)
MAIN FUNCTION: EXECUTION BEGINS
2 constructor runs (local automatic in main)
3 constructor runs (local static in main)
CREATE FUNCTION: EXECUTION BEGINS
5 constructor runs (local automatic in create)
6 constructor runs (local static in create)
7 constructor runs (local automatic in create)
CREATE FUNCTION: EXECUTION ENDS
7 destructor runs (local automatic in create)
5 destructor runs (local automatic in create)
MAIN FUNCTION: EXECUTION BEGINS
4 constructor runs (local automatic in main)
MAIN FUNCTION: EXECUTION ENDS
4 destructor runs (local automatic in create)
2 destructor runs (local automatic in create)
6 destructor runs (local static in create)
3 destructor runs (local static in main)
1 destructor runs (global before main)
- ๋์
์ฐ์ฐ์ (
=
)- ํด๋น ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋์
ํ ๋ ์ฌ์ฉ
- ๋์ ์ฐ์ฐ์์ ์ค๋ฅธํธ์ ์๋ ๊ฐ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ ๊ฐ๋ณ์ ์ผ๋ก ๋์ ์ฐ์ฐ์ ์ผํธ์ ์๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ 1:1 ๋์ ๋๋ค.
- ๋ฉค๋ฒ๋ณ ๋์
์ ๋์ ์ผ๋ก ํ ๋น๋ ํฌ์ธํฐ๋ฅผ ํฌํจํ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ๋ํด์๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ ๋ฐ ํ ์ ์์ผ๋ฏ๋ก ์ฃผ์
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ค์ ๋ ๋ฒ ํด์ ํ ์ ์์
- ํด๋น ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋์
ํ ๋ ์ฌ์ฉ
- ๊ฐ์ฒด ์์ฑ์ ๊ธฐ์กด ๊ฐ์ฒด์ ๊ฐ์ ์ํ ์ ๋ฌ
- ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ฒด์ ๊ฐ์ ๊ทธ๋๋ก ์ด์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ์ปดํ์ผ๋ฌ๋ ๋ํดํธ ๋ณต์ฌ ์์ฑ์๋ฅผ ์ ๊ณตํ๋ค.
- ์๋ ๊ฐ์ฒด์ ๊ฐ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์๋ก์ด ๊ฐ์ฒด์ ๋์๋๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ก ๋ณต์ฌํ๋ค. (์ฆ, ๋ฉค๋ฒ๋ณ ๋์ ์ ์ํ)
- ๋์ ํ ๋น๋ ํฌ์ธํฐ๋ฅผ ํฌํจํ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ๋ํด์๋ ์ญ์ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ ๋ฐ ํ ์ ์๋ค.
- ์์ ๋ณต์ฌ(Shallow Copy)์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ์ ๋ ๋ณ์๊ฐ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์กํ๋ ๊ฒ์ด ์๋๋ผ ๋ณต์ฌํ ๊ฐ์ฒด์ ๋ณ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
- ๋ง์ผ ๋์ ํ ๋น์ผ๋ก ์ ์ธ๋ ๋ณ์๊ฐ ์์ ๋ ์์ ๋ณต์ฌ๋ฅผ ํ๋ค๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
- ์ต์ ํน๊ถ ์๋ฆฌ (Principle of least privilege)
- ๊ฐ ์ํํธ์จ์ด ๋ชจ๋(๊ฐ์ฒด, ํจ์, โฆ)์๋ ๊ทธ๋ค์๊ฒ ํ์ํ ์ต์ํ์ ๊ถํ๋ง์ ๋ถ์ฌํ๋ค.
- ์ํํธ์จ์ด ์ค๊ณ์ ๊ธฐ๋ณธ์ ์ธ ์์น ์ค ํ๋
- ๊ฐ์ฒด์งํฅ ์ค๊ณ์๋ ์ ์ฉ๋จ
const
ํค์๋๋ฅผ ์ด์ฉ- ์์ ์ ์๋ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
const a = 10;
a = 20; // error!
- ์ต์ ํน๊ถ ์๋ฆฌ (Principle of least privilege)
- ๊ฐ ์ํํธ์จ์ด ๋ชจ๋(๊ฐ์ฒด, ํจ์, โฆ)์๋ ๊ทธ๋ค์๊ฒ ํ์ํ ์ต์ํ์ ๊ถํ๋ง์ ๋ถ์ฌํ๋ค.
- ์ํํธ์จ์ด ์ค๊ณ์ ๊ธฐ๋ณธ์ ์ธ ์์น ์ค ํ๋
- ๊ฐ์ฒด์งํฅ ์ค๊ณ์๋ ์ ์ฉ๋จ
- ์์ ๊ฐ์ฒด (constant objects)
const
ํค์๋๋ฅผ ์ด์ฉ- ๊ฐ์ฒด๋ฅผ ์์ (์ฆ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์์ ) ํ ์ ์์์ ์๋ฏธ
- ์์ ์ ์๋ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
- ์์ ๊ฐ์ฒด๋ const ๋ฉค๋ฒ ํจ์๋ง์ ํธ์ถํ ์ ์์
const
๋ก ์ ์ธ๋ ๋ฉค๋ฒ ํจ์๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์์ ํ ์ ์์- ๋ฉค๋ฒ ํจ์ ์ ์ธ๊ณผ ์ ์์ ๋ชจ๋
const
ํ์ผ๋ก ์ง์ ํด์ผ ํจ - ์์ฑ์์ ์๋ฉธ์๋
const
ํ์ผ๋ก ์ง์ ํ ์ ์์
-
ํจ์๋ช ๋ค์ 'const'๊ฐ ๊ฐ์ง๋ ์๋ฏธ ํด๋น ํจ์์์ ๋ฉค๋ฒ๋ณ์๋ฅผ ์ฝ๊ธฐ์ ์ฉ(RDONLY)์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ํ์์ด๋ค.
์ฆ, '์ฝ๊ธฐ'๋ง ํ ๋ฟ '์ฐ๊ธฐ'๋ ํ์ง์๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. -
์์ ํจ์ ๋งค๊ฐ๋ณ์์์
const
๊ฐ ๊ฐ์ง๋ ์๋ฏธ 'call by reference'๋ก ๋ณต์ฌ ์ค๋ฒํค๋์์ด ์ฐธ์กฐํ๋ ๋ณ์๋ฅผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๊ธฐ์ ์ฉ(RDONLY)์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ํ์์ด๋ค. -
ํจ์ ๋ฐํํ์ ์์ 'const'๊ฐ ๊ฐ์ง๋ ์๋ฏธ ํจ์์ ๋ฐํ๊ฐ์ ์ฝ๊ธฐ์ ์ฉ(RDONLY)์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ํ์์ด๋ค.
ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ right-hand-side์ ํด๋นํ๋ค. ์ฌ๊ธฐ์ ์ด ๊ฐ์&&
(r-value ์ฐธ์กฐ)๋ก ๋ฐ์๋ฒ๋ฆฌ๋ฉด ์์ ํ ์ฌ์ง๊ฐ ์๊ธด๋ค. ์ด๋ฌํ ๊ฐ๋ฅ์ฑ์ ์ ๊ฑฐํ๊ณ 'ํด๋น ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ ๋์ ์ฐ์ฐ์๋ฅผ ํตํด ๋ณต์ฌํด์ ์ฌ์ฉํ๋ผ'๋ ์๋ฏธ๋ผ ์๊ฐ๋๋ค.
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ ๊ฐ์ ๋ณ๊ฒฝ ๋ชปํ๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
const char* c_ptr;
char s1[] = "hello";
char s2[] = "bonjour";
const char* c_ptr = s1;
c_ptr = s2; // ์ฃผ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
c_ptr[0] = 'a'; // ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ํ์ง๋ง ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์(์ฃผ์๊ฐ)์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์(์ฃผ์)์ ๋ณ๊ฒฝ ๋ชปํ๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
char* const ptr;
char s1[] = "hello";
char s2[] = "bonjour";
char* const c_ptr = s1;
c_ptr = s2; // ์ฃผ์ ๋ณ๊ฒฝ ๋ถ๊ฐ
c_ptr[0] = 'a'; // ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์(์ฃผ์)์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ํ์ง๋ง ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋์๊ณผ ๋์์ ๊ฐ์ ๋ชจ๋ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
const char* const c_ptr;
char s1[] = "hello";
char s2[] = "bonjour";
const char* const c_ptr = s1;
c_ptr = s2; // ์ฃผ์ ๋ณ๊ฒฝ ๋ถ๊ฐ
c_ptr[0] = 'a'; // ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์๊ณผ ๊ทธ ๊ฐ์ ๋ชจ๋ ๋ณ๊ฒฝํ ์ ์๋ค.
-
๋ฉค๋ฒ ์ด๊ธฐํ๊ธฐ (Member initializer)
- ๋ชจ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ member initializer๋ฅผ ์ด์ฉํ์ฌ ์ด๊ธฐํ ๊ฐ๋ฅ
- const ํ ๋๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ ๋ฐ๋์ member initializer๋ฅผ ์ด์ฉํ์ฌ ์ด๊ธฐํ ํด์ผ ํจ
-
๋ฉค๋ฒ ์ด๊ธฐํ๊ธฐ ๋ชฉ๋ก (Member initializer list)
- ํด๋์ค ์์ฑ์์ ์ธ์ ๋ฆฌ์คํธ์ ํจ์ ์์์ { ์ฌ์ด์ ์์น
- ๋ณต์์ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํ ํ ์ ์์
- ํด๋์ค ์์ฑ์๊ฐ ์ํ๋๊ธฐ ์ง์ ์ ์ํ
- ๊ตฌ์ฒด์ ์ธ ์์์ ๋ค์ ์์ ์ฐธ์กฐ
-
์ด๋์ ๋ผ์ด์ ์ ์คํ์ ํฌํจํ ๊ฐ์ฒด ์์ฑ์ ๊ณผ์
- 1๋จ๊ณ : ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น
- 2๋จ๊ณ : ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ด์ฉํ ๋ฉค๋ฒ๋ณ์(๊ฐ์ฒด)์ ์ด๊ธฐํ
- 3๋จ๊ณ : ์์ฑ์์ ๋ชธ์ฒด ๋ถ๋ถ ์คํ
-
์ด๋์ ๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉค๋ฒ๋ณ์๊ฐ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ.
const
๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ณ์๋ ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅ.- ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ ๋๋ ํํ์ด๋ฏ๋ก...
- has-a ๊ด๊ณ๋ผ๊ณ ํํํ๊ธฐ๋ ํจ
- ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง ์ ์๋ค.
- ์์
- AlarmClock ๊ฐ์ฒด๋ Time์ ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ค.
- ๋ฉค๋ฒ ์ด๊ธฐํ๊ธฐ(member initializers)์์ ๊ฐ์ฒด ์์ฑ์์ ์ธ์๋ฅผ ํตํด ๋ฉค๋ฒ ๊ฐ์ฒด์ ์์ฑ์์๊ฒ ์ธ์๋ฅผ ์ ๋ฌ
- ๋ฉค๋ฒ ๊ฐ์ฒด๋ ํด๋์ค ์ ์์ ์ ์ธ๋ ์์๋๋ก ์์ฑ๋จ
- ๋ง์ฝ ๋ฉค๋ฒ ์ด๊ธฐํ๊ธฐ๊ฐ ์ ๊ณต๋์ง ์๋๋ค๋ฉด
- ๋ฉค๋ฒ ๊ฐ์ฒด์ ๋ํดํธ ์์ฑ์๊ฐ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋๋ค.
#pragma once
class Date {
public:
Date(int = 1, int = 1, int = 1900);
Date(int, int);
void print()const;
~Date();
private:
int month;
int day;
int year;
int checkDay(int)const;
};
#include <iostream>
using std::cout;
using std::endl;
#include "Date.h"
Date::Date(int mn, int dy, int yr) {
if (mn > 0 && mn <= 12) {
month = mn;
}
else {
month=1;
cout << "Invalid month (" << mn << ") set to 1.\n";
}
year = yr;
day = checkDay(dy);
cout << "Date object constructor fordate ";
print();
cout << endl;
}
void Date::print() const {
cout << month << '/' << day << '/' << year;
}
Date::~Date() {
cout << "Date object destructor for date ";
print();
cout << endl;
}
int Date::checkDay(int testDay) const {
static const int daysPerMonth[13] = {
0,31,28,31,30,31,30,31,31,30,31,30,31 };
if (testDay > 0 && testDay <= daysPerMonth[month])
return testDay;
if (month == 2 && testDay == 29 && (year % 400 == 0 || (year % 4 == 0 &&
year % 100 != 0)))
return testDay;
cout << "Invalid day(" << testDay << ") set to 1.\n";
return 1;
}
#pragma once
#include "Date.h"
class Employee {
public:
Employee(const char* const, const char* const,
const Date&, const Date&);
void print() const;
~Employee();
private:
char firstName[25];
char lastName[25];
const Date birthDate;
const Date hireDate;
};
#include <iostream>
using std::cout;
using std::endl;
#include <cstring>
using std::strlen;
using std::strncpy;
#include "Employee.h"
#include "Date.h"
Employee::Employee(const char *const first, const char *const last,
const Date &dateOfBirth, const Date &dateOfHire) : birthDate(dateOfBirth),
hireDate(dateOfHire)
{
int length = strlen(first);
length = (length < 25 ? length : 24);
strncpy(firstName, first, length);
firstName[length] = '\0';
length = strlen(last);
length = (length < 25 ? length : 24);
strncpy(lastName, last, length);
lastName[length] = '\0';
cout << "Employee object constructor: " << firstName << ' ' << lastName << endl;
}
void Employee::print() const
{
cout << lastName << ", " << firstName << " Hired: ";
hireDate.print();
cout << " Birthday: ";
birthDate.print();
cout << endl;
}
Employee::~Employee()
{
cout << "Employee object destructor: " << lastName << ", " << firstName << endl;
}
#include <iostream>
using std::cout;
using std::endl;
#include "Employee.h"
int main() {
Date birth(7, 24, 1949);
Date hire(3, 12, 1988);
Date birth2();
Employee manager("Bob", "Blue", birth, hire);
cout << endl;
manager.print();
cout << "\n Test Date constructor with invalid values:\n";
Date lastDayoff(14, 35, 1994);
cout << endl;
return 0;
}
- Class scope์ ์ธ๋ถ์ ์ ์๋จ
- Class์ ๋ฉค๋ฒ ํจ์ ์๋
- ๊ทธ๋ฌ๋ ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์
- public ๋ฉค๋ฒ๊ฐ ์๋ private ๋ฉค๋ฒ์๋ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ ๋ฆฝ์ ์ธ ํจ์๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ์ด๋ค ํด๋์ค์ friend๋ก ์ ์ธ๋ ์ ์์
- Friend ํด๋์ค ๊ฐ์ ์ง์ ์ ์ธ ๋ฐ์ดํฐ ๋ฉค๋ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ํ ์๋ ํฅ์
- ๋ฉค๋ฒ ํจ์๋ง์ผ๋ก๋ ์ํํ๊ธฐ ํ๋ ๋์์ ๊ตฌํํ ๋ ์ฌ์ฉ
- ํด๋์ค์ friend ํจ์ ์ ์ธ
- ํด๋์ค ์ ์์ friend๋ก ์์๋๋ ํจ์ ์ํ ์ ์ธ
- ํด๋์ค์ friend ํด๋์ค ์ ์ธ
- ClassTwo ํด๋์ค๋ฅผ ClassOne ํด๋์ค์ friend ์ ์ธ
- friend class ClassTwo; ๋ฅผ ClassOne ํด๋์ค ์ ์์ ์ถ๊ฐ
- ClassTwo ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ ํจ์๋ ClassOne ํด๋์ค์ friend๊ฐ ๋จ
- ClassTwo ํด๋์ค๋ฅผ ClassOne ํด๋์ค์ friend ์ ์ธ
- ์น๊ตฌ ๊ด๊ณ (Friendship relation) ๋ ํ์ฉ๋๋ ๊ฒ (์ทจ๋ํ๋ ๊ฒ์ด ์๋)
- Class B ๊ฐ Class A์ friend๊ฐ ๋๊ธฐ ์ํด์, class A๋ class B๋ฅผ friend๋ก ๋ช ์์ ์ผ๋ก ์ ์ธํด์ผ ํจ (A๊ฐ B๋ฅผ ํ์ฉ)
- Friendship relation์ ์ผ๋ฐฉ์ ์ด๊ณ , ๋ํ ์ ์ด๋์ง ์์
- Class A๊ฐ class B์ friend์ฌ๋, class B๊ฐ class A์ friend๊ฐ ๋์ง ์์
- ์ฆ, ์ง์ฌ๋ ๊ด๊ณ
- Class A๊ฐ class B์ friend์ด๊ณ , class B๊ฐ class C์ friend์ฌ, class A๊ฐ class C์ friend๊ฐ ๋์ง ์์
- ์ฆ, ์น๊ตฌ์ ์น๊ตฌ๋ ์ ์ ๋ก ์น๊ตฌ๊ฐ ์๋
- Class A๊ฐ class B์ friend์ฌ๋, class B๊ฐ class A์ friend๊ฐ ๋์ง ์์
- This ํฌ์ธํฐ
- ๊ฐ์ฒด ๋ด๋ถ์์ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ (self-reference)
- ๋ฉค๋ฒ ํจ์๋ this pointer๋ฅผ ํตํด ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ์๋ค.
- ๋ชจ๋ ๊ฐ์ฒด๋ C++์ ํค์๋์ธ this ํฌ์ธํฐ๋ฅผ ํตํด ์์ ์ ์ฃผ์์ ์ ๊ทผํ ์ ์๋ค.
- ๊ฐ์ฒด์ this ํฌ์ธํฐ๋ ๊ฐ์ฒด ์์ ์ ์ผ๋ถ๋ ์๋
- ๊ฐ์ฒด๋ this pointer๋ฅผ ์์์ ์ผ๋ก (implicitly) ๋๋ ๋ช
์์ ์ผ๋ก (explicitly) ์ฌ์ฉ
- ๋ฉค๋ฒ ํจ์์์ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ์ ๊ทผํ ๋ ์์์ ์ผ๋ก ์ฌ์ฉ
- this ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช ์์ ์ผ๋ก ์ฌ์ฉ
- this ํฌ์ธํฐ์ ํ์ ์ ๊ฐ์ฒด ํ์ ์ ์ํด ๊ฒฐ์ ๋จ
-
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (allocation) ๋ฐ ํด์ (release)
- ๋ด์ฅ ๋ฐ์ดํฐ ํ์ ์ด๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ๋ํด ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- new ์ delete ์ฐ์ฐ์๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
- ์๋ฅผ ๋ค์ด, ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด ๋์ ํ๋ก๊ทธ๋จ ์ํ ์ค ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ (= ๋์ ์ธ) ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์ฑ
-
Heap
- ๊ฐ ํ๋ก๊ทธ๋จ์์ ์คํ ์๊ฐ์ ๋์ ์ผ๋ก ์์ฑ๋๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- ๋ฐ๋๋ก, ์ปดํ์ผ ์๊ฐ์ ์์ฑ๋๋ ๊ฐ์ฒด๋ stack ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์.
-
์ฐ์ฐ์ new
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
(int, double ๋ฑ) ์ด๋ ํด๋์ค ํ์
์ ๊ฐ์ฒด๋ฅผ ์คํ์๊ฐ (execution time)์ ํ ๋น ๋ฐ ์์ฑ
- ์์
Time *ptrTime = new Time;
float *ptrNum = new float;
- ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ, ๋์์ ๊ฐ์ฒด์ ์์ฑ์๋ ํธ์ถ
- ์ผ๋ฐ์ ์ผ๋ก ๋ณต์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํํ ์ฌ์ฉํจ
- ์์
- new์ ์ค๋ฅธ์ชฝ์ ์ง์ ๋ ํ์ ์ ํฌ์ธํฐ๋ฅผ ๋ฐํ
- C์ธ์ด์์์ malloc()๊ณผ ์ ์ฌ
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
(int, double ๋ฑ) ์ด๋ ํด๋์ค ํ์
์ ๊ฐ์ฒด๋ฅผ ์คํ์๊ฐ (execution time)์ ํ ๋น ๋ฐ ์์ฑ
-
์ฐ์ฐ์ delete
- ๋์ ์ผ๋ก ํ ๋น๋ ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํด
- ์ด๋, ๊ฐ์ฒด์ ์๋ฉธ์๋ฅผ ํธ์ถ
- ์์
delete ptrTime;
delete ptrNum;
- ์ด๋, ๊ฐ์ฒด์ ์๋ฉธ์๋ฅผ ํธ์ถ
- ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํด์ (release)ํ๋ค.
- ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ ๋น๋๊ธฐ ์ํด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- C์ธ์ด์์์ free()๊ณผ ์ ์ฌ
- ๋์ ์ผ๋ก ํ ๋น๋ ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํด
-
new
๋ฅผ ์ด์ฉํ ๊ฐ์ฒด ์ด๊ธฐํ- ์๋กญ๊ฒ ์์ฑ๋ ๊ธฐ๋ณธ์ ์ธ ํ์
์ ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ ์ง์
- ์์
double *ptr = new double(3.14159);
- ์์
- ๊ฐ์ฒด์ ์์ฑ์์ ์ผํ๋ก ๋ถ๋ฆฌ๋๋ ์ธ์ ๋ชฉ๋ก์ ์ง์
- ์์
Time *timePtr = new Time(12,45,0);
- ์์
- ์๋กญ๊ฒ ์์ฑ๋ ๊ธฐ๋ณธ์ ์ธ ํ์
์ ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ ์ง์
-
new
์ฐ์ฐ์๋ ๋์ ์ผ๋ก ๋ฐฐ์ด์ ํ ๋นํ ์ ์๋ค- 10๊ฐ์ ์ ์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ ํ ๋น
- ์์
int *gradesArray = new int[10];
- ์์
- ๋์ ํ ๋น ๋ฐฐ์ด์ ํฌ๊ธฐ
- ํ๋ก๊ทธ๋จ ๋ด์์ ์ ์ ๋ณ์๋ ์ ์ ๋ณ์์ ์์ ํํ์ ํตํด ๋ํ๋ผ ์ ์์
int *gradesArray = new int[count1+count2];
- ํ๋ก๊ทธ๋จ ๋ด์์ ์ ์ ๋ณ์๋ ์ ์ ๋ณ์์ ์์ ํํ์ ํตํด ๋ํ๋ผ ์ ์์
- 10๊ฐ์ ์ ์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ ํ ๋น
-
๋์ ์ผ๋ก ํ ๋น๋ ๋ฐฐ์ด์ ์ ๊ฑฐ
delete [] gradesArray;
- ์ ๋ฌธ์ฅ์ gradesArray๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฐ์ด์ ๋ํ ํ ๋น์ ํด์ ํ๋ค.
- ์ ๋ฌธ์ฅ์ ํฌ์ธํฐ๊ฐ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๊ณ ์๋ค๋ฉด,
- ์ ๋ฌธ์ฅ์ ๋จผ์ ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์๋ฉธ์๋ฅผ ํธ์ถํ ํ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
- ์ ๋ฌธ์ฅ์์ ๋๊ดํธ(
[]
)๊ฐ ์๊ณ gradesArray๊ฐ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๊ณ ์๋ค.- ๋ฐฐ์ด ๋ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ง ์๋ฉธ์ ํธ์ถ์ ๋ฐ์ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋์ ํ ๋น ๋ฐ์ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ํด์ ์
[]
๋ฅผ ๋๋ฝํ์ง ์๋๋ก ์กฐ์ฌ.
-
Static ๋ฐ์ดํฐ ๋ฉค๋ฒ
- ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ ๋ณ์์ ๋ณต์ฌ๋ณธ
- ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ณ์๋ฅผ ๊ณต์ : โClass-wideโ ์ ๋ณด
- ํด๋์ค์ ํน์ ํ ๊ฐ์ฒด์ ์์ฑ์ด ์๋ ํด๋์ค ์์ฒด์ ์์ฑ์
- ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ์ ์ธ ์ static ํค์๋๋ก ์์
- ๋น๋ก ์ ์ญ ๋ณ์์ฒ๋ผ ๋ณด์ด๋, ์ค์ ๋ก๋ class scope๋ฅผ ๊ฐ์ง
- public, private or protected ๋ฐ์ดํฐ ๋ฉค๋ฒ ๋ชจ๋์ static ์ ์ ์ธ๋ ์ ์๋ค.
- private, protected์ธ ๊ฒฝ์ฐ public static member function์ ํตํด ์ ๊ทผ
- ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ ๋ณ์์ ๋ณต์ฌ๋ณธ
-
Public static ๋ฐ์ดํฐ ๋ฉค๋ฒ
- ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์๋ ์กด์ฌ (ํด๋์ค ์์ฒด์ ์์ฑ)
- ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์ ๋ public static ํด๋์ค ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํด
- ํด๋์ค์ ์ด๋ฆ๊ณผ ์ดํญ ์ค์ฝํ ์๋ณ ์ฐ์ฐ์(
::
)๋ฅผ ์ฌ์ฉ - ์์ โ
Martian::martianCount
- ํด๋์ค์ ์ด๋ฆ๊ณผ ์ดํญ ์ค์ฝํ ์๋ณ ์ฐ์ฐ์(
- ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์ ๋ public static ํด๋์ค ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํด
- ํด๋์ค์ ์ด๋ ํ ๊ฐ์ฒด์์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด์ ์ด๋ฆ๊ณผ ์ ์ฐ์ฐ์(dot operator)(
.
)๋ฅผ ์ฌ์ฉํ๋ค.- ์์ โ
myMartian.martianCount
- ์์ โ
- ๊ฐ์ฒด์ ์ด๋ฆ๊ณผ ์ ์ฐ์ฐ์(dot operator)(
- ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์๋ ์กด์ฌ (ํด๋์ค ์์ฒด์ ์์ฑ)
-
Static ๋ฉค๋ฒ ํจ์
- ํด๋์ค์ ํน์ ๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์๋น์ค
- static์ด ์๋ ํด๋์ค ๋ฐ์ดํฐ ๋ฉค๋ฒ ๋๋ ๋ฉค๋ฒ ํจ์์ ์ ๊ทผํ ์ ์๋ค.
- static ๋ฉค๋ฒ ํจ์๋ this ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ์๋๋ค.
- static ๋ฐ์ดํฐ ๋ฉค๋ฒ์ static ๋ฉค๋ฒ ํจ์๋ ํด๋์ค์ ๊ฐ์ฒด์๋ ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค.
- ๊ทธ ํด๋์ค์ ๊ฐ์ฒด๋ ์กด์ฌํ์ง ์์๋, static ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.