내일배움캠프_Unreal/TIL

내일배움캠프_Unreal/TIL - Day 12 (251212)

하임 2025. 12. 12. 21:10

C++ 상속과 다형성

오늘은 C++ 상속과 다형성에 대해서 배움.

https://ha2m.tistory.com/28

 

 

 

객체 지향 프로그래밍의 핵심적인 내용이기 때문에 지금까지 했던 내용들보다 난이도가 있었고, 헷갈리거나 강의자료에 잘 설명되어 있지 않아서 궁금한 점들이 있었음.

 

우선, 아래 2가지 생성자 방식의 차이점이 궁금했음.

Vehicle(string c, int s) : color(c), speed(s) {}

Person() {
name = "Unknown";
age = 0;
}

 

첫번째는 초기화 리스트 방식으로, 변수가 메모리에 생성되는 순간에 바로 값을 넣는다고 함.

성능 면에서 더 빠르고 효율적이며 (특히 string이나 클래스 객체일 때),

1. 상속받은 부모 클래스 생성자를 호출하거나

2. const 변수일 때

3. 참조자(&) 변수일 때

필수적으로 사용된다고 함. 

 

두번째는 몸체 대입 방식으로, 변수가 빈 상태에서 생성되고(초기화), 이후 값을 대입한다고 함.

가독성은 좋지만, 초기화 리스트와 다르게 생성 후 대입이라는 비효율적인 방식이기 때문에 첫번째를 쓰는 걸 권장한다고 함.

 

이후 튜터님께 물어보니 마찬가지로 첫번째 방식을 디폴트로 가져가는 게 좋지만 언리얼에서는 두번째 방식을 사용한다고 해서 둘 다 숙지하고 있는 게 좋을 거 같다고 생각함.

 

 

다음으로, 아래 2가지 객체 생성 방식의 차이점이 궁금했음.

Cat cat(2);
cat.Meow();

Cat *cat = new Cat(2);
cat->Meow();

 

첫번째는 Stack 영역에 객체를 할당한 것으로, 함수 { }가 끝나면 자동으로 소멸하고 속도가 가장 빠르다고 함.

보통 다형성이 필요없고, 함수 안에서 잠깐 쓰고 버릴 때 가장 안전하고 권장되는 방식이라고 함.

 

두번째는 Heap 영역에 객체를 할당한 것으로, 다형성 사용 가능하고 소멸자로 수명 제어를 할 수 있는 대신 메모리 누수에 대한 책임이 생긴다고 함.

보통 여러 종류의 객체를 한 바구니에 담거나,

객체가 함수 밖으로 전달되어 살아있어야 할 때,

실행 중(런타임)에 어떤 걸 만들지 결정할 때 사용한다고 함.

 

이후 튜터님께 물어보니 Stack과 Heap의 방식과 원리를 처음부터 설명해주셔서 충분히 이해했지만, 현재 실습 단계에선 단순 객체 생성밖에 없다 보니 각각 어떤 상황에서 사용하는지가 명확하게 와닿지 않았음. 예습과 더 많은 예제들을 찾아보면서 차차 습득할 예정.

 

 

슬슬 어려운 부분이 나오다보니 확실히 TIL 다워진 거 같아서 좋음.

밀린 TIL도 절반 이상 끝냈고, 주말에 TIL 마무리하고 과제 어느 정도 진행해 놓으면 괜찮을 거 같음.