본문 바로가기

Program Language/c++35

C++ 중급(동적 메모리 사용하기) C++에서 실행 시간에 필요한 메모리를 할당하고 해제하는 동적 메모리를 다루는 것은 매우 중요한 부분입니다. 동적메모리를 사용하기 위해서는 new와 delete 연산자를 사용합니다. 그러나 이러한 연산자를 잘못 사용하면 메모리 누수(memory leak)나 더블 프리(double free)와 같은 오류가 발생할 수 있습니다. 이를 해결하기 위해 스마트 포인터를 사용하면 동적 메모리 관리를 보다 안전하고 편리하게 할 수 있습니다. 스마트 포인터는 객체의 생명주기를 추적하고, 메모리를 자동으로 해제해 주는 기능을 제공합니다. 이번 글에서는 C++에서 동적 메모리를 다루는 방법과 함께, 이러한 기술들을 사용하여 안전하고 효율적인 메모리 관리를 수행하는 방법에 대해 알아보겠습니다. 동적 메모리 할당과 해제 동적.. 2023. 3. 8.
C++ 기초(코딩 스타일) 사실 코딩 스타일에 대한 기준을 명확히 제시하기는 어렵습니다. 하지만 잘 작성된 코드들을 보면 몇 가지 공통적인 특징들을 볼 수 있습니다. 문서화 코드작성 시 충분한 주석을 달아 문서화하는 것이 중요합니다. 예를 들어 함수가 어떤 역할을 하는 지, 입력 값과 출력값은 무엇인지, 함수를 어떻게 사용해야 하는지 등을 명확하게 기술하는 것이 좋습니다. /** * @brief 두 정수의 합을 계산한다. * * @param a : 첫번째 정수. * @param b : 두번째 정수. * @return 두 정수의 합. */ int sum(int a, int b) { return a + b; } 분할 코드를 기능 단위로 나누어 모듈화하는 것이 좋습니다. 이렇게 하면 코드의 유지보수성이 좋아지고, 코드 중복도 줄일 수 .. 2023. 3. 6.
C++ 기초(std::string_view 클래스) std::string_view 클래스는 C++17부터 도입된 새로운 문자열 타입으로, 문자열 데이터의 읽기 전용 뷰를 제공합니다. 이 클래스는 문자열 데이터를 복사하지 않고, 내부적으로 포인터와 길이 정보만을 저장하여 문자열 데이터를 읽을 수 있는 뷰를 제공합니다. 주요 특징 std::string_view 클래스의 주요 특징은 다음과 같습니다. 읽기 전용 뷰 : 원본 문자열 데이터를 수정할 수 없으며, 읽기 전용 뷰만을 제공합니다. 복사 없음 : 문자열 데이터를 복사하지 않으므로, 문자열 처리 성능을 향상시킵니다. 메모리 안전성 : 문자열 데이터를 복사하지 않으므로, 메모리 안전성을 보장합니다. 호환성 : 다른 문자열 타입과 호환되는 타입으로 변환하여 사용할 수 있습니다. 사용 방법 std::string.. 2023. 3. 3.
C++ 기초(std::string 클래스) C++ 표준 라이브러리에서 제공하는 std::string 클래스는 문자열을 다루는 데 매우 유용한 도구입니다. C 스타일의 문자열을 사용하는 것에 비해 많은 이점이 있습니다. 이번 포스팅에서는 std::string 클래스의 사용법과 그 장점에 대해서 정리했습니다. C 스타일 스트링의 문제점 C 스타일 문자열은 null로 끝나는 문자 배열입니다. 따라서 문자열 길이를 추적하기 위해 null 문자를 삽입해야 합니다. 이는 많은 문제를 발생시킬 수 있습니다. 예를 들어, 문자열 길이를 추적하지 않거나, 문자열 길이를 초과하는 메모리 할당 또는 복사 등의 문제가 발생할 수 있습니다. 또한, C 스타일 문자열은 문자열을 조작하기 위한 여러 함수를 제공하지만, 이러한 함수들은 보안에 취약하며 예외를 처리할 수 없습.. 2023. 3. 2.
C++ 기초(Raw String Literal) 이번 포스팅에서는 조금은 생소하지만 스트링을 사용함에 있어서 편리함을 제공해 주는 로 스트링 리터럴에 대해서 정리했습니다. 인용구 사용 문자열 안에 인용구 같은 또 다른 문자열을 넣고 싶어서 다음과 같이 작성한다면 바로 컴파일 에러가 발생할 것입니다. const char* str = "나폴레옹은 "1퍼센트의 가능성, 그것이 나의 길이다!"라는 명언을 남겼습니다."; 보통 위의 경우 이스케이프 시퀀스 \" 을 사용하여 다음과 같이 표현합니다. const char* str = "나폴레옹은 \"1퍼센트의 가능성, 그것이 나의 길이다!\"라는 명언을 남겼습니다."; 하지만 이스케이프 시퀀스를 사용하지 않고 다음과 같이 표현되는 로 스트링 리터럴을 사용하면 가독성을 높일 수 있습니다. 로 스트링 리터럴은 R"(문.. 2023. 2. 20.
C++ 기초(직원 관리 시스템 - 사용자 인터페이스) 이번 포스팅은 직원 관리 시스템의 마지막 내용으로 사용자 인터페이스 부분에 대해서 정리했습니다. 사용자는 콘솔화면에 나타나는 텍스트 기반 메뉴를 사용하여 직원 데이터를 관리합니다. 인터페이스(Interface) 클래스 정의 화면에 메뉴를 출력하고 사용자가 선택한 동작을 수행하는 함수를 별도의 인터페이스 클래스로 정의했습니다. 아래 예제는 인터페이스 클래스의 정의 부분이며, 멤버 변수는 없고, 오로지 멤버 함수로만 이루어져 있습니다. #pragma once namespace Records { class Database; //전방 선언 class Interface { public: Interface() = default; int displayMenu(); //콘솔화면에 사용자 메뉴를 보여준다. void do.. 2023. 2. 13.