본문 바로가기

.NET/C#

Class(5)

728x90
반응형

클래스의 마지막 시간이 될 것 같네요.

이번 시간도 상속에 대한 내용을 토대로 이야기 해보려 합니다. 상속? 그게 뭐야 라는 분은 이전 포스트 중에 Class(3), Class(4)를 읽어 보시기 바랍니다~
http://darkangelus.tistory.com/entry/Class3
http://darkangelus.tistory.com/entry/Class4

위 주소에 있는 포스트를 잘 보시면 상속에 대해서 이해가 가시리라 믿습니다.

이번에는 abstract Class에 대해서 알아보려고 합니다. 일명 가상 클래스라고도 하지요~

abstract class에 대해서 자세히 알아볼까요~
1. abstract class는 객체를 생성할 수 없는 클래스입니다.
2. abstract method는 본문을 선언할 수 없는 메소드 입니다.
3. abstract method를 포함하는 클래스는 abstract class가 되어야 합니다.
4. abstract class를 상속하는 클래스는 상위 클래스의 abstract 메소드를 재정의(override)하거나 abstract class로 선언해야 합니다.

class 마지막 시간인데 내용은 별거 없죠? ㅎㅎ

솔직히 내용 자체는 별거 아니지만 정말 중요하죠 abstract와 interface때문에 엄청들 고생을 하고 오려워하기 때문이죠 저 또한 가상클래스 인터페이스 정말 싫습니다. ㅜㅜ 하지만 어쩌겠어요 결국 알아야 하는건데~~

코드상에서 약간의 예시를 해서 보여드리겠습니다.
1.

    1 class TheAbstract

    2 {

    3     public abstract void TheAbstractMethod();

    4 }
2.

    1 abstract class TheAbstract

    2 {

    3     public abstract void TheAbstractMethod() { }

    4 }

위 두 코드들은 다 에러가 발생할 것입니다. 왜냐하면 위 abstract class의 문법법칙중에 가상메소드를 가진 클래스는 abstract 클래스가 되어야 한다고 명시되어있고 가상 메소드는 내용을 가질 수 없다고 하였습니다. 즉, 1번에는 abstract class TheAbstract로 고쳐야 되고 2번은 메소드에 {}를 빼고 ;를 넣어야 에러가 사라질겁니다.
1.

    1 abstract class TheAbstract

    2 {

    3     public abstract void TheAbstractMethod();

    4 }

    5 

    6 class TheAbstractDerived : TheAbstract

    7 {

    8 

    9 }

위에 코드도 에러가 발생하는데요. 이유는 왜일까요?(죽을래? -_-) 죄송합니다. 이유는 상속받은 클래스의 abstract method를 다시 재정의 하지 않았기 때문입니다. 해결을 할려면 상속받은 클래스도 abstract 를 붙이던지 메소드를 재정의해야합니다. 즉, 아래와 같이 말입니다.
1.

    1 abstract class TheAbstract

    2 {

    3     public abstract void TheAbstractMethod();

    4 }

    5 

    6 abstract class TheAbstractDerived : TheAbstract{}

2.

    1 abstract class TheAbstract

    2 {

    3     public abstract void TheAbstractMethod();

    4 }

    5 

    6 class TheAbstractDerived : TheAbstract

    7 {

    8     public override void TheAbstractMethod()

    9     {

   10     }

   11 }

이렇게 하면 오류가 발생하지 않게 되지요.

abstract class, abstract method에 대해서 좀 이해가 가셨는지 모르겠습니다. 이것들은 한가지만 알아두시면 됩니다. abstract method는 내용이 있으면 안된다. class 안에 abastract method가 있으면 그 클래스는 무조건 abstract class이다. abstract 클래스를 상속받은 클래스는 꼭 abstract method를 재정의 해야 한다. 재정의 하지 않을 경우 그 클래스도 abstract 클래스가 되어야 한다. 이것이지요~^^

도움이 되었길 바라며~~~이것으로 클래스에 대해서는 마치도록 하겠습니다. 다음에는 interface에 대해서 알아보도록 하겠습니다~

감사합니다~~^ㅡ^

728x90
반응형

'.NET > C#' 카테고리의 다른 글

C# delegate  (0) 2010.01.14
FileAndDirectory  (0) 2010.01.12
C# File Input/Output  (1) 2009.12.24
C# Collection  (0) 2009.12.21
Interface  (0) 2009.12.18
형변환에 대해서...  (0) 2009.12.18
System.Object 클래스 상속  (3) 2009.12.18
Property의 get, set 에 대한 간단한 정리  (0) 2009.12.18
Class(4)  (0) 2009.12.17
Class(3)  (0) 2009.12.17