프로그래밍/C++ 9

10. 식별자와 네임스페이스

C++는 네임스페이스와 스코프라는 개념을 통해 식별자의 유효 범위와 검색 순서를 정의합니다. 식별자란 변수, 함수, 클래스 등 코드에서 사용되는 이름을 의미하며, 이를 검색하는 순서는 코드의 구조와 작성된 위치에 따라 달라집니다. 1. 네임스페이스와 스코프란?네임스페이스 (Namespace)네임스페이스는 식별자를 묶음으로 그룹화하는 문법입니다.네임스페이스를 통해 이름 충돌을 방지하며, 특정 코드 블록 안에 속한 식별자를 구분할 수 있습니다.namespace MyNamespace { int value = 10;}int main() { int value = 20; std::cout  스코프 (Scope)스코프는 식별자가 유효한 범위를 의미합니다.C++에서 식별자의 스코프는 코드 구조(블록, ..

프로그래밍/C++ 2025.01.07

9. 네임스페이스

1. 네임스페이스란?**C++의 네임스페이스(namespace)**는 변수, 함수, 클래스 등 다양한 요소를 범주별로 묶기 위한 문법적 도구입니다.네임스페이스를 사용하면 코드를 모듈화하고, 이름 충돌 문제를 방지하며, 협업 중 발생할 수 있는 혼란을 줄일 수 있습니다.2. 네임스페이스가 필요한 이유이름 충돌 방지:협업 프로젝트에서는 동일한 이름의 변수나 함수가 서로 다른 개발자에 의해 정의될 가능성이 큼.네임스페이스는 각 요소를 소속된 범주로 분리해 충돌을 방지함.예:namespace TeamA { void Print() { std::cout  코드 가독성과 관리 용이성:네임스페이스를 사용하면 코드의 소속감을 명확히 하고, 큰 프로젝트를 효율적으로 관리할 수 있음.C++의 글로벌 네임스페이스:네임스..

프로그래밍/C++ 2025.01.03

8. 함수 템플릿

. 함수 오버로딩의 한계오버로딩의 문제점:함수 오버로딩은 매개변수 타입이나 개수가 다를 때 유연하게 함수를 사용할 수 있는 방법이지만, 모든 타입과 경우에 대해 함수 정의를 작성해야 하는 부담이 있음.예를 들어, 두 값을 더하는 함수 Add를 다양한 타입(int, double, float, string)에 대해 사용하려면 모든 타입을 커버하는 오버로딩을 작성해야 함 타입이 많아질수록 함수 정의가 비효율적이고 코드가 복잡해짐.int Add(int a, int b) { return a + b; }double Add(double a, double b) { return a + b; }float Add(float a, float b) { return a + b; } 오버로딩의 문제점 2. 함수 템플릿(Functi..

프로그래밍/C++ 2025.01.03

6. 디폴트 매개변수(파라미터)

1. C++ 함수의 주요 특징C와의 기본 구조 차이:함수의 기본 구조는 C와 유사하지만, C++은 더 강력하고 유연한 기능을 제공합니다.특히 디폴트 파라미터와 같은 기능은 함수 호출을 단순화하고 코드 유지보수를 용이하게 만듭니다.2. 디폴트 파라미터(Default Parameter)개념:함수의 매개변수에 기본값을 지정할 수 있는 기능.함수 호출 시 일부 또는 전부의 인수를 생략해도 기본값이 적용되므로 호출이 간결해지고 호출자(caller)가 더 편리하게 사용할 수 있습니다.문법 및 예제#include // 디폴트 파라미터 지정void PrintMessage(std::string message = "Hello, World!", int repeat = 1) { for (int i = 0; i Hello..

프로그래밍/C++ 2025.01.02

5.범위기반 for문

1. 기존 C 스타일 배열 반복의 문제점C 스타일 배열에서는 반복문을 사용할 때, 배열의 크기를 따로 관리하거나 지정해야 했습니다.아래 예시는 배열의 요소를 모두 출력하는 C 스타일 반복문입니다:  문제점:배열의 크기를 명시적으로 계산해야 하므로 코드가 복잡해짐.반복 횟수를 잘못 계산하거나 초과 접근하는 경우 버그가 발생할 위험이 있음.int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]); // 배열 크기를 직접 계산for (int i = 0; i 2. C++ 범위 기반 for문C++11부터 도입된 범위 기반 for문은 배열이나 컨테이너의 요소를 자동으로 순회할 수 있는 간단하고 직관적인 방법을 제공합니다.기본 문법for (요소_타입 ..

프로그래밍/C++ 2025.01.02

4.cpp 참조형

1. C++에서의 참조(Reference)란?C에는 참조가 없다?C에서 매개변수를 포인터로 받아 사용하는 방식(call by pointer)을 ‘참조’로 부르긴 하지만, 엄밀히는 포인터에 대한 ‘값(value)’을 전달하는 것이므로 call by value입니다.C++에서는 이러한 개념을 포인터와 구분해, ‘참조(reference)’라는 문법을 명확히 제공합니다.참조는 별칭(Alias)참조를 간단히 말하면, 어떤 실제 인스턴스(변수)에 붙이는 별명입니다.예) int a = 10; int& rdata = a; // rdata는 a에 대한 참조 (별명)rdata를 통해 a에 접근 가능하며, rdata에 값을 대입하면 결국 a의 값이 변합니다.2. 참조 vs. 포인터구분포인터참조선언 방식int* p = &a;..

프로그래밍/C++ 2025.01.02

3.C++의 메모리 동적할당

1. 전통적인 관점에서의 변수와 메모리C에서의 변수:보통 지역 변수는 스택(Stack) 영역에 저장되며, 함수가 종료되면 자동으로 해제됨.동적 할당을 사용하기 위해서는 malloc(size)와 같은 함수를 사용해 “직접” 메모리를 할당하고, 사용이 끝나면 free()로 해제해야 함.메모리를 할당할 때, 필요한 ‘크기(size)’를 직접 기입해야 함.C++에서의 ‘인스턴스’:C++에서는 “변수”라는 표현 대신 주로 “인스턴스”라는 표현을 사용.어떤 자료형(타입)에 대해 인스턴스를 생성하면, 이미 그 자료형에 필요한 메모리 크기가 정해져 있음.즉, C처럼 “크기”를 직접 기술할 필요 없이, new 연산자를 통해 동적 할당할 수 있음2. c++의 new 연산자와 메모리 동적할당 C++에서 동적 할당은 new와..

프로그래밍/C++ 2025.01.02

2. cpp의 변수, 그리고 auto

1. cpp에서 다양한 초기화 방법 cpp에서는 변수를 초기화 할 때 다양한 문법을 사용한다. 1. 복사 초기화    int a = 10;2.직접 초기화    int b(10);3.중괄호 초기화     int x{10}; 여기서 소괄호를 사용한 문법은 직접 초기화라고 부르며, 의미적으로는 복사 초기화와 큰 차이는 없지만, 사용자 정의 타입등에서는 생성자 호출 방식을 구분할 수 있다는 차이가 있다.  2. auto ?이전 auto는 자동저장 클래스를 의미했지만, 스택변수 형식으로 동작했다.하지만 cpp11이상부터는 auto키워드가 초깃값의 타입을 자동으로 추론하는 역할로 바뀌었음 int a = 10; auto c = a;  // c의 타입은 int로 추론 이때 auto c(a)와 동일한 의미 즉 c는 a와..

프로그래밍/C++ 2025.01.01

1.cpp에서의 <<와 std::cout의 의미

Hello world! 언어 공부를 시작할때 가장 많이 보이는 예제이다.하지만 cpp은 여기서또 살펴보아야 할 점이 있다.  1.c에서 하지만 cpp에서는 정확히 위 구문에서의 operator가 되는 것이다.즉 객체에 데이터를 삽입하는 함수가 호출된다. 라는 뜻의 형식으로 위의 구문에서는 사용된다. 2.std::cout은 무엇인가?std::cout은 c++ 표준 라이브러리인 에 정의되어 있는 전역 변수(정확히는 std::ostream)객체이다여기서 함수가 아닌, 객체라는 사실이 중요하다.  즉 위의 구문은 표준 출력 스트림에 데이터를 삽입하는 방식으로 출력이 이루어진다~라고 이해하자. 3.더 자세히 알아보기여기서 std::cout은  extern std::ostream cout; 으로 표준 라이브러리에 ..

프로그래밍/C++ 2025.01.01