2010-08-23 4 views
2

OOP 인터페이스."인터페이스"가 유용한시기는 언제입니까?

+12

제목이 질문의 내용보다 길면 잘 작성된 질문이 아닐 수 있습니다. 좋은 대답을 원하면 좋은 질문을하십시오. –

+0

관련 토론에 대한 [이 오래된 질문] (http://stackoverflow.com/questions/2288643/what-is-the-difference-between-an-abstraction-and-a-facade) –

답변

0
  1. 인터페이스는 클라이언트로부터 구현 지식을 완전히 추상화합니다.
  2. 우리는 행동을 동적으로 변경할 수 있습니다. 이는 동적 전문화 (또는 대체)에 따라 작동 방식이 달라짐을 의미합니다.
  3. 개발자가 구현을 변경하거나 새로운 전문화/구현을 추가 한 경우 클라이언트가 손상되는 것을 방지합니다.
  4. 구현을 확장 할 수있는 열린 방법을 제공합니다.

프로그래밍 언어 이러한 언어는하지만, 그들은 인터페이스에서 다중 상속을 지원하는 않는 클래스에서 다중 상속을 지원하지 않습니다

(C#을, 자바); 이는 인터페이스의 또 다른 장점입니다.

+9

나는 이것을 +1 할 것이다 if 당신이 모든 문장을 두 번 읽어야한다는 것은 그렇게 끔찍한 것이 아닙니다. – dbemerlin

+0

Markdown은 목록을 지원합니다. 적절한 경우 해당 태그를 사용하십시오 (그런 코드 블록에 텍스트를 삽입하지 마십시오!) – Jasper

+2

@dbemerlin 정직하고 읽고 싶다고 인정한다면 위대한 의견으로 투표 하겠습니다. 두 번 이상 각 항목. – thelost

2

인터페이스는 서브 클래스로 구현 된 제네릭 메소드를 처리하기 위해 클래스가 필요할 때 매우 유용합니다.

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"; } 
    } 
} 
0

은 기본적으로 인터페이스 프로그램은 그들이 지금 대신에 "푸"개체의 "바"개체를 필요로하는 모든 고객에게하지 않고 구현을 변경할 수 있습니다. 그것은이 클래스의 사용자에게 그것이 무엇이 아니라 무엇인지 알려줍니다.

예 : 당신이 쓴

방법은 주어진 값을 반복하고자합니다. 이제 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으로 변경하면 클래스를 변환하거나 변경하지 않아도됩니다.

추상 기본 클래스는 동일한 종류의 추상화를 허용하지만 사용법에는 약간의 차이가 있음에 유의하십시오.

18

내 자신의 경험에 비추어 볼 때 인터페이스가 여러 개발자와 함께 여러 개의 상호 운용 모듈을 설계하고 구현할 때 매우 유용하다는 것을 알게되었습니다. 예를 들어 백엔드와 다른 프론트 엔드 (UI)에서 작동하는 개발자가 두 명이면 인터페이스가 마무리되면 병렬 작업을 시작할 수 있습니다. 따라서 모든 사람이 정의 된 계약을 따를 경우 나중에 통합이 어려워집니다. 그리고 인터페이스가 정확히 무엇인지 - 계약을 정의하십시오!

는 기본적으로 이 상황을 피할 수 : alt text

+0

매우 재미 있고 암시 적입니다. – thelost

+7

이봐 요, 내 작품을 상기시켜줍니다 ... 내게 생각 나게 ... 다시 돌아와야합니다. (D * mn you so!) – dbemerlin

+2

불행히도 리팩터링은 쉽지 않을 것입니다. 그 사람들은 소프트웨어 사람들처럼 – Arseny

1

인터페이스는 다중 상속의 경우에 매우 유용합니다.

관련 문제