Unity3d C# toolba 사용해보기

C# 기반클래스와 파생클래스를 알아보자..


안녕하세요.. 이번시간에는 C#에서 기반클래스와 파생클래스에 대해 알아보겠습니다.

객체지향에서 빠질 수 없는것이 클래스와 객체인데요.. 공부해가면서 어려운것을 정리를 한번 해 보려고합니다. 독학으로 해 보려고 하니.. 생각보다 어렵고 이해가 잘 안되는 부분이 많아서 진도가 생각처럼 잘 안 나가네요..

내용으로 보면 정말 별것 아닌것 같은데요.. 머리가 굳어서 그런가 쉽게 와 닿지 않습니다 ㅜㅜ

뇌를 자극하는 C#프로그래밍을 공부하고 있는데요..

기반클래스와 파생클래스를  개와 고양이를 포유류라는 공통점으로 분류를 하고 있습니다. 적절한 표현이라고 생각합니다.

포유류라는 클래스로 표현하였고..   개와 고양이를 포유류라는 클래스로부터 상속을 받았다고 표현을 할 수 있겠네요…

여기에서 포유류에 해당하는 클래스가 기반클래스가 되겠고요.. 이것을 상속받은 개와 고양이에 해당하는 클래스가 파생클래스가 되겠습니다.


기반클래스_파생클래스


이런 상속관계를 클래스간에 표현하고자 한다면..   상속받는클래스이름:상속하는클래스이름 으로 표현합니다.

class Mammal
{
   public void Test()
  {
      ……..
  }
}

class Dog : Mammal    ←-상속하는 클래스이름을 표기하면됩니다.
{
    public void Bark()
    {
        …
    }
 
}

class Cat : Mammal    ←-상속하는 클래스이름을 표기하면됩니다.
{
 …...
}

이렇게 상속관계를 구성한다면..

아래처럼..  Dog클래스 타입의 dog객체를 만들어도..  Mammal 클래스에 있는 Test()  method(메소드)에 접근할 수 있게 되는 것 입니다.

Mammal mammal = new Mammal();

mammal.Test();


Dog dog = new Dog();
dog.Test();
dog.Bark();

….

이런 상속적인 관계를 잘 이해하고 활용한다면.. 코드의 재 사용이 용이하기 때문에 효율적인 프로그래밍이 가능할 거라 기대가 됩니다.

하지만  이런 식의 표현도 가능하다고 합니다.   근데 정말 눈에 잘 안 익어서 연습을 많이 해보는 수 밖에 없는 것 같네요

mammal = new Dog();               ---> 한참 고민하게 만드는군요..
mamal.Test();

//dog는 mammal 이다.. 라는 표현입니다.
//큰 범주로 보면.. 개는 포유류에 속하는 것은 당연한데 이런 식으로 표현 하는 게 눈에 잘 익지 않습니다.

Dog dog = (Dog)mamal;     -->이것은 그나마 좀 눈에 익네요..  형변환 하는 것 같네요.
dog.Test();
dog.Bark();

이렇게 기반클래스와 파생클래스 사이에 형 변환이 가능하고.. 파생클래스의 인스턴스는 기반클래스의 인스턴스로 사용이 가능하다는 거죠 근데 정말 머리 아프네요.. 편리하긴한데..

이런 클래스간의 형변환을 위해서 C#에서 연산자를 제공하고있습니다.

is 연산자와  as연산자입니다.

is연산자는 객체의형식을 비교해서 결과값을 true,false로 반환하고요…
as연산자는 형변환과 비슷하지만 결과가 없으면. null로 만들어 버립니다.

그래서 두 연산자를 이용해서..   형변환을 하기전에 사전에 테스트용으로 조건을 걸어 사용할 수 있습니다.

조건을 걸어 만족하면.. 클래스형 변환을하고 아니면.. 메시지를 출력 한다던가 빠져나온다던가 하면.. 오류가 줄어들겠죠..

is 연산자 사용시..
…..
if (mammal is Dog)         ← is 연산자를 이용해서 mammal의 객체가 Dog형식인지 확인..
{
      dog = (Dog)mammal;
      ...
}



as연산자 사용시

….
Mammal mammal = new Dog();
Dog dog = mammal as Dog;       ← as연산자를 사용하여  mammal객체가 Dog 형변환하는데
if (dog != null)                                   실패하면 null값이 들어온다..
{
……...
}


이상으로 C# 기반클래스와 파생클래스를 알아보았습니다..







댓글