뇌를 자극하는 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. 구조체에 대한 다음 설명 중 틀린 것을 모두 찾으세요.
- struct 키워드를 이용하여 선언한다.
- 복사할 때 얕은 복사가 이루어진다.
- 참조 형식이다.
- 메소드를 가질 수 있다.
2,3이 틀렸다. 구조체는 얕은 복사(Shallow Copy)를 하는 클래스와 다르게 깊은 복사(Deep Copy)를 한다. 그리고 형식은 값 형식을 가진다.
5. 다형성은 무엇이며, 오버라이딩과 무슨 관계가 있는지 설명하세요.
다형성을 한 문장으로 표현하면, "같은 모양의 다른 행동, 다른 모양의 같은 행동"이라고 정의할 수 있다. C#에서 좀 더 설명하자면, 상속받은 클래스의 메소드와 같은 이름의 파생 클래스의 메소드인데, 다른 행동을 하는 메소드이다.
C#에서 다형성을 구현하려면, 오버라이딩을 해야한다. 즉, 기반 클래스에서 상속 받은 파생 클래스에서 다형성을 실현하기 위하여 메소드를 재정의(오버라이딩) 해야한다. 따라서 오버라이딩은 다형성을 구현하는데 필요한 행위라고 말할 수 있다.
'programming' 카테고리의 다른 글
뇌를 자극하는 C# 5.0 프로그래밍 Chapter9 연습문제 풀이 (0) | 2016.01.08 |
---|---|
뇌를 자극하는 C# 5.0 프로그래밍 Chapter8 연습문제 풀이 (0) | 2016.01.08 |
프로젝트 오일러(Project Euler) 23번 문제 (0) | 2016.01.07 |
뇌를 자극하는 C# 5.0 프로그래밍 Chapter6 연습문제 풀이 (0) | 2016.01.04 |
프로젝트 오일러(Project Euler) 22번 문제 (0) | 2016.01.04 |