반응형
Untitled Document.md

뇌를 자극하는 C# 5.0 프로그래밍 Chapter7 연습문제


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

객체는 이 세상에 존재하는 사물이나 개념을 지칭합니다. 예를들면, 키보드, 사과, 스피커, 사람, 붕어빵 모든 것이 객체입니다. 클래스는 비유하자면 붕어빵을 만드는 틀입니다. 붕어빵은 객체입니다. 클래스는 객체를 만들 수 있는 틀을 갖추고 있지만, 실체화된 객체는 아닙니다. 이 붕어빵 틀(클래스)을 이용하여 붕어빵이라는 객체(실체)를 만들어 내는 것을 인스턴스화(실체화)라고 합니다. 따라서 클래스를 이용하여 만들어진 객체를 인스턴스라고 합니다.



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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
 
namespace Structure
{
   class A
    {
    }
 
    class B : A
    {
 
    }
 
    class C
    {
        static void Main(string[] args)
        {
            A a = new A();
            B b = new B();
            A c = new B();
            B d = new A();
        }
    }
}
 
 
cs

B d = new A();에서 오류가 발생한다. 왜냐하면 파생 클래스를 생성하는데, 기반 클래스의 생성자만을 호출하기 때문이다. 파생클래스 생성과정에서 내부적으로 기반 클래스의 생성자를 호출하고, 파생 클래스 생성자를 호출하여 객체를 생성한다. 그러나 위 코드에서는 파생 클래스의 생성자를 호출하지 않고, 기반 클래스의 생성자만 호출하기 때문에 오류가 발생한다.



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

this 키워드는 객체 내부에서 자신의 필드나 메소드에 접근할 때 사용하는 키워드이다. 사용하는 이유는 클래스 필드와 클래스 내의 메소드 매개변수의 이름이 같을 때, 클래스 필드에 this 키워드를 붙여서 서로 구별하기 위해서이다. 아래코드는 사용예시이다.

1
2
3
4
5
6
7
8
9
10
class Employee
    {
        private string Name;
 
        public void SetName(string Name)
        {
            this.Name = Name; //this.Name은 필드의 Name. 우측의 Name은 매개변수 Name
        }
    }
 
cs


base키워드는 상속받은 파생 클래스에서 기반 클래스로 접근할 때 사용하는 키워드이다. 아래코드는 사용예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Base
    {
        public void BaseMethod()
        {
 
        }
    }
 
    class Derived : Base
    {
        public void DerivedMethod()
        {
            base.BaseMethod(); //base 키워드를 통해 기반 클래스에 접근
        }
    }
cs



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

  1. struct 키워드를 이용하여 선언한다.
  2. 복사할 때 얕은 복사가 이루어진다.
  3. 참조 형식이다.
  4. 메소드를 가질 수 있다.

2,3이 틀렸다. 구조체는 얕은 복사(Shallow Copy)를 하는 클래스와 다르게 깊은 복사(Deep Copy)를 한다. 그리고 형식은 값 형식을 가진다.



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

다형성을 한 문장으로 표현하면, "같은 모양의 다른 행동, 다른 모양의 같은 행동"이라고 정의할 수 있다. C#에서 좀 더 설명하자면, 상속받은 클래스의 메소드와 같은 이름의 파생 클래스의 메소드인데, 다른 행동을 하는 메소드이다.

C#에서 다형성을 구현하려면, 오버라이딩을 해야한다. 즉, 기반 클래스에서 상속 받은 파생 클래스에서 다형성을 실현하기 위하여 메소드를 재정의(오버라이딩) 해야한다. 따라서 오버라이딩은 다형성을 구현하는데 필요한 행위라고 말할 수 있다.

반응형

+ Recent posts