- 공유 링크 만들기
- X
- 이메일
- 기타 앱
안녕하세요.. 이번시간에는 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# 기반클래스와 파생클래스를 알아보았습니다..
댓글
댓글 쓰기