본문 바로가기
반응형

언어/C, C++15

[c++] explicit 키워드 explicit 키워드 정리1. explicit 키워드는 C++에서 암시적(implicit) 형변환을 막기 위한 키워드2. 주로 생성자(constructor)나 변환 생성자(converting constructor)에 사용되어, 의도하지 않은 자동 형 변환을 방지함✅ 기본 문법class MyClass {public: explicit MyClass(int value); // explicit 생성자};✅ 왜 쓰는가? (자동 형변환 방지)예시 1: 암시적 변환이 허용되는 경우 (explicit 없음)class MyClass {public: MyClass(int value) {} // 암시적 변환 허용};void doSomething(MyClass obj) {}doSomething(10); // int.. 2025. 6. 13.
Interface vs concept Interface와 concept 비교C++의 interface(추상 클래스 기반)와 concept(C++20부터 도입된 템플릿 제약 방식)은 둘 다 다형성과 제약 조건 구현에 사용되지만, 목적, 사용 시점, 처리 방식이 완전히 다름✅ 기본 개념 비교항목interface (추상 클래스)concept (C++20)정의 방식순수 가상 함수(pure virtual function)를 가진 클래스template 타입에 대한 조건을 정의하는 선언식 구문사용 목적런타임 다형성 (Virtual Dispatch)컴파일타임 제약 (Type Constraints)다형성OOP 기반 다형성 (virtual 함수 호출)정적 다형성 (template 기반, 컴파일 시 결정)상속 필요 여부상속을 통해 구현 클래스가 interfac.. 2025. 6. 4.
[c++] concept conceptconcept은 템플릿 타입이 만족해야 하는 조건의 집합기존에는 SFINAE나 enable_if로 구현하던 제약 조건을 더 간결하고 선언적으로 작성 가능✅ 필요성템플릿에서 에러 메시지는 복잡하고 난해 예전 방식templatevoid print(T t) { std::cout C++20에서 concept 사용templateconcept HasSize = requires(T t) { { t.size() } -> std::convertible_to;};templatevoid print(T t) { std::cout → T가 size()를 제공하지 않으면, 친절한 컴파일 오류 메시지 발생✅ 기본 문법1. requires 표현식 기반 정의templateconcept Incrementab.. 2025. 6. 3.
메모리 누수 ✅ 메모리 누수할당한 메모리(힙 메모리)를 해제하지 않아서 다시 사용할 수 없는 상태로 남아 있는 것💥 결과프로그램 종료 전까지 RAM 점유반복되면 메모리 부족, 시스템 느려짐, 크래시 발생✅ 어떤 경우에 발생하나?1. delete를 호출하지 않은 경우void createLeak() { int* ptr = new int(10); // delete ptr; ❌ 안 했음}ptr은 지역 변수로 함수 종료 시 사라지지만, new로 할당된 메모리는 남음2. 포인터가 덮어써질 때int* ptr = new int(5);ptr = new int(10); // 이전에 할당한 5는 참조할 방법이 없어짐 ❌ 메모리 누수3. 예외가 발생했는데 해제를 못했을 때void risky() { int* ptr = n.. 2025. 6. 2.
[C++] 인터페이스(Interface) 정리 인터페이스(Interface)C++의 인터페이스(Interface) 는 명확하게 문법적으로 존재하는 개념은 아니지만, 순수 가상 함수(pure virtual function) 를 사용"추상 클래스(Abstract Class)" 형태로 구현되고 이는 C++에서 객체지향 프로그래밍(OOP)을 구성하는 다형성(polymorphism) 의 핵심 요소 중 하나✅ 1. 인터페이스란?인터페이스(Interface) 는 기능의 "약속"만 정의하고 구현은 하지 않는 추상적인 형태의 클래스이것은 C++에서 다른 클래스들이 따라야 할 공통의 함수 규격(시그니처) 을 정의하고, 실제 로직은 상속받는 클래스에서 구현하게 함✅ 2. 인터페이스 구현 방법 (순수 가상 함수)C++에서는 인터페이스를 다음과 같이 순수 가상 함수만 가진.. 2025. 5. 31.
DI(Dependency Injection), DIP(Dependency Inversion Principle) C++에서의 DI(Dependency Injection)와 DIP(Dependency Inversion Principle)✅ DIP(의존성 역전 원칙, Dependency Inversion Principle)📌 정의상위 모듈(정책 결정)은 하위 모듈(세부 사항)에 의존하면 안 되며, 둘 다 추상(인터페이스)에 의존해야 한다.🎯 목적구체적인 구현이 아니라 추상화된 인터페이스에 의존하여 유연한 구조 유지코드 결합도 감소 → 변경에 강한 코드📎 C++ 예시// 상위 모듈은 추상 인터페이스에 의존class ICommunication {public: virtual void send(const std::string& msg) = 0; virtual ~ICommunication() = default;};//.. 2025. 5. 22.
c, c++ 임베디드 설계 비교 C (.c) vs C++ (.cpp) 기반 임베디드 설계 비교 정리요약항목C 기반 설계 (.c)C++ 기반 설계 (.cpp)주요 개념구조체 + 함수 분리클래스 (캡슐화, 상속, 다형성 등)상태/동작struct로 상태, function()으로 동작클래스 멤버 변수 + 멤버 함수로 통합모듈화파일 단위 (.c/.h) 모듈화객체 단위 (클래스) 모듈화의존성extern 또는 handle 방식참조(&) 또는 포인터 기반 의존성 주입싱글톤 처리전역변수 또는 getInstance() 직접 구현정적 멤버 or 싱글톤 패턴상속/다형성직접 구현 어렵고 불편명시적 지원 (virtual 등)코드 재사용성낮음 (구조체 확장 어려움)높음 (클래스 재사용 용이)초기화/생성자별도 init_XXX() 함수 필요생성자 자동 호출 가능컨텍.. 2025. 5. 21.
[c++] 로봇 시스템 상태 관리 및 로직 설계 c++에서 로봇 시스템 상태 관리 및 로직 설계 정리1. 시스템 구조의 계층화로봇을 소프트웨어로 제어할 때는 다음과 같이 3계층 구조로 나누는 것이 일반적Layer 1: 하드웨어 제어 (컨트롤러)MotorController, LedController, BuzzerControllerHAL 드라이버 기반으로 GPIO, PWM, UART 등을 직접 제어Layer 2: 역할 단위 매니저InputManager: 센서, 리모컨, 버튼 등 입력 수집OutputManager: 모터, LED, 부저 등 출력 실행LogicController: 입력에 따라 로직을 처리하고 행동을 결정Layer 3: 통합 객체 (예: Robot)Robot은 InputManager, OutputManager, LogicController를 통.. 2025. 5. 20.
[c++] 싱글톤 패턴 정리 C++ Singleton Pattern 정리🔷 개념Singleton은 애플리케이션 전체에서 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴입니다.✅ 핵심 특징항목설명인스턴스 유일성정적 멤버로 하나의 인스턴스를 내부에 보관접근 제어정적 getInstance() 함수로만 인스턴스 접근 가능생성자 제한생성자는 private 또는 protected로 막음복사/이동 금지복사 생성자, 대입 연산자 삭제로 복제 차단🛠️ 기본 구현 예제🔹 Singleton.hpp#pragma onceclass Singleton {public: static Singleton& getInstance(); // 전역 인스턴스 접근 void doSomething(); // 예시 함수private: Singleton(); .. 2025. 5. 19.
[C++] #define, constexpr, PROGEM 비교 #define vs constexpr vs PROGEM#define, constexpr, 그리고 PROGMEM은 C++ 및 임베디드 프로그래밍에서 상수를 정의하고 메모리를 관리하는 데 사용되는 방법이다.이들은 각각 상수 정의, 컴파일 타임 평가, 메모리 최적화 측면에서 차이점이 있다.임베디드 환경에서의 어떤 상황에서 가장 적합한지 정리한다.비교 요약(표)특징#defineconstexprPROGEM타입 안전성낮음높음보통컴파일 타임컴파틸 타임 치환컴파일 타임 평가컴파일 타임 설정메모리 사용텍스트 치환 (작음)플래시/레지스터 (작음) 플래시 메모리 (RAM 절약)스코프관리없음 (전역적)있음 (지역적 가능)전역적읽기 속도빠름빠름느림 (플래시 읽기 필요)코드 복잡성낮음보통높음제한된 임베디드 환경에서의 추천1. 작.. 2024. 10. 27.
반응형