[C++] ๊ฐ์ฒด ์งํฅ๊ณผ ํด๋์ค
๐ ํ์ ๊ณผ ์ธ์คํด์ค
ํ์ ( type)๋ ์ถ์ํ ๋ ๊ฒ์ด๊ณ ์ธ์คํด์ค (instance) ๋ ํ์ ์ ์ค์ฒดํํ ๊ตฌ์ฒด์ ์ธ ์ค์ฒด๋ฅผ ์๋ฏธํ๋ค.
์์๋ก ์์ ํ๋์ ํ์ ์ด๋ผ๊ณ ํ๊ณ ์ข ์ด ์์ ์ฌ๋ฌ ํฌ๊ธฐ์ ์์ ๊ทธ๋ฆฌ๋ฉด ์ด๋ฌํ ์๋ค์ด ์ธ์คํด์ค๊ฐ ๋๋ค.
๐ ๊ฐ์ฒด ์งํฅ์ ํ์ํ ํด๋์ค์ ๊ตฌ์กฐ
์๋ก์ด ์๋ฃํ (ํ์ )์ ๋ง๋ค๋๋ ํด๋์ค (class)๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์์๋ ํ์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์คํด์ค์ธ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ์ธ์คํด์คํ (instantiation) ๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋๋ 1) ํด๋์ค ์ ์ 2) ๋ฉค๋ฒ ํจ์ ์ ์ 3) ์ ํ๋ฆฌ์ผ์ด์ ( ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ถ๋ถ) ์ด ํ์ํ๋ค.
#include <iostream>
using namespace std;
//ํด๋์ค ์ ์
class Circle //ํค๋
{
private:
double radius; //๋ฐ์ดํฐ๋ฉค๋ฒ ์ ์ธ
public: // ๋ชจ๋ ๊ณณ์์ ์ ๊ทผ ๊ฐ๋ฅ
double getRadius() const; // ๋ฉค๋ฒํจ์ ์ ์ธ
double getArea() const;
double getPerimeter() const;
void setRadius(double value);
}; //ํด๋์ค ์ ์ ๋์๋ ๋ฐ๋์ ์ธ๋ฏธ์ฝ๋ก ์ด ์์น
//๋ฉค๋ฒ ํจ์ ์ ์
double Circle::getRadius() const
{
return radius;
}
double Circle::getArea() const
{
const double PI = 3.14;
return(PI * 3.14 * radius);
}
double Circle::getPerimeter() const
{
const double PI = 3.14;
return(2 * PI * radius);
}
void Circle::setRadius(double value)
{
radius = value;
}
//์ ํ๋ฆฌ์ผ์ด์
: ํด๋์ค๋ฅผ ์ธ์คํด์ค ํํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํ์ฉ
int main()
{
//์ฒซ ๋ฒ์งธ circle ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ฉค๋ฒ ํจ์ ํธ์ถ
cout << "Circle 1: " << endl;
Circle circle1; // ๊ฐ์ฒด ์ธ์คํด์คํ
circle1.setRadius(10.0); // ์ฌ์ฉํ๊ธฐ ์ ์ฐ๋ ๊ธฐ ๊ฐ ์ด๊ธฐํ
cout << "Radius: " << circle1.getRadius() << endl;
cout << "Area: " << circle1.getArea() << endl;
cout << "Perimeter: " << circle1.getPerimeter() << endl;
return 0;
}
๐ ํด๋์ค ์ ์
ํด๋์ค ์ ์๋ ํค๋, ๋ณธ๋ฌธ, ์ธ๋ฏธ์ฝ๋ก ์ด๋ผ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ํด๋์ค ํค๋๋ class๋ผ๋ ํค์๋ ๋ค์ ํด๋์ค์ ์ด๋ฆ์ ๋ถ์ฌ์ ๋ง๋ ๋ค. ์ฌ์ฉ์ ์ ์ ์๋ฃํ์ ์๋ฌธ์์ ๋๋ฌธ์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด๋ ๊ด๊ณ๋ ์์ผ๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค ์ด๋ฆ์ ๊ฒฝ์ฐ๋ ๋๋ฌธ์๋ก ์์ํ๊ฒ ๋ง๋ค์ด ์๋ฌธ์๋ก ์์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ข๋ค.
์ ๊ทผ์ ํ์ access modifier
์ ๊ทผ ์ ํ์๋ ์ ๊ทผ ๊ถํ์ ๋ํ๋ผ ๋ ์ฌ์ฉํ๋ค. ํด๋์ค์์ ๋ฐ์ดํฐํจ์์ ๋ฉค๋ฒ ํจ์๋ฅผ ์ ์ธํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก private ์ ๊ทผ ์ ํ์๊ฐ ๋ถ๋๋ค. private์ ๊ทผ ์ ํ์๊ฐ ๋ถ์ผ๋ฉด ํด๋น ์์๋ก๋ถํฐ ๊ฐ์ ์ถ์ถํ ์๋ ์๊ณ , ๊ฐ์ ๋ณ๊ฒฝํ ์๋ ์๋ค.
๋ฉค๋ฒ๊ฐ private๋ก ์ ์ธ๋์ด ์๋ค๋ฉด, ํด๋์ค ๋ด๋ถ(๋ฉค๋ฒํจ์๋ฅผ ํตํด์) ์ ๊ทผํ ์ ์๋ค. ๋ฐ๋ฉด, ๋ฉค๋ฒ๊ฐ public์ผ๋ก ์ ์ธ๋์ด ์๋ค๋ฉด ๋ชจ๋ ๊ณณ (๋์ผํ ํด๋์ค ๋ด๋ถ, ์๋ธ ํด๋์ค ๋ด๋ถ, ์ ํ๋ฆฌ์ผ์ด์ )์์ ์ ๊ทผํ ์ ์๋ค.
๐ ๋ฉค๋ฒ ํจ์ ์ ์
๋ฉค๋ฒ ํจ์ ์ ์ธ์ ํจ์์ ํ๋กํ ํ์ ์ ์ ์ ๊ฒ์ด๋ผ ๋ณ๋์ ์ ์๊ฐ ํ์ํ๋ค. ์ด์ ์ ์ดํด๋ณด์๋ ๊ธฐ๋ณธ์ ์ธ ํจ์ ์ ์์ ๋น์ทํ๋ 1) ๋ฉค๋ฒ ํจ์์๋ ํ์ ์ const๊ฐ ์๋ค๋ ์ 2) ๋ฉค๋ฒ ํจ์์๋ ์์ ํด๋์ค ์ด๋ฆ์ด ๋ถ๋๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์๋ค.
๐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋์์๋ circle1์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํ๋ค. ๋ฉค๋ฒ ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํด์ผํ๋ค.
Circle circle1; //๊ฐ์ฒด ์ธ์คํด์คํ
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด circle1์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค. ํ์ง๋ง ๊ฐ์ฒด ๋ด๋ถ์ ์๋ double์๋ฃํ์ radius๋ผ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํ์ง ์์์ผ๋ฏ๋ก, ์ด ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํด์ฃผ์ด์ผ ํ๋ค.
๐ ๋ฉค๋ฒ ์ ํ
๊ฐ์ฒด์ ์ด๋ฆ๊ณผ ๋ฉค๋ฒ ํจ์ ์ฌ์ด์ ์ (.)์ด ์ฐํ์๋ค. ์ด๋ ๋ฉค๋ฒ ์ ํ ์ฐ์ฐ์(member selection operator)๋ผ๊ณ ๋ถ๋ฅด๋ ์ฐ์ฐ์์ด๋ค. ์ด ์ฐ์ฐ์๋ฅผ ํ์ฉํ๋ฉด ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํจ์๋ฅผ ์คํํ ์ ์๋ค.