OOP 인터페이스."인터페이스"가 유용한시기는 언제입니까?
답변
- 인터페이스는 클라이언트로부터 구현 지식을 완전히 추상화합니다.
- 우리는 행동을 동적으로 변경할 수 있습니다. 이는 동적 전문화 (또는 대체)에 따라 작동 방식이 달라짐을 의미합니다.
- 개발자가 구현을 변경하거나 새로운 전문화/구현을 추가 한 경우 클라이언트가 손상되는 것을 방지합니다.
- 구현을 확장 할 수있는 열린 방법을 제공합니다.
프로그래밍 언어 이러한 언어는하지만, 그들은 인터페이스에서 다중 상속을 지원하는 않는 클래스에서 다중 상속을 지원하지 않습니다
(C#을, 자바); 이는 인터페이스의 또 다른 장점입니다.
인터페이스는 서브 클래스로 구현 된 제네릭 메소드를 처리하기 위해 클래스가 필요할 때 매우 유용합니다.
public class Person
{
public void Eat(IFruit fruit)
{
Console.WriteLine("The {0} is delicious!",fruit.Name);
}
}
public interface IFruit
{
string Name { get; }
}
public class Apple : IFruit
{
public string Name
{
get { return "Apple"; }
}
}
public class Strawberry : IFruit
{
public string Name
{
get { return "Strawberry"; }
}
}
은 기본적으로 인터페이스 프로그램은 그들이 지금 대신에 "푸"개체의 "바"개체를 필요로하는 모든 고객에게하지 않고 구현을 변경할 수 있습니다. 그것은이 클래스의 사용자에게 그것이 무엇이 아니라 무엇인지 알려줍니다.
예 : 당신이 쓴
방법은 주어진 값을 반복하고자합니다. 이제 List, Arrays 및 Collections처럼 반복 할 수있는 몇 가지 사항이 있습니다.
public class Foo<T>
{
public void DoSomething(T items[])
{
}
public void DoSomething(List<T> items)
{
}
public void DoSomething(SomeCollectionType<T> items)
{
}
}
을 그리고 모든 새로운 iteratable 유형의 당신은 자신의 데이터를 캐스팅해야 다른 방법 또는 클래스의 사용자를 추가해야 할 것 :
인터페이스없이 당신이 작성해야 할 것입니다. 예를 들어,이 솔루션에서 FooCollectionType의 Collection을 가지고 있다면 Array, List 또는 SomeOtherCollectionType으로 캐스팅해야합니다. 인터페이스와
당신은 필요
public class Foo<T>
{
public void DoSomething(IEnumerable<T> items)
{
}
}
이 당신의 클래스는 그 이상 반복 할 수 있습니다에 사용자가 통과 어떤 것을 알고 있습니다 의미합니다. 사용자가 SomeCollectionType을 AnotherCollectionType으로 변경하면 클래스를 변환하거나 변경하지 않아도됩니다.
추상 기본 클래스는 동일한 종류의 추상화를 허용하지만 사용법에는 약간의 차이가 있음에 유의하십시오.
내 자신의 경험에 비추어 볼 때 인터페이스가 여러 개발자와 함께 여러 개의 상호 운용 모듈을 설계하고 구현할 때 매우 유용하다는 것을 알게되었습니다. 예를 들어 백엔드와 다른 프론트 엔드 (UI)에서 작동하는 개발자가 두 명이면 인터페이스가 마무리되면 병렬 작업을 시작할 수 있습니다. 따라서 모든 사람이 정의 된 계약을 따를 경우 나중에 통합이 어려워집니다. 그리고 인터페이스가 정확히 무엇인지 - 계약을 정의하십시오!
는 기본적으로 는이 상황을 피할 수 :인터페이스는 다중 상속의 경우에 매우 유용합니다.
- 1. 그릴시기는 언제입니까?
- 2. 모델은 언제입니까?
- 3. ROT에서 COM 인터페이스가 사라짐
- 4. 매핑 I 인터페이스가 NHibernate에
- 5. cmd.exe에 대한 인터페이스가 있습니까
- 6. Java 인터페이스가 프록시되었는지 테스트합니다.
- 7. Go에서 정확히 인터페이스가 작동합니까?
- 8. 인터페이스가 구현자를 알고 있습니다.
- 9. 인터페이스가 너무 일반적입니다.
- 10. 테스트 인터페이스가 의미가 있습니까?
- 11. 인터페이스가 얼마나 세분화되어야하는지 판단하십시오.
- 12. 인터페이스가 아닌 모의 클래스
- 13. System.IO.Stream 용 인터페이스가 있습니까?
- 14. 다른 인터페이스가 이미
- 15. 예외를 던지는시기는 언제입니까?
- 16. js에서 "var"필요성은 언제입니까?
- 17. 사용자가 보낸 쿠키는 언제입니까?
- 18. 부분 모의를 사용하는시기는 언제입니까?
- 19. NavigationService가 초기화되는시기는 언제입니까?
- 20. 예외 처리시기는 언제입니까?
- 21. ContentProvider는 실제로 생성되는시기는 언제입니까?
- 22. 클래스의 속성을 선언하는시기는 언제입니까?
- 23. 아음속 3.1 가능성은 언제입니까?
- 24. 예외를 기록하는시기는 언제입니까?
- 25. SharePoint의 SPFile.Properties! = SPFile.Item.Properties는 언제입니까?
- 26. MySQL에 비 텍스트 인터페이스가 있습니까?
- 27. django-staticfiles 관리자 인터페이스가 깨어짐
- 28. 인터페이스가 코드 중복으로 DDD를 해결합니까?
- 29. Serializable 표준 클로저 인터페이스가 있습니까?
- 30. SQLAlchemy에 CRUD 인터페이스가 빠르고 깔끔합니까?
제목이 질문의 내용보다 길면 잘 작성된 질문이 아닐 수 있습니다. 좋은 대답을 원하면 좋은 질문을하십시오. –
관련 토론에 대한 [이 오래된 질문] (http://stackoverflow.com/questions/2288643/what-is-the-difference-between-an-abstraction-and-a-facade) –