뇌를 자극하는 C# 5.0 프로그래밍 7장 연습문제 1~5번 답뇌를 자극하는 C# 5.0 프로그래밍 7장 연습문제 1~5번 답

Posted at 2015. 4. 24. 07:23 | Posted in IT(기존 자료 보관용)
반응형

7장에는 연습문제 1~5번이 간단하게 개념을 묻는 문제라 한꺼번에 묵어서 답을 적겠다.


1. 클래스와 객체, 인스턴스는 서로 어떤 점이 다른가요?

현실에 존재하는 것의 속성과 기능이 담겨 있는 것이 클래스(Class)이며 속성은 변수로, 기능은 메소드로 표현된다. 객체(Object)는 세상의 모든 것을 지칭하는 단어이다. 인스턴스는 실제로 데이터를 담을 수 있는 것을 뜻한다.


다시 말해 객체는 클래스로 만들 대상이며 클래스는 객체를 만들기 위한 틀(청사진)이다. 인스턴스는 데이터를 담을 수 있는 객체를 뜻한다. 


Object와 Instance를 번역했을 때 둘 다 객체로 사용하기 때문에 입문자는 이를 잘 구분해서 사용하는 책을 구매해서 읽는 것을 추천한다. 가급적 원서를 구매해서 보는 것이 좋을 것 같다. 보통은 이 둘을 구분하기 위해 Object만 객체라고 적고 Instance는 그대로 인스턴스라고 부른다.


2. 다음 코드에서 오류를 찾고, 오류의 원인을 설명하세요.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace practice7_1
  8. {
  9. class A { }
  10. class B : A { }
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. A a = new A();
  16. B b = new B();
  17. A c = new B();
  18. B d = new A(); // 자식 클래스는 부모 클래스의 객체를 생성할 수 없다.
  19. }
  20. }
  21. }
  22.  

3. this 키워드와 base 키워드에 대해 설명하세요.

this는 자기 자신의 생성자를 가리키며 base는 기반 클래스를 가리킨다.

this는 객체가 자기 자신을 가리키는 키워드이며 base는 부모클래스를 가리키는 키워드이다.


4. 구조체에 대한 다음 설명 중 틀린 것을 모두 찾으세요.

2) 복사할 때 얕은 복사가 이루어진다.

깊은 복사가 일어난다.

3) 참조 형식이다.

값 형식이다.


5. 다형성은 무엇이며 오버라이딩과 무슨 관계가 있는지 설명하세요.

다형성은 같은 종(種)의 생물이면서도 어떤 형태나 형질이 다양하게 나타나는 현상을 뜻하는 것인데 이것은 객체지향프로그래밍의 핵심 개념이다. 이를 구현하기 위해 부모의 메소드를 재정의하는 오버라이딩이 필요하다.

문제에서 말하는 다형성은 자신으로부터 상속받아 만들어진 파생 클래스를 통해 다형성을 실현한다는 의미의 Subtype Polymorphism의 준말이다. 다시 말해 다형성이란 상속받아 만들어진 파생 클래스를 통해 다형(多形)을 이루고자 하는 것이다.


반응형
  1. Lee
    2번 문제가 형변환 관련 문제인줄알고 풀었다가 틀렸네요 ㅋㅋ 형변환 꽤 어렵네요;; 무튼 덕분에 많이 배워갑니다
  2. Lee
    Base baseOrDerived = new Derived();

    저근데 위의 코드가 정확히 어떤일을 하는건지 (어떤 의미인지) 좀 여쭤볼수있을까요? 다른건 이해가 가는데 이건 모르겠네요
    (Derived 클래스는 Base 클래스를 상속 받습니다.)
    • 2015.12.03 01:07 신고 [Edit/Del]
      사실 저도 정확하게 이해하고 있는지는 항상 의문입니다만 제가 아는 범위에서 말씀을 드리자면 말씀하신 코드에서 Base baseOrDerived; 만 하는 경우에 baseOrDerived는 객체참조를 위하여 스택메모리에 4바이트의 크기로 할당받는 참조변수일 뿐입니다. baseOrDerived 안에 있는 4바이트 데이터는 객체가 존재하는 메모리의 위치(참조) 값이라는 것이죠.
      그렇기에 new 연산자에 의해 객체생성에 필요한 만큼 메모리를 할당 하고 생성자(Derived())로 메모리에 있는 객체를 초기화 하는 코드가 필요한 것입니다.
      C#에서는(대부분의 프로그래밍언어도 마찬가지) 이렇게 하기로 약속했기 때문에 이렇게 사용하는 것입니다. 클래스변수를 선언만 해도 객체가 생성되도록 약속했으면 Base baseOrDerived; 만 해도 됬겠죠.

      http://stbiho.daegu.ac.kr/~minmild/java1/6.htm와 http://hgh73.egloos.com/v/1209237, http://luyin.tistory.com/298 를 참조하면 좋을 것 같습니다.

      P.S. 저도 과거에 비슷한 질문을 한 적이 있습니다. 저는 하필 왜 저렇게 쓰는 지 더 편하게 쓸 방법이 없는지에 대해서 의문을 가졌었죠. 일단은 이렇게 외우고 나중에 다시 생각해보자는 식으로 넘어갔었는데 현재까지도 아주 얕은 수준의 개발만 했지만서도 느끼는 점이 많이 있습니다. 'C#이라는 언어가 상상도 못할만큼 견고하게 만들어져 있구나'라는 것이죠.

    • Lee
      2015.12.05 00:25 [Edit/Del]
      다른건 다 이해되는데 클래스 부분은 정말 명쾌히 이해가 가지 않더라고요. 그래도 되도록 이해하고 넘어가는게 좋다해서 구글링으로 배우는 중 입니다 ㅋㅋ
    • 2015.12.05 00:28 신고 [Edit/Del]
      사용 가능한 자원이 한정적인 장비에서 사용할 프로그램을 만들 때 이런 사고를 했던 경험이 큰 도움이 되기 때문에 제 개인적으론 이런 질문 굉장히 좋아합니다.
    • Lee
      2015.12.05 00:34 [Edit/Del]
      근데 Base baseOrDerived = new Derived(); 와
      Base baseOrDerived = new Base();는
      어떻게 다른거죠?
      단순히 메모리를 할당하는 곳이 다른건가요?
      (상속등의 조건은 위와 같습니다)
    • 2015.12.05 00:37 신고 [Edit/Del]
      생성되는 객체가 달라지는 것이 차이가 납니다.
      Base baseOrDerived = new Derived(); 는 Derived 형태로
      Base baseOrDerived = new Base(); 는 Base 형태로 됩니다.

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기