- 클래스 복사
한 클래스의 내용을 다른 클래스로 복사를 하고 싶을 때 사용하며 클래스 복사에는 얕은 복사, 깊은 복사의 종류가 있다. 이 두 가지는 상황에 따라 사용법이 달라진다.
- 얕은 복사
얕은 복사는 내용물을 새롭게 복사하지 않고 기존의 메모리 주소를 공유하는 방식으로 성능 최적화와 메모리 관리를 단순하게 하기 위해서 주로 사용된다. 객체의 데이터를 새롭게 할당하여 복사하는 깊은 복사에 비해 얕은 복사는 주소만 복사하기 때문에 속도적으로 우세하며 메모리 사용 효율도 증가한다.
하지만 얕은 복사를 사용하게 될 경우 한 객체에서 데이터를 변경하면 다른 객체도 영향을 받으며, new와 함께 사용되는 delete가 두번 사용되게 되는 경우가 있으며 이럴 때 오류가 발생할 가능성이 있어서 주의가 필요하다.
- 깊은 복사
깊은 복사는 동적 메모리를 복사할 때 새로운 메모리를 만들고 그 곳에 데이터를 복사해 넣는다. 얕은 복사와 비교해 독립적인 메모리를 사용하여 다른 객체에서 데이터를 변경해도 다른쪽에 영향을 끼치지 않는다.
- 템플릿
템플릿은 현재 사용되고 있는 함수나 클래스에서 지정되는 타입을 후처리 하는 방식으로 함수, 클래스의 템플릿이 있다. 코드의 재사용성을 높이고 여러 데이터 타입을 유연하게 프로그래밍 가능하게 해주는 기능이다. 하지만 템플릿을 많이 사용할 수록 컴파일 시간이 길어지며 버그 발생 시 디버깅이 어려울 가능성이 높고 코드의 가독성이 떨어질 수 있다는 단점을 보유하고 있다.
- 함수 템플릿
함수 템플릿은 template<typename T>로 사용되고 int, double, float를 미리 정하지 않아 중복해서 함수를 만들지 않아도 된다는 장점이 있다.
template<typename T> //T는 임의 타입 지정
T sub(T val1, T val2) //T가 어떤 자료형이든 동작
{
return val1 + val2
}
메인 함수에서 사용할 때는 sub(10, 5) 와 같이 사용할 수 있으며 float일 때는 (10.f, 5.f), double일 때는 (10.0, 5.0)로 입력하면 자동으로 int, float, double을 나눠주고 ' '로 char 타입으로 지정할 수 있다.
- 클래스 템플릿
#include <iostream>
template <typename T> // 클래스 템플릿 선언, T는 자료형을 나타냄
class Box
{
private:
T value;
public:
Box(T val) : value(val) {} // 생성자
};
int main()
{
Box<int> intBox(10); //T가 각각 int, double, string으로 치환
Box<double> doubleBox(3.14);
Box<std::string> strBox("Hello");
}
클래스 템플릿도 이러한 방식으로 생성 가능하다.
- STL
STL(Standard Template Library)은 템플릿 기반의 유용한 함수, 클래스들을 모아둔 라이브러리이며 컴파일 타임 다형성을 활용해 실행 속도를 최적화 한다. STL은 컨테이너, 이터레이터, 알고리즘 등으로 나뉜다.
STL을 사용하면 코드의 재사용성이 높아지고 효율적인 프로그래밍이 가능하다.

- 컨테이너 (Container) → 데이터를 저장하는 구조
- vector : 동적 배열, 빠른 임의 접근 가능
- list : 연결 리스트, 빠른 삽입/삭제 가능 (인덱스 접근 불가)
- set : 중복을 허용하지 않는 정렬된 집합
- map : Key-Value 형태의 데이터 저장 (빠른 검색 가능)
- 이터레이터 (Iterator) → 컨테이너 원소를 순회하는 도구
- 컨테이너의 요소에 접근할 수 있도록 포인터처럼 동작함.
- begin() → 첫 번째 원소, end() → 마지막 원소의 다음 위치
- 알고리즘 (Algorithm) → 컨테이너에 적용 가능한 다양한 기능
- std::find : 특정 원소 찾기
- std::sort : 정렬
- std::count : 특정 원소 개수 세기
- std::replace : 특정 값을 변경
'내일배움캠프 언리얼' 카테고리의 다른 글
멀티 플레이 네트워크 (0) | 2025.04.14 |
---|---|
언리얼 엔진 5 C++ 개발(WIL) (0) | 2025.02.18 |
C++ 클래스(1) (0) | 2025.01.24 |
객체 지향 프로그래밍(2) (0) | 2025.01.22 |
객체 지향 프로그래밍(1) (1) | 2025.01.21 |