포스트

(C++) 구조체(struct)와 클래스(class)의 차이 명확히 이해하기

C++에서 struct와 class의 개념적, 기술적 차이와 사용법

(C++) 구조체(struct)와 클래스(class)의 차이 명확히 이해하기

(C++) (struct) (class)

  • 최초 작성일: 2025년 5월 18일 (일)

(struct)

구조체(struct) 는 여러 데이터를 묶어 하나의 그룹으로 관리할 수 있도록 해주는 자료구조다. 기본적으로 데이터를 묶어서 표현할 때 주로 사용한다.

1
2
3
4
5
6
7
8
struct Point {
    int x;
    int y;
};

Point p;
p.x = 10;
p.y = 20;

구조체는 멤버 변수와 멤버 함수를 모두 가질 수 있으며, 상속도 가능하다.

(class)

클래스(class) 는 객체지향 프로그래밍(OOP)의 핵심으로, 데이터와 기능(메서드)을 묶어 캡슐화하는 역할을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Point {
private:
    int x;
    int y;

public:
    void set(int a, int b) {
        x = a;
        y = b;
    }

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

Point p;
p.set(10, 20);

클래스는 캡슐화, 상속, 다형성 등 OOP의 주요 개념을 지원한다.

##

항목structclass
기본 접근 지정자publicprivate
용도단순 데이터 묶음 위주데이터와 메서드를 묶는 객체지향적 설계
상속 가능 여부가능가능
캡슐화와 정보 은닉지원하지만 주로 사용하지 않음적극적으로 사용함

가장 중요한 차이는 기본 접근 지정자다.

##

구조체는 기본 접근 지정자가 public이다. 따라서 따로 지정하지 않으면 모든 멤버가 외부에서 접근 가능하다.

1
2
3
4
struct Person {
    std::string name;  // 기본 public
    int age;           // 기본 public
};

클래스는 기본 접근 지정자가 private이다. 즉, 따로 지정하지 않으면 모든 멤버는 클래스 외부에서 접근 불가능하다.

1
2
3
4
5
6
7
class Person {
    std::string name;  // 기본 private
    int age;           // 기본 private

public:
    void setName(const std::string& n) { name = n; }
};

struct class ?

  • struct:

    • 데이터 위주로 간단하게 묶어서 사용할 때
    • 주로 자료 전달이나 POD(Plain Old Data) 타입 정의할 때
  • class:

    • 데이터와 기능을 함께 묶어 객체지향적으로 설계할 때
    • 캡슐화, 상속, 다형성을 활용할 때

##

###

1
2
3
4
5
struct Color {
    int r, g, b;
};

Color c = {255, 0, 0};  // 빨간색 데이터 표현

###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Account {
private:
    double balance;

public:
    Account(double b) : balance(b) {}

    void deposit(double amount) { balance += amount; }
    bool withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
            return true;
        }
        return false;
    }
};

Account acc(1000.0);
acc.deposit(500.0);

##

  • struct는 데이터를 간단히 묶는 용도로, 기본 접근 지정자는 public이다.
  • class는 데이터와 기능을 함께 묶어 객체지향적으로 관리하는 용도로, 기본 접근 지정자는 private이다.
  • 구조체와 클래스 모두 상속이 가능하지만, 주로 설계 목적에 따라 적합한 쪽을 선택해 사용한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.