Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 객체(Object)와 클래스(Class)의 차이점 완벽 정리

이 글에서는 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;
역할데이터와 동작의 논리적 구조 정의실제 데이터 저장 및 연산 수행