none
인스턴스 생성 질문이요 RRS feed

  • 질문

  • 얼마전에 C# 공부 시작한뉴비입니다.

    한가지 궁금한게 있어서 그러는데요, 

    만약 Derived 라는 클래스가 Base 라는클래스를 상속받았다라고 할때,

    Base baseOrDerived = new Derived();

    이렇게 코딩을 하면 

    Base 혹은 Derived 중 어느 클래스에 baseOrDerived 인스턴스가 생성되나요?



    • 편집됨 KeepGoin 2015년 11월 30일 월요일 오후 2:43
    2015년 11월 30일 월요일 오후 2:42

답변

  • '간략하게'의 범위가 애매하군요. 이미 위에서 간략하게 설명했는데... ^^

    일단 사람이 보는 관점이 아닌 컴파일러가 보는 관점을 설명하는 것이 좋겠군요. 컴파일러는 Derived와 Base 클래스가 몇 바이트의 크기인지 알고 있습니다. new Derived하면 해당 클래스가 가진 멤버의 크기를 고려해서 그 만큼의 메모리를 할당하는 기계어를 생성해 줍니다. 그리고 그 위치를 baseOrDerived 변수가 가리키게 되는 것입니다. 또한 해당 변수의 타입이 Base이기 때문에 컴파일러는 그 변수로 접근할 수 있는 멤버들의 위치를 계산해서 접근하는 기계어 코드도 생성해줍니다. 그래도 괜찮은 이유는, Derived의 메모리 크기는 언제나 Base 크기를 포함하고 있기 때문입니다.

    • 답변으로 표시됨 KeepGoin 2015년 12월 3일 목요일 오전 7:08
    2015년 12월 3일 목요일 오전 12:31

모든 응답

  • "Base 혹은 Derived 중 어느 클래스에baseOrDerived 인스턴스가 생성되나요?"라는 질문이 좀 이상하군요. 나중에 공부를 하시다 보면 왜 그 질문이 이상했는지 아시게 될 것이므로 그에 대해서는 일단 넘어가고, ^^

    당연히 Derived 클래스가 소유한 데이터크기만큼 CLR Heap에 메모리가 할당되는데요. 단지 그에 대한 코드 내 변수의 타입이 Base 클래스인 것입니다. 그렇게 해도 괜찮은 이유는, Base가 소유한 모든 멤버를 Derived가 가지고 있기 때문입니다.

      
    2015년 12월 1일 화요일 오전 12:23
  • Base baseOrDerived = new Derived();

    그럼 이렇게 코드를 입력했을때 어떤일이 발생하고

    어떻게 그렇게 되는건지 간략하게 설명 해주실 수 있나요?

    2015년 12월 2일 수요일 오후 1:27
  • '간략하게'의 범위가 애매하군요. 이미 위에서 간략하게 설명했는데... ^^

    일단 사람이 보는 관점이 아닌 컴파일러가 보는 관점을 설명하는 것이 좋겠군요. 컴파일러는 Derived와 Base 클래스가 몇 바이트의 크기인지 알고 있습니다. new Derived하면 해당 클래스가 가진 멤버의 크기를 고려해서 그 만큼의 메모리를 할당하는 기계어를 생성해 줍니다. 그리고 그 위치를 baseOrDerived 변수가 가리키게 되는 것입니다. 또한 해당 변수의 타입이 Base이기 때문에 컴파일러는 그 변수로 접근할 수 있는 멤버들의 위치를 계산해서 접근하는 기계어 코드도 생성해줍니다. 그래도 괜찮은 이유는, Derived의 메모리 크기는 언제나 Base 크기를 포함하고 있기 때문입니다.

    • 답변으로 표시됨 KeepGoin 2015년 12월 3일 목요일 오전 7:08
    2015년 12월 3일 목요일 오전 12:31