닷넷, 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 등 모두 가능하다. 또한 인터페이스는 필드, 생성자, 정적 멤버, 상수를 가질 수 없다.
따라서 인터ㅔ이스와 추상클래스는 비슷해 보이지만 사실은 매우 다른 쓰임새를 위해 고안된 것이다. 추상 클래스는 어떤 공통의 특성을 공유하는 일련의 객체의 기반 클래스로 쓰이는 것이고 인터페이스는 기본적인 수준은 다르지만 그래도 일부의 기능이 비슷한 클래스에 쓰이는 것이다.
예를 들어 기차라는 것에 대해 생각해 보자. 기차(바퀴종류, 엔진종류, 운행 한다 등의 기본 멤버를 가진다)에는 승객전송용 기차, 화물 전용기차 기차 등이 있다고 하자. 세분화된 이름이 없는 일반적인 기차라는 것은 존재 할 수 없다고 하면 실제 기차를 만들기 위해서 기차라는 클래스는 추상클래스이어야 한다. 결국 실제 기차를 만들려면 기차라는 공통점을 가지는 좀더 세분화된 파생 클래스를 만들어야 한다. 이번엔 자동차를 보도록 하자. 자동차라는 것을 추상 클래스로 두고 각각의 세분화된 자동차(아반테, 화물차)들은 이 클래스로 공통적인 부분을 상속 받고 일반적인 , 즉 이름이 없는 자동차는 존재하지 않으므로 이 자동차 클래스는 추상 클래스가 되어야 한다.
위의 기차와 자동차라는 클래스를 이상에서와 같이 정의 하였다면 이 들의 상속 구조와는 별개로 어떠한 공통적인 특성을 공유 할 수 있는 것이다. 그 공유되는 특성을 보면 승객전용 기차와 아반테의 경우는 승객을 운송 할 수 있는 행위를 가진다고 볼 수 있다. 그래서 “승객전송” 이라는 인터페이스를 만들어 “승객을 수송하다()”라는 메소드를 정의 할 수 으며 화물 전용 기차와 화물차를 위해 “화물을 수송하다()” 라는 메소드를 정의 할 수 있다.
[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주말]
[11/2]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[평일야간]
[10/29]C#,ASP.NET마스터
[10/31]JAVA&WEB프레임워크실무과정
[11/1]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[11/2]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[평일야간]
[10/29]C#,ASP.NET마스터
[10/31]JAVA&WEB프레임워크실무과정
[11/1]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]
댓글 없음:
댓글 쓰기