Day 37 - 클래스, 객체, 생성자, 접근 지정자, Getter/Setter

이유승·2025년 1월 12일

* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.

* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.

1. 클래스와 객체

클래스(Class)

  • 클래스는 객체의 설계도로, 데이터(속성)와 동작(메서드)을 묶어서 하나의 구조로 정의.
  • 클래스는 객체 지향 프로그래밍(OOP)의 중심 개념으로, 객체의 특성과 행동을 정의.
class ClassName {
  public:  // 접근 지정자
    int attribute;  // 속성
    void method() { // 메서드
        // 동작 정의
    }
};

객체(Object)

  • 객체는 클래스에서 생성된 실체로, 클래스에 정의된 속성과 동작을 사용할 수 있음.
  • 객체는 클래스의 인스턴스라고도 부른다..
ClassName obj; // 객체 생성
obj.attribute = 10;  // 속성에 값 할당
obj.method();        // 메서드 호출




2. 생성자(Constructor)

  • 생성자는 객체가 생성될 때 자동으로 호출되는 특수한 메서드입니다.
  • 객체의 초기화를 담당하며, 클래스와 동일한 이름을 가집니다.
  • 반환 타입이 없으며, 기본적으로 public 접근 지정자로 선언됩니다.

문법:

코드 복사
class MyClass {
  public:
    MyClass() { // 생성자
        cout << "Constructor called!" << endl;
    }
};

생성자 예시:

class Car {
  public:
    string brand;
    int speed;

    // 생성자 정의
    Car(string b, int s) {
        brand = b;
        speed = s;
    }
};

int main() {
    Car car1("Toyota", 120); // 객체 생성 시 생성자 호출
    cout << car1.brand << " is driving at " << car1.speed << " km/h." << endl;
    return 0;
}




3. 접근 지정자 (Access Specifier)

  • 접근 지정자는 클래스 멤버(속성 및 메서드)의 접근 범위를 제어합니다.
  • C++에서 사용되는 접근 지정자:
    - public: 어디서든 접근 가능.
    - private: 클래스 내부에서만 접근 가능.
    - protected: 클래스 내부 및 상속받은 클래스에서 접근 가능.
class MyClass {
  public:
    int publicVar; // 어디서든 접근 가능
  private:
    int privateVar; // 클래스 내부에서만 접근 가능
  protected:
    int protectedVar; // 상속받은 클래스에서 접근 가능
};




4. Getter와 Setter

  • Getter: 클래스의 속성 값을 읽는 메서드.
  • Setter: 클래스의 속성 값을 설정하는 메서드.
  • private 속성을 외부에서 간접적으로 읽거나 수정할 때 사용됩니다.
class Person {
  private:
    string name;

  public:
    // Setter
    void setName(string n) {
        name = n;
    }

    // Getter
    string getName() {
        return name;
    }
};

int main() {
    Person person;
    person.setName("Alice"); // Setter로 값 설정
    cout << person.getName(); // Getter로 값 읽기
    return 0;
}
profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글