0Pricing
C++ Academy · 강의

객체 수명

객체가 생성되고 소멸되는 시점 알아보기

객체 수명은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

객체가 생성되는 시점

객체의 수명은 저장 공간이 할당되고 생성자가 실행을 마친 뒤 시작됩니다. 그 시점부터 객체를 완전히 사용할 수 있습니다.

#include <iostream>

struct Widget {
    Widget() { std::cout << "born\n"; }
};

int main() {
    Widget w;   // constructor runs here
}

객체가 소멸하는 시점

수명은 소멸자가 실행될 때 끝납니다. 스택 객체의 경우에는 해당 범위를 닫는 중괄호에 도달했을 때 수명이 끝납니다.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget w;
    std::cout << "alive\n";
}   // ~Widget runs here

생성과 소멸의 순서

객체는 생성된 역순으로 소멸합니다. 마지막에 생성된 객체가 가장 먼저 해제됩니다.

#include <iostream>

struct Tag {
    int id;
    Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
    ~Tag() { std::cout << "drop " << id << "\n"; }
};

int main() {
    Tag a(1);
    Tag b(2);   // dropped before a
}

자동 수명(스택 수명)

자동 객체는 자신을 감싸는 블록이 유지되는 동안 존재합니다. 가장 일반적이고 안전한 수명 모델입니다.

동적 수명(힙 수명)

new로 생성한 힙 객체는 delete가 호출될 때까지 존재합니다. 이 객체의 수명은 범위가 아니라 사용자가 관리합니다.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget* w = new Widget();
    std::cout << "still alive\n";
    delete w;   // destructor runs here
}

정적 수명

static 저장 공간을 사용하는 객체는 프로그램 전체가 실행되는 동안 존재합니다. 함수 내부의 정적 객체는 처음 사용될 때 한 번 생성됩니다.

#include <iostream>

int next() {
    static int counter = 0;   // built once
    return ++counter;
}

int main() {
    std::cout << next() << next() << next() << "\n";
}

임시 객체

표현식에서 생성된 임시 객체는 일반적으로 전체 표현식이 끝나는 시점(세미콜론)에 소멸합니다.

#include <iostream>
#include <string>

int main() {
    std::cout << (std::string("a") + "b") << "\n";
}   // temporary string dies after this line

멤버는 본문보다 먼저 생성됩니다

클래스의 멤버 객체는 이를 포함하는 객체의 생성자 본문이 실행되기 전에 생성되고, 그 객체의 소멸자 본문이 실행된 후 소멸합니다.

#include <iostream>
#include <string>

struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
    Engine e;
    Car() { std::cout << "car\n"; }
};

int main() { Car c; }

상수 참조로 수명 연장하기

임시 객체를 const&에 연결하면 참조와 같은 기간까지 수명이 연장됩니다. 유용한 C++ 규칙입니다.

#include <iostream>
#include <string>

int main() {
    const std::string& s = std::string("hi");
    std::cout << s << "\n";   // s still valid
}

수명 종료 후 사용

수명이 끝난 객체에 접근하는 것은 정의되지 않은 동작입니다. 전형적인 댕글링 참조 또는 해제 후 사용 버그입니다.

수명이 RAII를 이끕니다

소멸자는 수명이 끝날 때 결정적으로 실행되므로 C++는 리소스 정리를 수명에 연결합니다. 이것이 다음 강좌에서 다룰 RAII의 토대입니다.

빠른 확인

객체 수명에 대한 이해도를 확인해 보십시오.

복습

객체의 수명은 생성이 끝난 뒤 시작되고 소멸과 함께 끝난다는 것을 배웠습니다. 자동 객체는 범위를 따르고, 동적 객체는 new/delete를 따르며, 정적 객체는 프로그램 전체 동안 유지됩니다. 소멸은 역순으로 이루어지며, 이것이 RAII의 기반입니다.

자주 묻는 질문

“객체 수명” 강의는 무료인가요?

네 — “객체 수명” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“객체 수명”에서 뭘 배우나요?

객체가 생성되고 소멸되는 시점 알아보기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“객체 수명” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 스택 할당
  2. new/delete를 사용한 힙 할당
  3. 객체 수명
  4. 일반적인 메모리 버그
← C++ Academy(으)로 돌아가기