본문 바로가기
메타버스기반게임콘텐츠기획/스터디(C#이 보이는 그림책)

6장, 클래스의 응용 (6-1)

by Queenut 2021. 12. 1.

 

 * 추상 클래스

 : 추상 메소드를 포함하는 클래스.

   상속만 가능하고 인스턴스화(객체 생성) 시킬 수 없다.

 

 * 추상 메소드

 :  호출하는 방법만 있고 실제로 무엇을 하는지는 작성되어 있지 않은 빈 메소드.

   파생 클래스에서 오버라이드 했을 때 구체적인 처리를 작성한다.

 

왜 굳이 번거롭게?

 

세부적인 부분을 정하지 않고 모호하게 진행하고 싶어서.

 

abstract class Animal
{
       public string name;
       public abstract void cry();
}
...

class Dog : Animal
{
       public override void cry()
       {
              Console.WriteLine("멍");
       }

       public void Main() {
...

abstract : 클래스 앞에, public(수식자) 뒤에.

; : 추상 메소드는 이거로 끝내야 한다.

override : 반드시 오버라이드 해서 사용한다.

 

C#이 보이는 그림책. p159

 

 

 * 인터페이스

 : 클래스와 비슷한 구조이나 멤버는 추상 메소드, 추상 속성, 추상 인덱서, 이벤트로 한정된다. 그리고 클래스에 집어넣는 형태로 사용하는데 이걸 '인터페이스의 구현( : )'이라고 한다.

인터페이스의 정의에서 모든 메소드는 public으로 취급하므로 액세스 수식자를 생략한다.

인터페이스는 얼마든지 구현할 수 있다.

한 개의 인터페이스를 복수의 클래스에서 구현할 수 있다.

 

p161.

 

 

 * 인터페이스 상속 ( : )

 : 클래스처럼 상속해서 새 인터페이스 생성 가능. 

 

interface A : B, C, D { ... }

복수의 인터페이스를 상속받을 수 있다.

 

 

interface A
{
       void e();
       void f();
}
interface B : A
{
       void g;
       new void f();
}

new void f() : 상속 원본과 대상에 같은 멤버가 있다면 상속 대상에 new를 붙여서 상속 대상을 우선하게 한다.

 

 

 

 

 

 * 다형성 (polymorphism)

 : 상속한 클래스의 객체는 기본클래스로 취급할 수도 있고 파생클래스로 취급할 수도 있다. 이처럼 한 객체나 메소드가 많은 형태를 가지는 것을 다형성 이라고 한다.

 

 

 - 기본클래스에 객체 대입

class A
{
       public int m;
       public virtual void p() { ...
...
}

class B : A
{
       public int n;
       public override void p() { ...
....
}

A a = new A();
B b = new B();
a = b;

결과, '기본클래스A'의 객체(혹은 파생클래스)a는 b의 값이 들어가고, 'A를 상속받은 파생클래스B'의 객체(혹은 파생클래스)b에는 b가 들어간다.

파생클래스의 객체는 기본클래스의 객체에 대입할 수 있습니다.

그러나 파생클래스의 객체에는 대입할 수 없습니다( b = a; 불가! ).

 

 

 - 기본클래스로 객체 생성

 : 파생클래스의 객체는 기본클래스의 객체 변수에 대입할 수 있다.

A ab = new B();

A는 기본클래스 이름, B는 파생클래스 이름.

 

 

 - 기본클래스와 파생 클래스의 객체

 : 메소드는 객체를 인수로 받을 수 있다. 기본클래스의 객체를 받는 메소드에는 파생클래스의 객체를 전달할 수 있다.

실제로는 객체가 아니라 참조 정보가 전달됩니다.

 

 

 

 * override와 new

클래스A와 파생클래스B가 있고, 메소드m이 양쪽에 있다고 할 때 차이점.

 

 - override

 : 객체변수의 형에 상관없이 인터페이스의 형에 따라 참조 대상이 결정된다.

 

 

 - new

 : 참조 대상은 객체 변수의 형에 따라 결정된다.