가능한 중복 :
Interface vs Abstract Class (general OO)인터페이스 클래스와 추상 클래스의 차이점과 유사점은 무엇입니까?
인터페이스 클래스와 추상 클래스 사이의 차이점과 유사점은 무엇인가?
언제 인터페이스를 사용하고 추상 클래스를 사용해야할까요? 어떤 조건이 다른 상황보다 적절하게 사용 되는가?
가능한 중복 :
Interface vs Abstract Class (general OO)인터페이스 클래스와 추상 클래스의 차이점과 유사점은 무엇입니까?
인터페이스 클래스와 추상 클래스 사이의 차이점과 유사점은 무엇인가?
언제 인터페이스를 사용하고 추상 클래스를 사용해야할까요? 어떤 조건이 다른 상황보다 적절하게 사용 되는가?
this 링크가 도움이 될 수 있습니다.
먼저 인터페이스는 클래스가 아닙니다. 인터페이스는 기능을 지정할 수는 없지만 필수 사물의 이름 만 지정할 수 있습니다.
인터페이스는 인터페이스에서 상속 한 모든 클래스에서 공개적으로 사용할 수 있어야하는 메서드와 속성을 정의합니다. 인터페이스에는 구현 코드가 없으며 클래스의 비공개 측면에 대해서는 아무 것도 말하지 않습니다. 인터페이스는 클래스가 아니라 오히려 더 많은 계약입니다.
추상 클래스는 실제 클래스입니다. 추상 클래스의 유일한 제한은 직접 인스턴스화 할 수 없다는 것입니다. 오히려 추상 클래스에서 상속받은 서브 클래스를 인스턴스화해야합니다.
언제 사용하는지에 관해서는, 객체가 실제로 공통 조상을 공유 할 때 추상 클래스로부터 상속하는 것을 고려해야한다고 말하고 싶습니다. 예를 들어 '세일즈맨'과 '프로그래머'둘 다 추상 '직원'클래스에서 상속 된 경우 논리가됩니다.
인터페이스는 클래스의 공용 인터페이스가 어떤 모습인지 알고 싶지만 구현면에서 공통성을 공유 할 필요가없는 경우에 유용합니다. 예를 들어 C#에서는 IEnumerable 인터페이스를 구현하는 모든 클래스를 반복 할 수 있으며 MoveNext 및 Current를 확실히 구현합니다. 이것은 목록이나 배열과 같은 콜렉션이거나 데이터베이스 나 웹 서비스를 호출하거나 심지어 난수를 생성하는 생성자 (상태 머신) 일 수 있습니다. IEnumerable의 구현은 인터페이스에 지정된 메서드 및 속성의 이름 이외의 다른 모든 공통 코드를 공유 할 필요가 없습니다.
C#에서는 하나의 클래스에서만 상속받을 수 있지만 원하는만큼 많은 인터페이스를 구현할 수 있습니다. 또한 C# 인터페이스에서는 관습에 따라 캡틴 'I'로 시작하지만 엄격하게 말하자면 필수는 아닙니다.
인터페이스 클래스에서는 구현 자 클래스의 각 함수를 구현해야하지만 추상 클래스에서는 일부 메서드가 이미 추상 클래스로 구현 될 수 있으므로 필요하지 않습니다. –
@GG, 멋진 링크 – Starx