인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

배승혁님의 프로필 이미지
배승혁

작성한 질문수

C개발자를 위한 최소한의 C++

순수 가상 클래스

순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?

해결된 질문

작성

·

21

0

순수 가상 클래스 강의에서 " virtual int getData() const = 0; " 이 코드는 선언만 있다고 말씀하셨습니다.

int a = 0; 이라고 코드를 작성하면 선언 및 정의(초기화)가 된것인데 반해, 함수는 단순히 0을 단순대입했다고 해서 정의가 된것은 아니라는 말씀이신가요? 그렇다면 혹시 " virtual int getData() const; " 만으로 선언이 충분한데 " = 0 " 을하는 이유가 있나요? 단순 초기화 인가요?

또 한가지, 엄밀히 말하면 int a = 0;은 인트 클래스의 인스턴스 a가 선언 및 정의 된거고, 클래스내 함수(메서드)는 인스턴스를 생성하는 건 아니기에 다른건지 궁금합니다.

 

항상 좋은 강의 감사드립니다!

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

C++에서 함수는 0이 될 수 없습니다. 무엇보다 인스턴스 선언 시 사용되는 '='은 할당 연산자로 볼 수 없습니다. 그러므로 문법적인 측면에서 이해하는 것이 좋겠습니다.

서양의 언어는 명사로 부정합니다. 즉, 'Noting이 있다'라고 합니다. 그런 관점에서 '= 0'은 초깃값 기술이 아니라 함수 정의가 없다는 것에 대한 명시적 표현으로 이해 할 수 있겠습니다.

그리고 int형은 형식(Type)은 맞지만 Class가 되지는 않습니다. Instance라는 표현은 개념적 어휘로 여러 목적으로 사용됩니다. 프로그래밍 언어에서는 Instance는 형식에 대한 실체 정도로 생각해볼 수 있습니다.

즉 int a = 0;의 의미는
int 형식에 대한 Instance인 a의 초깃값이 0 이라는 의미가 되겠습니다. 선언과 동시에 값이 정의되는 경우가 되겠습니다.

0에 대해 int 0이라는 의미 외에 포인터 관점에서 null로 구분하기도 합니다. 이는 때로 지나친 자유로 보고 문법적으로 통제해야 할 대상으로 봅니다. 해서 Java에서는 0과 null은 다른 것으로 취급합니다. 값이 같다해서 형식도 일치하는 것으로 볼 수는 없기 때문입니다. 거기에 개념적으로만 보면 void의 의미를 가질 수도 있습니다.

말이 길어졌네요. 개념 정리에 도움이 되기를 바랍니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. 배승혁님!

“C++에서 순수 가상 함수와 일반 변수 선언”에 대해 설명드리겠습니다.

  1. 순수 가상 함수 (virtual function)란?

    • virtual int getData() const = 0;의 코드는 선언만을 의미합니다. 이 함수는 “순수 가상 함수”라고 불리며, 구체적인 구현을 제공하지 않는 대신 해당 클래스가 추상 클래스가 되도록 합니다. 따라서 이 클래스는 직접 인스턴스화(instantiation)되지 않으며, 상속받는 자식 클래스에서 해당 함수를 반드시 구현해야 합니다. = 0은 함수가 순수 가상 함수임을 나타내기 위한 표기입니다.
  2. 변수 선언 및 정의:

    • 반면, int a = 0;a라는 이름의 int 변수를 선언하면서 동시에 초기화(정의)하는 것을 의미합니다. 이는 메모리 공간이 할당되고 0이라는 값으로 초기화되는 것을 나타냅니다.
  3. 차이점에 대한 이해:

    • 순수 가상 함수의 = 0은 함수가 선언만 되어있고, 클래스가 추상 클래스로 동작하게 하는 역할을 합니다.
    • 변수 int a = 0;은 초기화와 정의가 이루어지며, 이는 가상 함수의 선언과는 의미와 목적이 다릅니다.
  4. 인스턴스 관련 질문:

    • int a = 0;는 형식적으로 C++에서도 클래스 인스턴스로 간주될 수 있는 int 형의 변수입니다. 반면, 클래스 내 함수(메서드)는 클래스 인스턴스의 동작을 정의하지만, 그 자체로 별도의 인스턴스를 의미하지는 않습니다.

관련하여 더 깊이 있는 설명이 필요하시다면 추가 질문을 남겨주세요. 기존 답변 중 배승혁님 질문과 유사한 내용의 질문 링크도 참고하시면 더 도움될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

배승혁님의 프로필 이미지
배승혁

작성한 질문수

질문하기