C++ Text RPG Extra Work: C++ Template; Code Kata 코드 카타 [음양 더하기 & 나누어 떨어지는 숫자 배열 & 서울에서 김서방 찾기] | TIL 17th | 캠프 11일 차 | 05/06/2026 (Wed)

2026. 5. 6. 23:40·TIL/Boot Camp

흠… 얼핏 듣기로는 C++ Text RPG 필수 코스 다 했으면, 도전은 안해도 된다고 해서 다른거 하고 있었는데… 오늘 갑자기 하라고해서… 다른거 하다가 급시작.. 내일 마무리하고 배운거 제대로 정리 할듯.

 

Agenda: C++ Text RPG Extra Work | C++ Template | Code Kata 코드 카타 [음양 더하기 & 나누어 떨어지는 숫자 배열 & 서울에서 김서방 찾기]

 

C ++ Template

  • 기존에 클래스를 만들 때, 클래스 선언문이 들어있는 부분은 헤더 파일(*.h)에 작성하고, 정의(구현)하는 부분은 함수의 크기가 클 경우 별도의 cpp 파일에 작성하게 된다.
  • 하지만, 클래스 템플릿을 이용하는 경우에는 선언문 외부의 멤버함수들도 헤더 파일안에 작성합니다. 클래스 템플릿은 클래스가 아니라 클래스를 만드는 템플릿이며, 멤버함수의 선언도 직접 함수를 정의하지 않고 함수에 대한 템플릿을 선언만 하는 것이기 때문. 그러므로 비록 클래스 템플릿 선언문 외부에 작성한다 할지라도 이 역시 헤더 파일에 작성하는 것이 올바른 방법.

 

C++ template class 소멸자에 delete[] 해두면 메인 함수에서 delete 안해도되나?

예, 템플릿 클래스의 **소멸자(destructor)**에 delete[]를 정확히 구현해 두었다면, 메인 함수(또는 객체가 소멸되는 지점)에서 명시적으로 delete를 다시 호출할 필요가 없다.

C++에서 소멸자는 객체의 수명이 끝날 때(스택에서 벗어나거나, delete될 때) 자동으로 호출되므로, 템플릿 클래스 내부의 동적 할당 배열을 정리하는 가장 올바른 방법.

중요 주의사항

  1. new[]와 delete[] 짝 맞추기: new[]로 배열을 할당했다면 반드시 delete[]를 사용해야 한다. 그냥 delete를 사용하면 소멸자가 한 번만 호출되어 메모리 누수가 발생할 수 있다.
  2. 포인터 멤버의 소멸자: T가 포인터 타입인 경우(MyArray<int*>), delete[]는 포인터 배열만 해제하고, 포인터가 가리키는 실제 객체는 해제하지 않는다. 이 경우 내부 요소를 반복문으로 delete한 후 delete[]해야 한다.
  3. 복사/이동 생성자와 대입 연산자: 소멸자에서 delete[]를 한다면, 객체 복사 시 소멸자가 중복 호출되어 프로그램이 크래시될 수 있다. 복사 생성자와 복사 대입 연산자를 반드시 직접 구현하거나(Deep Copy), 복사를 금지(delete)해야한다.
  4. std::vector 사용 권장: 직접 메모리를 관리하기보다는 std::vector를 사용하면 소멸자나 메모리 관리를 신경 쓸 필요가 없다.

 

C++ template에서 const t& 란?

C++ 템플릿에서 const T&는 템플릿 매개변수 (T)로 정의된 객체를 수정 불가능한 상수(const)에 대한 참조(&)로 전달받겠다는 의미. 복사 비용을 줄여 성능을 최적화하고, 함수 내에서 원본 데이터를 보호하기 위해 사용되는 흔한 제네릭 프로그래밍 패턴.

주요 특징 및 장점

  • 복사 비용 절감 (Efficiency): 객체가 크더라도 참조(주소)만 전달하므로, 전체 객체를 복사하는 것보다 훨씬 효율적.
  • 데이터 보호 (Read-only): const가 붙어 있어 함수 내에서 원본 객체의 값을 변경할 수 없다.
  • 유연성: const 객체와 일반 객체 모두를 매개변수로 받을 수 있다.
  • 임시 객체 수용: 임시 객체(value)도 const 참조로 바인딩하여 안전하게 사용할 수 있다.

T& vs const T& vs T

  • T (Pass-by-value): 객체를 복사하여 전달. 작은 데이터 타입(int 등)에 적합.
  • const T& (Pass-by-const-reference): 복사 없이 읽기 전용으로 전달. 큰 객체(std::vector, std::string 등)에 적합.
  • T& (Pass-by-reference): 참조로 전달하여 원본 수정 가능.

주의사항 (Template Type Deduction)const T&로 매개변수를 받을 때, (T)에 대한 타입 추론(Type Deduction) 규칙을 이해해야 한다.

  • const T&는 템플릿 함수나 클래스에서 안전하고(const) 효율적인(reference) 데이터 전달을 위한 표준 관용구다.

 

C++ 에서 function 뒤에 const 붙이는 이유

C++에서 함수 뒤에 const를 붙이는 이유는 해당 멤버 함수가 객체의 멤버 변수를 변경하지 않는 '읽기 전용(Read-Only)' 함수임을 명시하기 위해서다.

이를 통해 코드 안정성을 높이고, const 객체에서도 해당 함수를 호출할 수 있게 하며, 의도를 명확히 하여 컴파일러 최적화를 돕는다.

주요 이유 및 특징:

  • 멤버 변수 변경 불가: const 멤버 함수 내부에서는 멤버 변수의 값을 수정할 수 없으며, 수정 시도 시 컴파일 에러가 발생.
  • const 객체 안정성: const로 선언된 객체는 const가 붙은 멤버 함수만 호출할 수 있다.
  • 가독성 및 안전성: 함수가 데이터를 변경하지 않는다는 것을 보장하므로 코드 유지보수와 안정성에 도움을 준다.
  • 사용 예시: 주로 getter 함수나 멤버 변수를 조회만 하는 메서드 뒤에 사용.

 

Code Kata [음양 더하기 & 나누어 떨어지는 숫자 배열 & 서울에서 김서방 찾기]

  • 026. 음양 더하기 | Solved Date: 2026-05-06-Mon | Problem Link
  • 025. 나누어 떨어지는 숫자 | Solved Date: 2026-05-06-Wed | Problem Link
  • 024. 서울에서 김서방 찾기 | Solved Date: 2026-05-06-Wed | Problem Link
저작자표시 동일조건 (새창열림)
'TIL/Boot Camp' 카테고리의 다른 글
  • 게임 프로그래밍 전문가 국가기술자격증 | Code Kata: 가운데 글자 가져오기, 수박수박수박수박수박수, 내적, 약수의 개수와 덧셈 | TIL 19th | 캠프 13일 차 | 05/08/2026 (Fri)
  • CPP Text RPG Project 완료 | Code Kata: 제일 작은 수 제거하기, 없는 숫자 더하기, 핸드폰 번호 가리기 | TIL 18th | 캠프 12일 차 | 05/07/2026 (Thur)
  • Code Kata [정수 내림차순으로 배치하기 | 하샤드 수]; C++ ; Text RPG Complete | 캠프 10일 차 | 2026/05/04 (Mon) | TIL nth
  • C++ 공부 | 자연수 뒤집어 배열로 만들기 - Code Kata | 2026/05/01 (Fri) | TIL 15th
DevCol
DevCol
DevCol (Development Collaboration). 함께 개발 & 공부 & IT 정보 나눔장소
  • DevCol
    DevCol (Development Collaboration)
    DevCol
  • 블로그 메뉴

    • Unreal Engine
    • TIL
    • 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
    • 분류 전체보기 (73) N
      • Unreal Engine (31) N
        • Project (2) N
        • Dev Log (0)
        • Debugging (2) N
        • Blueprint (1)
        • UE 기초 (25) N
        • UE 심화 (0)
        • TA (1) N
      • Programming Language (0)
        • C++ (0)
        • C# (0)
      • Unity Engine (0)
      • 자격증 (3)
        • 게임국가기술자격검정 [한국콘텐츠진흥원] (3)
      • Coding Test | 코딩테스트 (0)
        • 프로그래머스 기초 (0)
        • 프로그래머스 입문 (0)
      • TIL (38) N
        • Boot Camp (32) N
      • Git & Github (1)
  • 링크

    • Youtube
    • GitHub
    • itch.io
    • Blog (En)
  • 공지사항

  • 인기 글

  • 태그

    til
    cpp
    게임 개발
    기초
    Unreal engine
    UE5
    Devlog
    C++
    Code Kata
    Programming
    c
    언리얼 엔진
    프로그래밍
    게임개발
    UE
    코드 카타
    Game Dev
    코드카타
    내일배움캠프
    Boot Camp
  • 최근 글

  • GitHub Youtube itch
  • hELLO · Designed By 정상우.v4.10.6
  • DevCol
    C++ Text RPG Extra Work: C++ Template; Code Kata 코드 카타 [음양 더하기 & 나누어 떨어지는 숫자 배열 & 서울에서 김서방 찾기] | TIL 17th | 캠프 11일 차 | 05/06/2026 (Wed)
    상단으로

    티스토리툴바