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