# RAII
[C++] 소멸자 (자원 해제)
C++에서 소멸자(자원 해제)를 사용할 때 주의할 점이 있다. 소멸자는 객체가 파괴될 때 호출되므로 메모리 관리에 중요한 역할을 함. 1. 소멸자 개념: 소멸자는 동적으로 할당된 메모리를 해제하며, 해제하지 않을 경우 메모리 누수가 생길 수 있다. 2. RAII 다른 외부 자원을 보유하고 있는 경우에도 소멸자를 사용하여 할당 받은 자원을 명시적으로 해제해야 한다. * RAII (Resource Acquisition Is Initialization)*을 사용하면, 객체 생성과 소멸 관리하는 데 편할 수 있다. 3. 가상 소멸자(상속) 객체의 다형성에서 부모 클래스의 포인터가 자식 클래스일때, 소멸자를 호출하면 자식의 소멸자도 불러주기 위해 virtual을 써야 된다. 따라서, 기본 클래스의 소멸자가 가상 소멸자인 경우 파생 클래스에서 해당 가상 소멸자를 오버라이드가 필요하다. 5. 소멸자 호출 순서:

[Design Pattern] RAII(Resource Acquisition Is Initialization)
RAII C++ 개발자로 지낸지 3년이 넘어갈 즈음에 알게된 패턴이네요반성합네다.... RAII는 자원의 안전한 사용을 위해 객체가 쓰이는 스코프를 벗어나면 자원을 해제해주는 기법이에요. C++ 고유의 디자인 패턴이라고 하는데 그 이유는 초기화된 인스턴스가 스코프를 벗어나면 소멸자를 호출시켜 자원을 해제하는 C++에서만 구사할 수 있는 방식이에요. C++11에서 사용할 수 있는 스마트 포인터와 함께 자주 언급이 되요. 리소스 획득 변수에 접근 가능한 시점에 변수 사용이 가능하다는 점을 컴파일 단계에서 정할 수 있어요. 아래 코드를 보며 이해해봐요. 근데 위 코드는 문제가 많아요. 본격적으로 작성해봐요. 근데 여기서 init 가 실패한 경우엔 dispose를 해야할까요? 아니면 init이 안됬으니까 굳이 dispose를 호출할 필요도 없을까요? RAII는 단순히 생성자와 파괴자를 호출하는 문법이 아니라, 이에 대한 해답을 제공
[CPP-01] 파일 입출력 및 문자열 치환하기
**[CPP-Module01 / ex07: Sed is for losers 과제] ** FILENAME, 비어있지 않은 두개의 문자열 s1과 s2을 인자로 받는 replace 프로그램을 만들어라. 이 프로그램은 주어진 파일을 오픈한 뒤 파일 내에 있는 문자열 s1을 s2로 변경한 FILENAME.replace 을 만든다. 테스트 파일을 함께 제출해야한다. 1. fstream : 파일입출력 스트림 `을 사용하는 표준입출력과 마찬가지로 CPP의 파일입출력에는 ifstream, ofstream, fstream` 세 가지 클래스가 사용된다. 각각 입력, 출력, 입출력을 위한 객체들이 정의되어 있으며, 표준입출력처럼 연산자 오버로딩을 통해 간단하게 사용할 수 있다. C처럼 함수이름을 외울필요가 없는 것이 장점이다. 과제에서는 인자로 주어진 파일을 읽은 뒤 내용을 변경한 새 파일을 만들어야하므로 `include

영감을 주는 코딩 패턴들 - RAII
많은 개발자들은 디자인 패턴에 대해 공부합니다. 그리고 몇몇은 개발에 대해 얼마나 공부했냐를 가늠하는 척도로 면접 질문에 자주 등장하죠. 적어도 제가 경험한 바는, 잘 알려진 디자인 패턴들은 코드를 쓸데없이 복잡하게 만듭니다. 3~4줄이면 작성할 수 있는 코드를 10줄에 걸쳐 작성하는 느낌입니다. 대부분의 디자인 패턴은 오래전, 그러니까 Java와 C++이 주력으로 쓰이던 시절에 나온 개념들입니다. 그리고 그 둘의 특징은 정말로 3~4줄짜리 코드를 10줄에 걸쳐서 작성해야 합니다. 단순히 모던 프로그래밍 언어가 축약된 함수를 가지고 있고, 많은 작업을 줄일 수 있어서가 아닙니다. 위 두 언어는 실제로 복잡한 OOP구조와 패러다임을 가지고 있고 그 위에서 돌아가는 프레임워크들은 더 복잡한 구조와 더 많은 베이스 코드를 작성하도록 유도합니다. 그뿐만 아니라 프로그래밍 언어의 패러다임또한 많은 시간에 걸쳐 진화했습니다. 이것에 대한 가장 좋은 예시는 React의 함수형 컴포
RAII(Resource Acquisition is Initialization) 디자인 패턴
GC(Garbage Collector)를 제공하는 다른 많은 언어와 달리 C++은 프로그래머가 직접 resource를 관리 해주어야 한다. 따라서 메모리 누수(memory leak)의 위험이 곳곳에 도사리고 있다. 실수로 메모리 해제 코드를 작성하지 않을 수도 있고, 작성했다고 하더라도 exception 발생으로 코드가 끝까지 실행되지 않아 메모리 해제에 실패할 수도 있다. 메모리 누수로 인해 메모리 사용량이 계속 증가하다보면 메모리 부족으로 프로그램이 crash 될 수 있다. 이를 방지하고자 C++ 창시자인 Bjarne Stroustrup는 RAII(Resource Acquisition is Initialization) 디자인 패턴을 제안했다. RAII란 객체의 생성과 동시에 자원을 할당하고 객체가 파괴될 때 자원을 해제하는 방법이다. 예외가 발생해서 예상치 못하게 함수를 빠져 나가더라도 함수 stack 내에서 선언된 모든 객