object oriented programming
ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๋ฉด์ '๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ' ์ด๋ ๋ง์ ์ ๋ง ๋ง์ด ๋ค์๋ค. ์ฌ์ ํ ์ด๋ ค์ด ๊ฐ๋ ์ด์ง๋ง ํด๋น ๊ธ์ ์ฝ๊ณ ์กฐ๊ธ์ ์ดํด ํ ์ ์์๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋์จ ํ๋ฆ๊ณผ ์ ์ค์ํ์ง ์ฝ๊ฒ ์ค๋ช ํด์ฃผ๋ ๊ธ์ด๋ ํ๋ฒ ์ฝ์ด๋ณด๋๊ฑธ ์ถ์ฒํ๋ค.
๐ ์ถ์ฒ๊ธ | ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ทธ๋ ๋ค๋ฉด ํด๋ฆฐ ์ํคํ ์ฒ์ ์ค๋ช ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด์.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์
์บก์ํ(Encapsulation) ์บก์ํ๋ ๊ฐ์ฒด์ ์ผ๋ถ ํจ์๋ ๋ณ์๋ฅผ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ ๋งํ๋ค. ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ์บก์ํ ๊ฐ๋ ์ ํด๋์ค์ private ๋ฉค๋ฒ ๋ฐ์ดํฐ์์ public ๋ฉค๋ฒ ํจ์๋ก ํํํ๋ค.
๊ฐ๋จํ C ์ธ์ด ์์
// point.h
struct Point;
struct Point* makePoint(double x, double y);
double distance (struct Point *p1, struct Point *p2);#include "point.h"
#include <stdlib.h>
#include <math.h>
struct Point {
double x, y;
};
struct Point* makepoint(double x, double y) {
strict Point* p = malloc(sizeof(struct Point));
p->x = x;
p->y = y;
return p;
}
double distance(struct Point* p1, struct Point* p2) {
double dx = p1->x - p2->x;
double dy = p1->y - p2->y;
return sqrt(dx*dx+dy*dy);
}C++ ์ปดํ์ผ๋ฌ๋ ํด๋์ค์ ์ธ์คํด์ค ํฌ๊ธฐ๋ฅผ ์ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
// point.h
class Point {
public:
Point(double x, double y);
double distance(const Point& p) const;
private:
double x;
double y;
};
// point.cc
#include "point.h"
#include <math.h>
Point::Point(double x, double y) : x(x), y(y) {}
double Point::distance(const Point& p) const {
double dx = x-p.x;
double dy = y-p.y;
return sqrt(dx*dx + dy*dy)
}C++ ์ฝ๋์์๋ point.h ํค๋ ํ์ผ์ ์ฌ์ฉํ๋ ์ธก์์ ๋ฉค๋ฒ ๋ณ์ x, y๋ฅผ ์๊ฒ ๋๋ค. ๋ฉค๋ฒ ๋ณ์ ์ด๋ฆ์ด ๋ฐ๋๋ฉด ์ฌ์ฉํ๋ ์ธก์์๋ ๋ณ๊ฒฝํด์ผ ํ๋ค. ์ด๋ ์บก์ํ๊ฐ ๊นจ์ง ๊ฒ์ด๋ค. ๋ง์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ์บก์ํ๋ฅผ ๊ฐ์ ํ์ง ์๋๋ค.
์์(Inheritance) ์์์ ๋ณ์์ ํจ์๋ฅผ ํ๋์ ์ ํจ ๋ฒ์๋ก ๋ฌถ์ด์ ์ฌ์ ์ ํ๋ ๊ฒ์ ๋งํ๋ค.
namedPoint.h
// namedPoint.h
struct NamedPoint;
struct NamedPoint* makeNamedPoint(double x, double y, const char* name);
void setName(struct NamedPoint* np, const char* name);
char* getName(struct NamedPoint* np);
// namedPoint.c
#include "namedPoint.h"
#include <stdlib.h>
struct NamedPoint {
double x, y;
char* name;
};
struct NamedPoint* makeNamedPoint(double x, double y, const char* name) {
struct NamedPoint* p = malloc(sizeof(struct NamedPoint));
p->x = x;
p->y = y;
p->name = name;
return p;
}
void setName(struct NamedPoint* np, char* name) {
np->name = name
}
char* getName(struct namedPoint* np) {
return np->name;
}
// main.c
#include "point.h"
#include "namedPoint.h"
#include <stdio.h>
int main(int ac, char** av) {
struct NamedPoint* origin = makeNamedPoint(0.0, 0.0, "origin");
struct NamedPoint* upperRight = makeNamedPoint(1.0, 1.0, "upper right");
printf("distance = %f\n", distance(origin, upperRight));
}NamedPoint ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ Point ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก๋ถํฐ ํ์๋ ๊ตฌ์กฐ์ฒ๋ผ ๋์ํ๋ค. NamedPoint๊ฐ Point๋ฅผ ํฌํจํ๋ ์์ ์งํฉ์ผ๋ก, NamedPoint๋ Point์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ํฌํจํ๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋จ์ผ ์์์ ๊ตฌํํ ์ ์์ง๋ง ๋ค์ค ์์์ ๊ตฌํํ๊ธฐ๋ ์ด๋ ต๋ค.
๋คํ์ฑ
๊ฐ์ฒด ์งํฅ ์ธ์ด์์ ๋คํ์ฑ์ ์์ ํ๊ณ ํธ๋ฆฌํ๊ฒ ์ ๊ณตํ๋ค๋ ๊ฒ์ ์์ค ์ฝ๋ ์์กด์ฑ์ ์ญ์ ์ํจ๋ค๋ ๊ฒ์ด๋ค. ํธ์ถํ๋ ๋ชจ๋์ด๋ ํธ์ถ๋๋ ๋ชจ๋์ด๋ ๊ด๊ณ์์ด ์์ค ์ฝ๋ ์์กด์ฑ์ ์ํ๋ ๋ฐฉํฅ์ผ๋ก ์ค์ ํ ์ ์๋ค.
๋คํ์ฑ ๋๋ฌด ์ด๋ ค์์ ๋ฐ๋ณต ํ์ต ํ์ ์ฐธ๊ณ
Last updated