티스토리 뷰

반응형

🧱 `struct`에서 출발한 객체지향의 여정: 캡슐화와 접근 함수의 탄생

🔹 1. C의 `struct`: 데이터 묶음, 하지만 무방비 상태

C 언어의 `struct`는 데이터를 묶는 단순한 도구입니다.
하지만 기능은 없습니다. 보호도 없습니다.

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p;
    p.x = -1000;  // ❗ 문제: 음수 좌표 허용됨
}

❗ 문제점 요약

  • 외부에서 값을 마음대로 바꿀 수 있다.
  • 유효하지 않은 값도 필터링 불가.
  • 데이터를 다루는 함수는 구조체 외부에서 정의해야 한다.



🔹 2. C++의 `class`: 기능을 가진 구조체의 확장

C++은 C의 struct를 확장하여 class라는 개념을 도입했습니다.
데이터 + 기능 + 보호가 하나로 묶인 “객체(Object)” 개념입니다.

class Point {
    int x;
    int y;

public:
    void move(int dx, int dy) {
        x += dx;
        y += dy;
    }
};
Point p;
p.x = 10;  // ❌ 'x' is private



🔍 왜 에러가 발생하는가? → `class`의 기본 접근 권한은 `private`

  • C++의 class는 기본적으로 멤버 변수에 private 접근 제한을 둡니다.
  • 이는 외부에서 직접 접근하지 못하게 막는 보호 장치입니다.
종류 기본 접근 권한
struct public
class private




반응형

 


✅ 이 문제를 해결하는 두 가지 방법

📌 1) 접근 지정자 `public`을 사용

class Point {
public:
    int x;
    int y;
};

int main() {
    Point p;
    p.x = 10;  // ✅ 가능해짐
}

📌 2) 접근 지정자는 `private`, 대신 접근 함수로 제어

이것이 바로 캡슐화(Encapsulation)의 핵심입니다.


🔐 캡슐화란 무엇인가?

객체의 내부 상태(데이터)를 숨기고,
외부에서는 제공된 함수(인터페이스)를 통해서만 접근하게 만드는 객체지향의 원칙.

✨ 비유

  • 자동차 운전자는 핸들을 돌리고 페달을 밟습니다.
  • 엔진 내부 동작은 볼 수도, 만질 수도 없습니다.
  • 캡슐화 = 사용자와 내부 구현 사이에 보호막



🔓 캡슐화를 위한 실전 방법

1) 멤버 변수는 `private`으로 숨긴다

class Point {
private:
    int x;
    int y;

2) 멤버 접근 함수(getter/setter)를 통해 우회 접근한다

public:
    void setXY(int a, int b) {
        if (a >= 0 && b >= 0) {
            x = a;
            y = b;
        }
    }

    int getX() { return x; }
    int getY() { return y; }
};



🛠 사용 예시

int main() {
    Point p;
    p.setXY(10, 20);  // ✅ setter로 안전하게 설정
    int a = p.getX();   // ✅ getter로 값 조회

    p.x = -999;          // ❌ 에러! private 멤버 접근 불가
}



반응형

 


🎯 핵심 요약

요소 설명
struct 단순 데이터 묶음. 외부 접근 허용. 보호 기능 없음
class 데이터 + 기능. 기본 접근 권한은 private
접근 지정자 private, public 등으로 접근 범위 제어
캡슐화 멤버를 숨기고 함수로만 접근하게 하여 안정성 확보
접근 함수 setX(), getX() 같은 우회 경로 제공 함수




반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형