2025. 4. 29. 15:42ㆍProgramming Language/C++
1. 클래스
데이터(속성)와 기능(함수)을 하나로 묶어 설계하는 틀(template)같은 것으로 어떤 객체를 만들기 위한 설계도라고 생각하면 된다
기존에 배웠던 struct와 비슷하다고 생각하면 된다.
2. 클래스의 정의
class 클래스명 {
// 멤버변수 및 함수
}
와 같이 정의하고 이를 실제 정의하는 예시는
class Car {
int speed;
std::string color;
}
와 같이 선언하면 된다.
3. 클래스의 선언
클래스의 선언, 즉 사용하는 방법은
클래스명 객체명;
과 같이 사용하며
int main(){
Car car;
}
이렇게 정의가 가능하다.
이렇게 선언한 클래스를 객체라고 하며 클래스 자체는 실체가 아니고 틀이며 위처럼 선언을 해서 만들어진 객체가 진짜 클래스의 실체가 된다.
그런데 여기까지 보면 사실 class와 struct, 구조체와 다른점을 찾기 힘든데 조금 다른 점이 class의 경우는
int main(){
Car car{120, "black"};
}
이렇게 초기화가 불가능하다는 것이다.
또한 멤버변수에 접근해서 값을 변경하는 것도 불가능하다
클래스의 경우는 기본적으로 외부에서의 접근이 불가능하게 되어 있다.
이게 클래스와 구조체의 유일한 차이점인데 클래스를 외부에서 접근할 수 있게 하려면 접근제어자를 추가해줘야만 하는데
이렇게 public이라는 접근 제어자를 넣어주면 해당 접근제어자의 영역에 존재하는 speed나 color에 대해서 외부 접근이 허용된다.
이렇게 접근제어자의 영역에 존재하지 않는다면 접근이 불가능하게 된다는 것을 알 수 있다.
이중 직접 사용자가 외부에서 접근하지 못하도록 접근제어자를 설정하려면 private라는 접근제어자를 사용하면 된다.
그러니까 class는 아무런 접근제한자를 설정하지 않는다면 private로 설정이되고 struct는 아무런 접근 제한자를 설정하지 않으면 public으로 설정이 되는 것이고 위에 class와 struct의 유일한 차이라고 말한 부분은 딱 이 차이점에 대해서 이야기 한것이다.
접근제어자
접근 제어자는 클래스 멤버(변수, 함수)에 외부에서 접근할 수 있는 권한을 정하는 키워드를 의미한다.
이 접근 제어자는 public, private, protected의 세가지로 구성되어 있다.
public
public은 누구나 접근이 가능한 접근 제어 방식으로 해당 제어자가 작성된 변수 혹은 함수에 대해서는 어떤 누구든지 어디서든지 접근이 가능한 상태를 의미한다.
class Car {
public:
int speed; // 공개된 멤버
void run() {
std::cout << "달린다!" << std::endl;
}
};
int main() {
Car myCar;
myCar.speed = 100; // 접근 OK
myCar.run(); // 접근 OK
}
private
private는 클래스 내부에서만 사용하는 변수, 함수를 위해서 사용되며 외부에서는 접근을 제한한다.
class Car {
private:
int speed; // 비공개 멤버
public:
void setSpeed(int s) { speed = s; } // 공개된 함수로만 조작
int getSpeed() { return speed; }
};
int main() {
Car myCar;
// myCar.speed = 100; // ❌ 직접 접근 불가 (컴파일 에러)
myCar.setSpeed(100); // ✅ setter를 통해 간접 접근
}
protected
클래스 내부 + 상속받은 자식 클래스에서 접근을 가능하게 제한하는 것으로
class Animal {
protected:
int age;
};
class Dog : public Animal {
public:
void setAge(int a) { age = a; } // OK: 자식 클래스는 접근 가능
};
int main() {
Dog myDog;
// myDog.age = 5; // ❌ main()에서는 접근 불가
myDog.setAge(5); // ✅ setter를 통해 접근
}
이 접근 제한자를 사용하는 이유는 외부로 부터 클래스의 데이터의 변경을 막고 데이터의 일관성을 유지하기 위함이다.
이 또한 내용에 안배운 내용들이 포함되어 있으니 이런 접근 제한자들이 존재한다고 이해하고 넘어가자.
'Programming Language > C++' 카테고리의 다른 글
Part2::Ch 01. 클래스 - 04. 파괴자(Destructor) (0) | 2025.04.29 |
---|---|
Part2::Ch 01. 클래스 - 03. 생성자(Constructor) (0) | 2025.04.29 |
Part2::Ch 01. 클래스 - 01. 객체지향 개괄 (0) | 2025.04.29 |
Ch 10. 범위, 공간 - 03. 공간 기억 부류(자동, 정적, 동적) (0) | 2025.04.29 |
Ch 10. 범위, 공간 - 02. 범위 (0) | 2025.04.29 |