[명품 C++ Programming] chapter 3 : 클래스와 객체(2) - 생성자와 소멸자

eunee22·2023년 8월 11일

명품 C++ Programming

목록 보기
11/34

제가 대학교 1학년 때 [명품 C++ Programming] 교재로 진행되는 C++ 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다.
(2022.9 ~ 2022.12)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.

🍑생성자

  • 객체가 생성될 때 자동으로 실행되어 객체를 초기화하는 특별한 멤버 함수

생성자 특징

  1. 생성자의 목적 → 객체 생성시 객체의 필요한 초기화를 위해
    ▶ ex) 멤버 변수 값 초기화, 메모리 할당, 파일 열기, 네크워트 연결 등

  2. 생성자 이름은 반드시 클래스 이름과 동일함

  3. 생성자는 리턴 타입을 선언하지 않음
    void 타입도 안됨.
    ▶ 함수 실행 종료를 위해 return문 사용은 가능하지만, 어떤 값도 리턴해서는 안됨 → return;

  4. 객체 생성 시 오직 한번만 호출됨
    ▶ 자동 호출. 임의로 호출X
    ▶ 각 객체마다 생성자가 실행

  5. 생성자는 중복 가능
    ▶ 생성자는 한 클래스 내에 여러개 가능 → 단, 매개변수 개수나 타입이 서로 다르게 선언되어야함
    ▶ 중복된 생성자 중 하나만 실행
    ▶ 사용자가 다양한 방법으로 객체를 생성하게 하도록 하는 것이 목적.
    ▶ 객체 생성시 호출된 하나의 생성자가 다른 생성자를 호출 할수 있음.

  6. 생성자가 선언되어 있지 않으면 기본 생성자가 자동 생성
    ▶ 기본 생성자 : 매개변수 없는 생성자
    ▶ 컴파일러에 의해 자동 생성됨.

생성자가 다른 생성자를 호출 – 위임 생성자

  • 한 클래스의 객체를 초기화하는 생성자의 코드가 비슷하게 중복 되는 경우가 많음 → 이를 간소화 하기 위함
  • 타켓 생성자(객체 초기화를 전담하는 생성자)와 위임생성자(타겟 생성자를 호출하는 생성자로 객체 초기화를 타켓 생성자에 위임)로 나누어 작성함

생성자와 멤버 변수의 초기화

  1. 생성자 코드에서 멤버 변수 초기화
    클래스 이름 :: 클래스 이름 { 초기화 내용 } 형식
  2. 생성자 서두에 초깃값으로 초기화
    클래스 이름 :: 클래스 이름 : 멤버 변수(초기화 값) { } 형식
    클래스 이름 :: 클래스 이름
    : 멤버 변수(초기화 값) { } 형식
    ▶ 멤벼 변수가 여러개 일때는 콤마,로 나열
  3. 클래스 선언부에서 직접 초기화
    class키워드 클래스 이름 { 선언과 동시에 초기화 };
    ▶ 생성자를 아무것도 제공하지 않는 경우에만 가능
    ▶ 해당 코드를 권장하지 않음

생성자는 꼭 있어야 하는가?

  • 그렇다.
  • 생성자가 선언되어 있지 않은 클래스에 대해서는 컴파일러가 기본 생성자를 만들어 삽입하고, 자신이 생성한 기본 생성자가 호출되도록 컴파일

기본 생성자(디폴트 생성자)

  • 클래스에 선언된 어떤 생성자도 없을 때 컴파일러가 자동으로 생성하는 생성자
  • 매개 변수 없는 생성자

  1. 기본 생성자가 자동으로 생성되는 경우 → 생성자가 하나도 작성되어 있지 않은 클래스
    ▶ 기본 생성자는 아무 실행없이 바로 리턴
    ▶ 컴파일러가 삽입한 기본 생성자 때문에 개발자가 작성한 소스코드가 변경이되어 저장되는 것은 아님
  2. 기본 생성자가 자동으로 생성되지 않는 경우 → 생성자가 하나라도 선언된 클래스
    ▶ 기본 생성자를 만들어주지 않으면 컴파일 오류를 발생 시킴

🍑소멸자

  • 객체가 실행되는 시점에서 자동으로 호출되는 클래스의 멤버 함수
  • 객체 소멸시 객체 메모리는 시스템으로 반환됨

소멸자 특징

  1. 소멸자의 목적 → 객체가 사라질 때 마무리 작업을 위해
    ▶ ex) 실행 도중 동적으로 할당 받은 메모리 해제, 파일 저장 및 닫기, 네크워트 닫기
  2. 소멸자의 이름 → 클래스의 이름 앞에 ~를 붙임
  3. 소멸자는 리턴 타입이 없으며, 어떤값도 리턴해서는 안됨
  4. 소멸자는 오직 한 개만 존재함 → 한 클래스내에 한 개
  5. 소멸자는 매개 변수를 가지지 않는 함수
  6. 소멸자가 선언되어 있지 않으면 컴파일러가 기본 소멸자가 자동 생성
    ▶ 기본 소멸자는 아무일도 하지 않고 단순 리턴

소멸자 실행

  • 지역객체 : 함수 내에 선언된 객체로서, 함수 종료시 소멸
    ▶ 생성 순서 → 프로그램에 선언된 순서로 생성
    ▶ 소멸 순서 → 함수 종료시, 생성된 순서의 역순으로 소멸

  • 전역객체 : 함수의 바깥에 선언된 객체로서, 프로그램 종료시 소멸
    ▶ 생성 순서 → 함수가 호출되는 순간에 순서대로 생성
    ▶ 소멸 순서 → 프로그램 종료시, 생성된 순서의 역순으로 소멸

  • new를 통한 동적으로 생성된 객체
    ▶ 생성 순서 → new를 실행하는 순간 객체 생성
    ▶ 소멸 순서 → delete 연산자를 실행할 때 객체 소멸

profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글