728x90

오블완 20

[C언어] C언어에서 포인터의 장점과 활용 방법

C언어에서 포인터의 장점과 활용 방법C언어에서 **포인터(pointer)**는 데이터를 직접 참조하고 메모리를 효율적으로 관리할 수 있게 해주는 강력한 도구입니다. 포인터는 특히 동적 메모리 할당이나 함수 간 데이터 공유, 복잡한 데이터 구조 구현 등에서 중요한 역할을 합니다.1. 포인터의 장점1.1 메모리 직접 접근포인터를 사용하면 변수의 메모리 주소를 통해 값에 직접 접근할 수 있습니다. 이 기능은 데이터를 유연하게 처리하거나 배열, 구조체와 같은 복잡한 데이터 구조를 다룰 때 매우 유용합니다.1.2 메모리 효율성포인터를 사용하면 데이터 복사를 줄이고 메모리를 효율적으로 사용할 수 있습니다. 함수에 대용량 데이터를 전달할 때 값을 복사하지 않고 포인터로 전달하면 성능이 향상됩니다.1.3 동적 메모리 ..

C언어 2024.11.17

[C언어] Call by Value와 Call by Reference

C언어에서 함수 호출 시 **Call by Value(값에 의한 호출)**와 Call by Reference(참조에 의한 호출) 방식은 중요한 개념입니다. 1. Call by Value (값에 의한 호출)정의Call by Value는 값을 함수에 전달하는 방식입니다. 이때 함수는 전달받은 변수의 복사본을 사용하므로, 함수 내부에서 매개변수를 변경하더라도 원본 변수는 영향을 받지 않습니다.특징함수는 전달받은 값의 복사본을 사용합니다.원본 데이터를 보호할 수 있습니다.값의 복사본이 생성되므로 메모리 사용량이 늘어날 수 있습니다.코드 예제#include void addTen(int number) { number += 10; // 복사된 값이므로 원본 변수와 별개 printf("함수 내에서의 값: %..

C언어 2024.11.16

[C++] 템플릿 매개변수(template parameter)

C++에서 템플릿 매개변수는 함수나 클래스 템플릿 정의에서 사용하는 매개변수입니다. 이를 통해 데이터 타입이나 값 등을 일반화하여 다양한 타입에 대해 재사용 가능한 코드를 작성할 수 있습니다.기본 개념함수 템플릿:함수 템플릿을 사용하면 여러 데이터 타입에 대해 동일한 함수를 정의할 수 있습니다. 아래 예제에서는 두 값을 비교하는 함수를 정의합니다.#include template T max(T a, T b) { return (a > b) ? a : b;}int main() { std::cout  클래스 템플릿:클래스 템플릿을 사용하면 데이터 타입을 일반화하여 다양한 타입의 객체를 생성할 수 있습니다.#include #include template class Box {private: T it..

C++ 2024.11.14

[C++] 숨겨진 친구(hidden friend)

"Hidden friend" 함수는 C++에서 친구(friend) 함수가 이름의 가시성 문제로 인해 호출되지 않는 현상을 설명하는 개념입니다. 이는 C++의 이름 가시성(scope) 규칙에서 비롯된 문제이며, 특정 규칙이나 표준이 아닌, 프로그래밍 중에 발생할 수 있는 문제 유형 중 하나입니다.Hidden Friend의 개념친구 함수:클래스 내부에서 friend 키워드를 사용해 선언된 함수로, 해당 클래스의 private 및 protected 멤버에 접근할 수 있습니다.이름 가시성의 문제:친구 함수와 동일한 이름을 가진 다른 함수가 다른 범위(예: 다른 클래스나 네임스페이스 등)에서 정의되면, 호출 시 이 함수가 우선시 될 수 있습니다. 이로 인해 원래 의도했던 친구 함수가 호출되지 않거나 접근할 수 없..

C++ 2024.11.13

[C++] 친구(friends) 함수

C++에서 친구(friend) 함수는 특정 클래스의 private 또는 protected 멤버에 접근할 수 있는 특별한 외부 함수입니다. 친구 함수는 클래스의 멤버 함수는 아니지만, 클래스 내부의 friend 선언을 통해 클래스의 비공개 멤버에 접근할 권한을 얻습니다.기본 개념친구 함수 선언:클래스 내부에서 friend 키워드를 사용해 친구 함수를 선언합니다. 이렇게 선언된 함수는 클래스의 비공개 멤버에 접근할 수 있습니다.친구 함수 정의:친구 함수는 클래스 외부에서 정의되며, 해당 클래스의 멤버 함수가 아닙니다. 단순히 함수처럼 호출됩니다.예제다음 예제에서는 친구 함수가 클래스의 비공개 멤버에 접근하는 방법을 보여줍니다.#include class MyClass {private: int value;..

C++ 2024.11.12

[C++] noexcept

noexcept는 C++에서 함수가 예외를 발생시키지 않을 것임을 명시하는 데 사용되는 지정자입니다. C++11에서 도입되었으며, 이를 통해 컴파일러는 최적화를 수행할 수 있고, 코드의 안정성을 높일 수 있습니다. noexcept는 특히 안전한 함수 호출과 효율적인 코드 작성에 도움을 줍니다.기본 사용법noexcept는 함수 선언 시 사용하여 해당 함수가 예외를 던지지 않음을 컴파일러에게 알려줍니다. 다음과 같은 형식으로 선언할 수 있습니다.void myFunction() noexcept { // 예외를 발생시키지 않는 코드}noexcept 사용 예제-기본 예제#include void safeFunction() noexcept { std::cout  safeFunction은 noexcept로 ..

C++ 2024.11.11

[C++] 람다 함수의 클로저 타입

람다 함수의 클로저 타입은 람다 함수가 외부 변수를 캡처할 때 생성되는 고유한 타입입니다. 이 타입은 람다 함수 내부에서 사용할 수 있는 변수를 포함하며, 함수 호출 시 캡처된 변수를 사용할 수 있게 합니다.클로저 타입의 특징익명 타입:람다 함수는 고유한 익명 타입을 가지며, 이 타입은 함수가 정의될 때 컴파일러에 의해 생성됩니다. 따라서 클로저 타입은 이름이 없으며 auto 키워드를 사용해 변수에 할당할 수 있습니다.캡처된 변수:람다는 [ ] 안에 명시된 대로 외부 변수(값 또는 참조)를 캡처합니다. 이렇게 캡처된 변수는 람다 함수가 외부 상태를 유지하거나 접근할 수 있도록 해 줍니다.상태 유지:람다 함수는 캡처한 변수를 통해 상태를 유지하며, 캡처된 값은 람다 함수가 여러 번 호출될 때 동일하게 유지..

C++ 2024.11.10

[C++] 람다(lambda) 함수

C++에서 람다(Lambda) 함수는 익명 함수(Anonymous Function) 또는 즉석 함수(Inline Function)를 정의할 수 있는 기능입니다. C++11에서 도입되었으며, 코드를 간결하게 작성하고, 간단한 함수가 필요한 경우 즉석에서 정의할 수 있습니다. 람다는 특히 STL 알고리즘 함수와 함께 사용할 때 유용합니다.기본 구문람다의 기본 구조는 다음과 같습니다.[capture](parameters) -> return_type { // 함수 본체}capture: 외부 변수를 캡처하는 방법을 정의하며, [&] (모든 변수 참조 캡처), [=] (모든 변수 복사 캡처), [x] (특정 변수 복사 캡처)와 같은 방식이 있습니다.parameters: 함수의 매개변수를 정의합니다.return..

C++ 2024.11.09

[C++] maybe_unused

[[maybe_unused]]는 C++17에서 도입된 속성(attribute)으로, 특정 식별자(변수, 함수, 타입 등)가 코드 내에서 사용되지 않을 가능성을 명시합니다. 이 속성을 통해 컴파일러에게 해당 식별자가 사용되지 않더라도 경고를 발생시키지 않도록 하여 코드의 가독성을 높이고, 불필요한 경고로부터 코드를 정리할 수 있습니다. 주로 임시적이거나 조건부 사용을 위해 변수를 유지할 필요가 있을 때 유용합니다.사용법[[maybe_unused]] 속성은 다양한 식별자에 적용할 수 있으며, 다음과 같은 상황에서 활용할 수 있습니다. 변수에 적용디버그 중 사용하거나 특정 조건에서만 필요한 변수가 경고 없이 존재하도록 할 수 있습니다.#include [[maybe_unused]] int unusedVariab..

C++ 2024.11.08

[C++] noreturn함수

C++에서 noreturn 함수는 호출 후에 절대 반환되지 않는 함수로, 예외를 던지거나 프로그램을 종료하는 등의 작업에서 주로 사용됩니다. 이 함수는 [[noreturn]] 속성을 통해 선언되며, 이를 통해 컴파일러와 개발자 모두에게 함수가 반환되지 않는다는 사실을 명확히 전달합니다. 반환되지 않는 함수라는 정보를 컴파일러가 알게 되면 코드의 최적화를 도와주며, 오류 발생 가능성을 줄이는 데 기여합니다.noreturn 함수 정의[[noreturn]] 속성은 함수의 반환 타입 바로 앞에 위치하며, 주로 다음과 같은 형태로 사용됩니다.#include #include [[noreturn]] void terminate_program() { std::cout 주요 특징컴파일러 최적화에 유리noreturn ..

C++ 2024.11.07
728x90