본문 바로가기
프로그래밍

👨‍💻 [C++] C++ 에서 explicit 이란 무엇이며, 어떻게 활용할 수 있나요?

by 밝음의기둥 2025. 1. 21.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

C++ 에서 explicit 이란 무엇이며, 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

C++ 에서 explicit 이란 무엇이며, 어떻게 활용할 수 있나요?

답변 >

explicit 키워드란?

C++에서 explicit 키워드는 생성자나 변환 연산자에 사용되어, 암시적 변환(implicit conversion)을 방지하는 데 사용됩니다. 이 키워드는 코드의 명확성의도성을 높여, 예기치 않은 동작이나 버그를 예방하는 데 유용합니다.


암시적 변환(Implicit Conversion)이란?

C++에서는 매개변수대입 연산에서 타입 변환이 자동으로 이루어질 수 있습니다. 특정 클래스의 생성자가 단일 매개변수를 가질 경우, 컴파일러는 이를 암시적으로 호출하여 객체를 생성할 수 있습니다.

#include <iostream>

class MyClass {
public:
    MyClass(int value) {
        std::cout << "Constructor called with value: " << value << std::endl;
    }
};

int main() {
    MyClass obj = 42; // 암시적 변환
    return 0;
}

위 코드에서 MyClass obj = 42;는 컴파일러가 MyClass(int) 생성자를 암시적으로 호출하여 객체를 생성합니다.


explicit의 역할

explicit 키워드를 사용하면, 이러한 암시적 변환을 방지하고, 명시적 호출만 허용할 수 있습니다.

#include <iostream>

class MyClass {
public:
    explicit MyClass(int value) {
        std::cout << "Constructor called with value: " << value << std::endl;
    }
};

int main() {
    // MyClass obj = 42; // 컴파일 에러: 암시적 변환 불가
    MyClass obj(42);    // 명시적 호출만 허용
    return 0;
}


explicit의 활용 사례

1. 단일 매개변수 생성자

단일 매개변수 생성자는 암시적 변환의 주된 원인이므로, 필요에 따라 explicit을 붙여 암시적 변환을 방지합니다.

class Vector {
public:
    explicit Vector(int size) {
        // size 길이의 벡터 초기화
    }
};

Vector v1(10); // 명시적 호출: OK
// Vector v2 = 10; // 컴파일 에러: 암시적 변환 금지


2. 변환 연산자

클래스의 특정 타입으로 변환을 지원하는 연산자에 explicit을 붙이면, 암시적 변환을 방지할 수 있습니다.

#include <iostream>

class MyClass {
public:
    explicit operator int() const {
        return 42;
    }
};

int main() {
    MyClass obj;
    // int value = obj; // 컴파일 에러: 암시적 변환 금지
    int value = static_cast<int>(obj); // 명시적 변환: OK
    std::cout << "Value: " << value << std::endl;
    return 0;
}


암시적 변환과 명시적 변환 비교

특징  암시적 변환  명시적 변환
호출 방식 자동 호출 static_cast, 명시적 생성자 호출 필요
가독성 코드에서 변환이 명확하지 않을 수 있음 변환의 의도가 명확하게 드러남
explicit 키워드 적용 여부 적용하지 않음 explicit으로 제한 가능
예외 상황 의도하지 않은 변환으로 버그 유발 가능 개발자가 명확히 의도한 경우에만 허용

주의사항

  1. 다중 생성자에서 선택적 사용:
    • 다중 생성자 중 일부는 암시적 변환이 유용할 수 있으므로, 모든 생성자에 explicit을 사용하는 것은 적합하지 않을 수 있습니다.
  2. 라이브러리 코드에서 중요성:
    • 공개 API를 제공하는 라이브러리에서는 explicit을 적절히 사용하여 사용자가 예기치 않은 동작을 경험하지 않도록 해야 합니다.

결론

explicit 키워드는 암시적 변환을 방지하여 코드의 명확성안전성을 높이는 데 유용합니다. 특히 단일 매개변수 생성자나 변환 연산자를 정의할 때, 의도적으로 암시적 변환을 허용하지 않으려면 반드시 explicit을 사용해야 합니다. 이를 통해 의도하지 않은 동작을 방지하고, 코드의 유지보수성을 향상시킬 수 있습니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형