프로그래밍 언어(154)
-
C++ 초급 - 추가 내용 (심화 학습) (2 - 파일 입출력 (fstream))
📌 2. 파일 입출력 (fstream)C++에서는 파일을 읽고 쓰기 위해 fstream 라이브러리를 사용한다.이를 활용하면 텍스트 파일과 바이너리 파일을 다룰 수 있으며, 데이터 저장 및 로깅이 가능하다.📌 2.1 파일 스트림 (std::ifstream, std::ofstream, std::fstream) 기본 사용법C++의 파일 입출력은 세 가지 주요 클래스를 사용한다.파일 스트림클래스 설명std::ifstream파일을 읽기 모드로 염 (ifstream = input file stream)std::ofstream파일을 쓰기 모드로 염 (ofstream = output file stream)std::fstream읽기/쓰기 모두 가능 (fstream = file stream)💡 예제: 파일 스트림 기..
2025.02.22 -
C++ 초급 - 추가 내용 (심화 학습) (1 - 네임스페이스 (namespace))
📌 추가 내용 (심화 학습)심화 학습에서는 C++에서 자주 사용되는 고급 기능을 다룬다.이를 통해 더 효율적이고 모던한 C++ 코드 작성이 가능하다.📌 1. 네임스페이스 (namespace)네임스페이스(namespace)는 이름 충돌을 방지하기 위한 C++의 기능이다.C++에서는 동일한 이름의 변수, 함수, 클래스 등이 여러 곳에서 정의될 수 있는데, 이를 구별하기 위해 각각의 "이름 공간"을 지정하여 관리할 수 있다.📌 1.1 네임스페이스의 개념과 필요성🔹 (1) 네임스페이스가 필요한 이유전역 변수, 함수, 클래스의 이름 충돌을 방지대규모 프로젝트에서 코드 조직을 효율적으로 관리라이브러리나 모듈 간 충돌을 방지하여 유지보수를 쉽게 함💡 예제: 네임스페이스 없이 충돌 발생#include void..
2025.02.22 -
C++ 초급 - 12. 최신 C++ 기능 소개 (5 - C++23: std::expected 기본 개념)
📌 12.5 C++23: std::expected 기본 개념C++23에서는 예외 처리의 새로운 대안으로 std::expected가 도입되었다.이를 활용하면 오류를 예외가 아닌 값으로 반환하는 방식으로 더 안전하고 예측 가능한 오류 처리가 가능하다.📌 1. std::expected를 활용한 예외 처리 대체 방법🔹 (1) 기존 예외 처리 (try-catch)의 문제점C++에서는 일반적으로 예외(try-catch 블록)를 사용하여 오류를 처리하지만, 예외 기반 오류 처리는 다음과 같은 문제점이 존재한다.🔹 문제점오류를 throw 하면, 제어 흐름을 추적하기 어렵다.예외 처리는 성능 오버헤드가 발생할 수 있다.코드의 가독성이 떨어지고, 유지보수가 어려워질 수 있다.💡 예제: 기존 예외 처리 방식 (tr..
2025.02.22 -
C++ 초급 - 12. 최신 C++ 기능 소개 (4 - C++20: concepts와 범위 기반 for 개선)
📌 12.4 C++20: concepts와 범위 기반 for 개선C++20은 모던 C++에서 가장 큰 변화 중 하나로, 템플릿 타입 제약을 위한 concepts, 향상된 범위 기반 for 루프, 코루틴 및 ranges 라이브러리를 제공한다.이를 통해 코드를 더욱 직관적이고 최적화할 수 있으며, 컴파일 타임 안정성이 향상된다.📌 1. 템플릿에서 concepts를 활용한 타입 제약🔹 (1) 기존 템플릿의 문제점C++17까지는 템플릿에서 타입을 제한할 수 없어, 잘못된 타입이 들어와도 컴파일 에러 메시지가 모호했다.💡 예제: 기존 C++17 템플릿 (제약 없음)#include template T add(T a, T b) { return a + b;}int main() { std::cout ?..
2025.02.22 -
C++ 초급 - 12. 최신 C++ 기능 소개 (3 - C++17: 구조적 바인딩과 if constexpr)
📌 12.3 C++17: 구조적 바인딩과 if constexprC++17에서는 코드를 더욱 간결하고 직관적으로 작성할 수 있도록 하는 기능이 추가되었다.대표적으로 "구조적 바인딩(structured bindings)"과 "if constexpr"이 있다.이 기능들은 코드의 가독성을 높이고, 실행 속도를 최적화하는 데 유용하다.📌 1. 구조적 바인딩 (Structured Bindings)을 활용한 변수 분해C++17 이전에는 튜플(tuple)이나 std::pair 같은 복합 데이터를 개별 변수로 분해하려면 std::get 또는 std::tie()를 사용해야 했다.하지만 C++17에서는 "구조적 바인딩"을 도입하여 더 직관적인 방식으로 변수에 값을 분해 가능하다.🔹 (1) 기존 방식 (std::get,..
2025.02.22 -
C++ 초급 - 12. 최신 C++ 기능 소개 (2 - C++14: 개선된 스마트 포인터)
📌 12.2 C++14: 개선된 스마트 포인터C++14에서는 C++11의 부족한 기능을 보완하고, 기존 문법을 개선하여 더 안전하고 직관적인 코드 작성이 가능하다.그중 가장 중요한 개선점 중 하나는 스마트 포인터(std::unique_ptr)의 생성 방식 개선이다.📌 1. std::make_unique를 활용한 안전한 스마트 포인터 생성🔹 (1) 기존 std::unique_ptr 생성 방식 (C++11)C++11에서는 std::unique_ptr을 생성할 때 new를 직접 사용해야 했다.💡 예제: C++11에서 std::unique_ptr 생성#include #include // 스마트 포인터 헤더 포함int main() { std::unique_ptr ptr(new int(42)); ..
2025.02.22