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