2013년 10월 25일 금요일

닷넷, C#, 인터페이스, 추상클래스

닷넷, C#, 인터페이스, 추상클래스, CE abstract class, interface 닷넷클래스, 닷넷교육 

인터페이스와 추상클래스
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
비슷한 점 : 모두 파생 클래스가 상속 할 멤버들을 담고 있다그 자체가 직접적으로 인스턴스화 될 수 없다.
 
차이점 : 주된 차이는 다중 상속의 여부이다파생된 클래스는 오직 한 개의 기반 클래스만을 상속 할 수 있다따라서 한 클래스가 추상 클래스(Abstract Class)를 상속하는 경우에는 단 하나의 추상클래스만 직접적으로 상속할 수 있고 반면 인터페이스(Interface)는 여러 개를 한꺼번에 직접 상속 할 수 있다그러나 이 같은 차이는 커다란 차이는 아니며 어떤 경우든 비슷하게 구현이 가능하다.
추상클래스는 추상멤버(구현 코드가 없으며 상속 받은 파생 클래스가 반드시 구현 해야 한다.) 와 비 추상멤버(구현 코드를 가지며 받은 파생 클래스에서 재정의 될 수 있도록 가상으로 설정 할 수 있다.)를 모두 가질 수 있다반면 인터페이스의 멤버들은 코드를 가지지 않으며 반드시 그 인터페이스를 사용하는 클래스에서 구현 되어 져야 한다간단히 정리하면 인터페이스는 추상 멤버만 가진다는 것이다그리고 인터페이스의 멤버들은 모두 public이나 추상클래스의 경우 private member(전용 멤버는 추상멤버는 아니다.), protected member, internal member 등 모두 가능하다또한 인터페이스는 필드생성자정적 멤버상수를 가질 수 없다.
따라서 인터ㅔ이스와 추상클래스는 비슷해 보이지만 사실은 매우 다른 쓰임새를 위해 고안된 것이다추상 클래스는 어떤 공통의 특성을 공유하는 일련의 객체의 기반 클래스로 쓰이는 것이고 인터페이스는 기본적인 수준은 다르지만 그래도 일부의 기능이 비슷한 클래스에 쓰이는 것이다.
 
예를 들어 기차라는 것에 대해 생각해 보자기차(바퀴종류엔진종류운행 한다 등의 기본 멤버를 가진다)에는 승객전송용 기차화물 전용기차 기차 등이 있다고 하자세분화된 이름이 없는 일반적인 기차라는 것은 존재 할 수 없다고 하면 실제 기차를 만들기 위해서 기차라는 클래스는 추상클래스이어야 한다결국 실제 기차를 만들려면 기차라는 공통점을 가지는 좀더 세분화된 파생 클래스를 만들어야 한다이번엔 자동차를 보도록 하자자동차라는 것을 추상 클래스로 두고 각각의 세분화된 자동차(아반테화물차)들은 이 클래스로 공통적인 부분을 상속 받고 일반적인 , 즉 이름이 없는 자동차는 존재하지 않으므로 이 자동차 클래스는 추상 클래스가 되어야 한다.
 
위의 기차와 자동차라는 클래스를 이상에서와 같이 정의 하였다면 이 들의 상속 구조와는 별개로 어떠한 공통적인 특성을 공유 할 수 있는 것이다그 공유되는 특성을 보면 승객전용 기차와 아반테의 경우는 승객을 운송 할 수 있는 행위를 가진다고 볼 수 있다그래서 승객전송 이라는 인터페이스를 만들어 승객을 수송하다()라는 메소드를 정의 할 수 으며 화물 전용 기차와 화물차를 위해 화물을 수송하다() 라는 메소드를 정의 할 수 있다.
 

 

댓글 없음:

댓글 쓰기