캡슐화
(encapsulation)멤버 변수
: 객체의 상태(state)를 나타내는 속성들멤버 함수
: 행동(behaviour)을 구현한 코드들클래스
(class)객체
인스턴스
(instance)✅ 객체 - 인스턴스의 차이점
거의 비슷하게 사용하지만 정확히 말하자면 아래와 같다.
객체
: 클래스의 타입으로 선언되었을 때를 지칭
인스턴스
: 그 객체가 메모리에 할당되어 실제 사용될 때를 지칭 (객체를 인스턴스화한 것)
class Circle {
public:
int radius; // 멤버 변수
double getArea(); // 멤버 함수
};
double Circle::getArea(){
return 3.14*radius*radius;
}
class Circle { // Circle 이름의 클래스 선언
...
}; // 반드시 세미콜론(;)으로 종료
class Circle {
public:
int radius; // 멤버 변수
double getArea(); // 멤버 함수
};
class Circle {
public: // 이하의 모든 멤버는 다른 접근 지정자가 선언할 때까지 public 접근 지정
...
};
public
: 클래스 외부로부터 접근을 허용private
: 외부에서 전혀 접근 불가하며, 아무 접근 지정이 없는 멤버는 private으로 처리됨protected
double Circle::getArea(){
return 3.14*radius*radius;
}
✅ 클래스 선언과 구현을 분리하는 이유
클래스의 재사용을 위함
클래스를 사용하고자 하는 다른 C++ 파일에서는 컴파일 시 클래스의 선언부만 필요하기 때문
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
double getArea();
};
double Circle::getArea() {
return 3.14*radius*radius;
}
int main() {
Circle donut;
donut.radius = 1; // donut 객체의 반지름을 1로 설정
double area = donut.getArea(); // donut 객체의 면적 알아내기
cout << "donut 면적은 " << area << endl;
Circle pizza;
pizza.radius = 30; // pizza 객체의 반지름을 30으로 설정
area = pizza.getArea(); // pizza 객체의 면적 알아내기
cout << "pizza 면적은 " << area << endl;
}
Circle donut; // Circle 클래스의 객체 생성. 객체 이름은 donut
Circle pizza; // Circle 클래스의 객체 생성. 객체 이름은 pizza
donut.radius = 1; // donut 객체의 radius 멤버에 1을 기록
double area = donut.getArea(); // donut 객체의 getArea()멤버 함수를 호출
해당 포스팅은 '황기태, 『명품 C++ Programming』, 생능출판사'를 참고하여 작성하였습니다.