Unity3d C# toolba 사용해보기

C#, 추상클래스(abstrace class)를 알아보자!


이번시간에 알아볼 것은 C#의 abstract class(추상클래스)입니다.


학창시절에 배웠었던 기억이 잠시 나는 것 같은데요..

책을 통해서 클래스 메소드 인터페이스 등등 C#의 많은 문법들을 배우고 있는 것 같습니다.

추상클래스라는것은..

인터페이스와 비슷한 것인데요   인터페이스가 클래스안에 외형적인 선언과같은 것을 소유했지만… 직접 인스턴스를 만들지 못해서   해당 인터페이스를 참조하는 클래스에 구현적인 기능을 넣었다면.. 이것도 비슷하게.. 해당하는 클래스에 직접 인스턴스(객체)를 생성하지 못하고.. 마찬가지로 클래스를 상속하는 파생클래스를 만들어서 구현하는게 동일합니다.

하지만 이것는 인터페이스와는 다르게.. 클래스안에 메소드나 필드를 만들 수 있습니다. 직접 인스턴스를 만들지 못하는 것은 동일하지만요…

정리하여 표로 나타내보면..



형식
공통점
다른점
인터페이스
직접 인스턴스를 갖지못한다.
*외형적인 형식만 갖을 수 있다(메소드,이벤트,인덱서,프로퍼티 만 존재)
추상클래스
*형식뿐만아니라 안에 내용도 갖을 수 있다 (구현)
*추상메소드를 가질 수 있다.(인터페이스와 같은 역할을 하는 장치-구현을 가지 못하지만.. 파생클래스에서 구현하도록 강제됨!)


어떻게 본다면.. 이것을 이용한다면.. 인터페이스의 기능들을 전부 다 가능하도록 할 수 있겠다는 생각이 듭니다. 하지만 아직 아는게 많지 않아서.. ㅜㅜ

문법은 이렇습니다.



C# abstrace class


클래스이름 앞에  abstract라는 한정자를 붙여서 이게 추상클래스다! 라고 알려주는것이지요..
이것으로 직접 객체를 생성할 수 없다고 하였으니.. 이것을 상속하는 클래스를 만들려면.. 그동안에 배웠던 상속하는 방법과 다르지 않습니다.

C# abstrace class2


별다를게 없는것 같습니다. 근데 클래스관련하여 너무 많은 기능들이 있다 보니 햇갈리기 시작합니다. 이미 예전부터 햇갈리기 시작했습니다 ㅜㅜ

예제를 한번 보겠습니다.


추상클래스 AbstractBase을 만들었고 메소드를 3개 갖고있네요.. 그중 마지막 메소드는..  추상메소드네요
public abstract void AbstractMethodA(); <--이거죠..  인터페이스처럼 상속받은 파생클래스에서 내용을 채워서 무언가 일을 시킬 수 있느거죠..


C# abstrace class3


Derived라는 클래스를 만들었으며 추상클래스를 상속하였고..
메인클래스/메소드에서..  이타입의 AbstractBase에.. 이것을 상속한 메소드타입의 객체를 생성하여 할당하였습니다. 그리고 생성된 객체를 통해서 메소드 2개에 접근하였는데요..

obj.AbstractMethodA(); ←  Derived 클래스에 추상메소드를 선언하여 처리하였네요..


C# abstrace class4


obj.PublicMethodA(); ← 추상클래스 AbstractBase의 메소드PublicMethodA()을 호출하라고 합니다.

       public void PublicMethodA()
       {
           Console.WriteLine("AbstractBase.PublicMethodA()");
       }

그럼 위 두개의 호출이 이루어지게되겠네요..

C# abstrace class Example


실행하게된다면.. 위에서 보이는것 처럼 3개의 결과가 찍히게됩니다.  과연 이렇게 이것을 사용하게되었을 때의 이득이 무엇일까요..? 사용시의 장점이 무엇이길래.. 다들 추상클래스~ 하는지.. 모르겠습니다.  

책의 설명에는..  반강제적인 조항을 만들 수 있기때문이라고 합니다.

이를테면 이런거죠.. 내가 A라는 클래스를 추상으로 만들고 또한 추상 메소드를 mb,mc를 만들었는데 사용하려면.. 파생클래스를 만들어야하며..    mb,mc를 오버라이딩해서 써야겠지만.. 이것을 일일이 설명할 필요가 없다는것입니다.  당연히 그렇게 쓰지 않으면 문법적으로 에러가 나서 컴파일이 안되겠죠..

흐음!! 과연 그런일이 얼마나 일어날지.. 아직은 잘 모르겠네요.. 프로젝트단위가 커진다면.. 모르겠네요^^

아무튼  C#에서의 abstrace class(추상클래스)에 대해 알아봤습니다. 감사합니다.











댓글