개발자 면접 공부/C-C++

C++ RAII

chogyujin 2022. 8. 11. 21:53
728x90

오늘은 RAII에 대해서 공부하도록 하겠습니다.


RAII란?

RAII는 Resource acquisition is initalization의 약자입니다. 직역을 해보면 "자원 획득을 초기화한다." 입니다.

 

이 RAII는 C++설계 패턴중 하나입니다.

 

설계 패턴인데 무슨 설계이면

동적인 프로그래밍을 위해 new라는 키워드를 사용해 힙 메모리에 할당을 받습니다.(자원 획득)

하지만 이러한 할당받고 관리를 해주는 것은 프로그래머에 일입니다.(java, C#같이 가비지 컬렉터가 있는거 제외)

해당 메모리 공간을 잘활용하면 매우 좋은 효과를 보겠지만 예기지않은 exception을 만나거나

다양한 이유로 할당받은 메모리를 해제하지 못하면 memory leak(메모리 누수)가 발생됩니다.

 

그럼 이런 생각을 할수 있습니다.

 

"그럼 동적 할당을 받지 말고 정적으로 할당을 하면 되지않나?"

이러한 생각은 당연하다고 생각합니다 저도 그렇게 생각을 했으니깐요

하지만 동적 할당의 최고의 이점은 RunTime중에 메모리 공간을 할당하는것이 제일 첫번째 이유입니다.

예를들어 100명의 학생의 이름을 받는 배열이 있으면 그냥 string[100]을 선언하면 그만입니다.

하지만 모든 학교가 100명만 있는 학교는 없습니다. 어디는 몇십명 어디는 몇천명의 학생이 다니는 학교가 있지요
그렇다고 정적배열을 100만개를 만들기에는 메모리에 매우 큰 부담을 줍니다.(지나친 메모리 할당은 안좋음)
그래서 동적 할당을 사용을 합니다.

 

다시 돌아와서 이러한 RAII패턴을 잘 보여주는것이 스마트 포인터입니다.

함수를 끝낼경우{}(중괄호)에서 벗어나면 finally처럼 무조건 실행해줍니다(자원 해제)

이러게 함수 및 중괄호에서 벗어나면 자원 해제를 보장해주는 클래스들의 기능적인 부분들을 통틀어 RAII라고 부릅니다.

 

스마트 포인터는 아래 링크에 자세히 설명해놨습니다. 참고 부탁드립니다.

https://chogyujin-study.tistory.com/27

 

C++ 스마트 포인터(Unique, Shared, Weak)

오늘은 스마트 포인터에 대해 공부해보겠습니다. 스마트 포인터 란? 자바, C# 등은 가비지 컬렉터(Garbage Collector) 라는 기능을 통해 메모리를 관리합니다. 하지만 C++는 사용자가 스스로 메모리를

chogyujin-study.tistory.com

 

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

A* 알고리즘  (0) 2022.08.24
다익스트라 vs BFS  (0) 2022.08.11
업 캐스팅 다운 캐스팅  (0) 2022.08.08
싱글톤 패턴(SingletonPattern)  (0) 2022.08.04
Struct vs Class  (0) 2022.08.03