프로그래밍에 객체를 사용하는데, 모든 객체의 속성과 행동을 결합시킨다
ex) 학생, 책상, 원, 버튼 등
현재 값을 가지고 있는 데이터 필드(속성)에 의해 표현된다
일련의 함수에 의해서 정의되고, 함수를 호출해서 객체에게 어떤 일을 수행하도록 요구한다
클래스에서 인스턴스를 생성하는 것
새로운 객체가 셍성될 때 호출되는 특별한 유형의 함수이다 보통은 객체의 데이터 필드에 초기 값을 주는 초기화 과정을 수행하기 위해 설계된다
class Square {
public:
double length; // 데이터 필드
Square() { // 생성자
length = 10;
}
Square(double newLength) { // 생성자
length = newLength;
}
double getArea() { // 함수
return length * length;
}
};
클래스 템플릿과 객체의 설명은 UML 표기법을 사용하여 표준화할 수 있다
위의 코드를 다이어그램으로 나타내면 아래와 같다

위의 사진에서 생성자와 함수 부분에서 +기호를 볼 수 있는데, 이는 public을 의미한다
객체에 대한 UML 표기법은 아래와 같다


위의 다이어그램을 다시 자세히 보면 Square()라는 생성자에는 인수가 존재하지 않는다 이런 생성자를 인수 없는 생성자라고 부른다
기본 생성자라고도 부르며, 어떠한 생성자도 선언하지 않을 경우에만 자동으로 주어진다
인수 없는 생성자를 생성하는 코드
ClassName variableName; // 기본 구조
인수 있는 생성자를 생성하는 코드
ClassName variableName(인수);
객체를 생성한 후에 데이터에 접근하고 함수를 호출하기 위해서는 객체 멤버 접근 연산자인 점(.)을 사용해야 한다
objectName.dataField // 객체에서 데이터 필드를 참조
objectName.funcion(인수) // 객체에 대한 함수를 호출
#include <iostream>
using namespace std;
class Square {
public:
double length;
Square() {
length = 10;
}
Square(double newLength) {
length = newLength;
}
double getArea() {
return length * length;
}
};
int main() {
Square square1;
Square square2(5);
cout << "square1의 한 변의 길이는 " << square1.getArea() << "이고, square1의 넓이는 " << square1.getArea() << "입니다." << endl;
cout << "square2의 한 변의 길이는 " << square2.getArea() << "이고, square2의 넓이는 " << square2.getArea() << "입니다." << endl;
return 0;
}
출력 결과:
square1의 한 변의 길이는 100이고, square1의 넓이는 100입니다.
square2의 한 변의 길이는 25이고, square2의 넓이는 25입니다.
square1는 인수 없는 생성자이고, square2는 인수가 있는 생성자이다
위에서는 하나의 cpp 파일에 코드를 구현했다 하지만 이렇게 구현했을 경우에는 이 클래스를 다른 프로그램에서 사용할 수 없다 따라서 다른 프로그램에서도 사용할 수 있게 하기 위해서는 분리된 헤더 파일에서 클래스를 선언해야 한다
클래스의 규약 사항을 기술하는 것이다
모든 데이터 필드와 생성자 원형, 함수 원형을 목록으로 만든다
확장자는 .h인데, h는 헤더를 의미한다
클래스의 선언은 클래스의 규약 사항을 기술하는 것이라면, 클래스 구현은 그 규약을 실현하는 것이다
생성자와 함수를 정의한다
확장자는 .cpp이다
클래스 선언과 구현은 두 개의 분리된 파일로 저장할 수 있고
두 파일의 이름은 같지만 다른 확장자를 가진다
class Square {
public:
double length;
Square();
Square(double);
double getArea();
};
헤더 파일의 마지막에 세미콜론이 꼭 있어야 한다
#include "Square.h"
Square::Square() {
length = 10;
}
Square::Square(double newLength) {
length = newLength;
}
double Square::getArea() {
return length * length;
}
#include <iostream>
#include "Square.h"
using namespace std;
int main() {
Square square1;
Square square2(5);
cout << "square1의 한 변의 길이는 " << square1.getArea() << "이고, square1의 넓이는 " << square1.getArea() << "입니다." << endl;
cout << "square2의 한 변의 길이는 " << square2.getArea() << "이고, square2의 넓이는 " << square2.getArea() << "입니다." << endl;
return 0;
}