이 글에서는 C++ 프로그래밍 언어를 기준으로 객체(Object)와 클래스(Class)의 차이점을 자세히 살펴보겠습니다. 두 개념은 객체 지향 프로그래밍(OOP)의 핵심이므로 정확히 이해하는 것이 중요합니다.
C++에서 클래스란?
- 클래스는 C++에서 객체 지향 프로그래밍을 구현하는 데 도움이 되는 코드의 기본 구성 단위입니다.
- 사용자가 직접 정의할 수 있는 사용자 정의 타입입니다.
- 클래스는 자체적인 데이터 멤버(data members)와 멤버 함수(member functions)를 가질 수 있습니다.
- 이러한 데이터 멤버와 멤버 함수는 클래스의 인스턴스를 생성함으로써 접근할 수 있습니다.
- 멤버 함수는 변수를 조작하거나, 해당 클래스에 속한 객체들이 어떻게 동작해야 하는지를 정의하는 속성(property) 역할을 합니다.
- 클래스는 객체를 만들기 위한 설계도(blueprint)로 이해할 수 있습니다.
- 예시: '직원(Employee)' 클래스를 생각해 봅시다. 이 클래스에는 직원 이름, 나이, 생년월일, 직급 등 다양한 속성이 존재할 수 있습니다.
- 이러한 속성들을 데이터 멤버라고 부릅니다.
- 반면 'draw_salary'(급여 지급), 'get_promotion'(승진) 같은 멤버 함수는 클래스 객체와 관련된 특정 동작을 수행합니다.
- 이것들은 모든 직원이 공유하는 공통 속성이라 할 수 있습니다.
- 클래스는
class키워드를 사용하여 정의하며, 그 뒤에 클래스 이름을 붙입니다. - 클래스 본문(body)은 중괄호 { } 안에 정의되고, 세미콜론(;)으로 마무리됩니다.
class class_name {
body_of_class
};C++에서 객체란?
- 객체는 클래스의 인스턴스(instance)입니다.
- 클래스가 정의되는 시점에는 메모리가 할당되지 않습니다.
- 객체가 생성되는 순간, 비로소 클래스의 모든 속성에 메모리가 할당됩니다.
- 클래스를 정의하면 객체의 구체적인 명세(specification)가 결정됩니다.
- 따라서 실제로 클래스를 활용하고 연산을 수행하려면 반드시 객체를 생성해야 합니다.
- 객체는 아래 문법을 사용하여 명시적으로 생성해야 합니다.
class_name object_name;
객체를 통한 멤버 접근
클래스의 데이터 멤버와 멤버 함수는 객체를 통해 점(.) 연산자를 사용하여 접근할 수 있습니다.
- 예시: 필요한 속성과 멤버 함수를 갖춘 클래스가 이미 생성되어 있다고 가정해 보겠습니다.
- 해당 클래스의 객체가 한 번 생성되면, 멤버 함수는 아래와 같은 방식으로 호출할 수 있습니다.
object_name.member_function()
접근 제어자(Access Specifiers)와 인라인 함수
- public으로 선언된 데이터 멤버도 위와 동일하게 '.' 연산자를 사용하여 접근할 수 있습니다.
- public 멤버:
public키워드로 정의된 멤버로, 외부에서 자유롭게 접근 가능합니다. - private 멤버:
private키워드로 정의된 멤버로, 객체를 통해서도 직접 접근할 수 없습니다. public,private,protected키워드를 통칭하여 데이터 멤버의 접근 제어자(access controls)라고 합니다.- 클래스 내부에서 정의된 멤버 함수는 기본적으로 인라인(inline) 함수로 간주됩니다.
- 인라인 함수는 함수가 정의된 위치 바로 다음에 확장되는 함수를 말합니다. 컴파일 시점에 매크로처럼 코드 전체에 복사되므로, 함수 호출에 따른 오버헤드를 줄일 수 있다는 장점이 있습니다.
- 클래스 외부의 일반 함수도
inline키워드를 붙이면 인라인 함수로 만들 수 있습니다.
핵심 요약: 클래스 vs 객체
| 구분 | 클래스 (Class) | 객체 (Object) |
|---|---|---|
| 개념 | 객체를 만들기 위한 설계도(틀) | 클래스의 실체화된 인스턴스 |
| 메모리 | 정의 시점에는 메모리 미할당 | 생성 시점에 메모리 할당 |
| 선언 방법 | class 키워드 사용 | class_name object_name; |
| 역할 | 데이터와 동작의 논리적 구조 정의 | 실제 데이터 저장 및 연산 수행 |