인터페이스를 사용하는 이유는 무엇입니까?
표준화만을위한 것인가?
인터페이스를 사용하는 이유는 무엇입니까?
표준화만을위한 것인가?
답변:
비유 1 : 미국 우주 왕복선과 마찬가지로 러시아 소유즈 우주선과 중국 선저우 5는 동일한 도킹 인터페이스를 구현하기 때문에 모두 국제 우주 정거장에 도킹 할 수 있습니다. (이것은 단지 예일뿐입니다. 실생활에서 사실인지 모르겠지만 예를 들어 우리의 불신을 중단합시다)
비유 2 : 다양한 컴퓨터 모니터를 가정용 컴퓨터에 연결할 수 있습니다. 벽면 크기의 TV, 구형 CRT (두꺼운 종류), 20 인치 평면 스크린 또는 시각 장애인이 터치로 "볼"수있는 점자 기계를 연결할 수 있습니다. 이러한 다양한 / 다양한 장치와 사용자의 호환성이 있습니다. 모두 인터페이스 표준에 동의하기 때문입니다.
C # 인터페이스의 세부 사항 -C # / OOP 인터페이스를 사용하면 보이지 않는 / 가상 세계에서 동일한 작업을 수행합니다.
당신은에 대한 올바른있어 표준화 뿐만 아니라, 유연성 , 확장 성 , 확장 성 , 유지 보수성 , 재사용 , 테스트 용이성 및 전원 .
(소프트웨어 인터페이스를 더 많이 사용할수록 이러한 "버즈 워드"가 더 많이 이해 될 것입니다. 그리고 인터페이스가 우리를 똑같이 잘 해냈 기 때문에 항상 현실 세계의 인터페이스를 고려하십시오.)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
인터페이스는 구현 된 것이 무엇을 할 수 있는지 설명하는 데 사용됩니다. 따라서이 인터페이스 유형과 동일한 인터페이스를 구현하는 여러 개체를 처리 할 수 있습니다.
예를 들면 :
public interface IMyInterface{
public void DoFirst();
public int DoSecond();
}
public class A : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blubb1");
}
public int DoSecond(){
Console.WriteLine("Blubb2");
return 2;
}
}
public class B : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blibb1");
}
public int DoSecond(){
Console.WriteLine("Blibb2");
return 4;
}
}
클래스는 여러 가지 방법으로 인터페이스를 구현합니다. 그러나 IMyInterface로 사용할 수 있습니다. 예를 들면 :
public static void DoMethodsInInterface(IMyInterface inter){
inter.DoFirst();
inter.DoSecond();
}
public static void main(){
DoMethodsInInterface(new A());
DoMethodsInInterface(new B());
//Or use it in a List
List<IMyInterface> interlist = new List<IMyInterface>();
interlist.Add(new A());
interlist.Add(new B());
foreach(IMyInterface inter in interlist){
inter.DoFirst();
}
}
이것이 인터페이스가 유용한 이유를 조금 분명하게 해주기를 바랍니다.
Woozle
중 하나에 대한 참조를 받아들이고 자하는 모든 코드 Woozle
는 어떤 클래스를 다루고 있는지 알아야하며, 알고있는 클래스 만 가능할 것 Woozle
입니다. 반대로, 두 클래스가 모두를 구현 IWoozler
하면 정확한 유형을 알 필요없이 임의의 코드가 제공 될 IWoozler
수 있습니다 Woozle
.
여기에 높은 수준의보기가 있습니다 ...
인터페이스는 Information Hiding 개념에서 큰 역할을합니다 .
기본적으로 호출 클래스가 해당 구현에 종속되지 않도록 클래스 의 구현 세부 정보 를 숨기는 데 도움 이됩니다. 따라서 인터페이스를 사용하여 호출 클래스를 변경하지 않고 구현을 수정할 수 있습니다. 이것은 차례로 코드 의 복잡성 을 제한 하고 장기적 으로 유지 관리 를 쉽게 만듭니다 .
인터페이스를 처음 이해하기 시작했을 때 "클래스에 대한 설명을 제공하는 계약"으로 설명되었습니다. 그것이 당신에게 도움이 될지는 확실하지 않지만 자동차의 인터페이스를 생각한다면 그것이 운전하고 , 고장 나고 , 회전 한다고 말할 수 있습니다. 따라서 A 지점에서 B 지점으로 이동하는 한 이러한 기능이 어떻게 구현되는지 알 필요가 없습니다.
인터페이스가 C # / Java와 같은 언어에서 사용되는 주된 이유는 해당 언어가 다중 (클래스) 상속을 지원하지 않기 때문 입니다 (다중 상속의 정확한 문제는 무엇입니까? 참조 ).
그러나 여러 (인터페이스) 구현이 허용되어 클래스를 다른 방식으로 사용할 수 있습니다.
인터페이스가 다소 어색합니다. 그들은 동일한 이름과 구현 된 인터페이스가 동일한 동작을 의미한다고 믿기 만해도 계약에 의한 디자인을 지원합니다. 이것은 API 문서 덕분에 작동하며 사람이 확인해야합니다. 이는 인터페이스를 너무 약하게 만듭니다. 이를 해결하는 한 가지 방법은 공식 사양 일 수 있습니다. 반면에 인터페이스는 너무 강하고 너무 엄격합니다. 종종 재사용을 방해하는 인터페이스를 발전시킬 수 없습니다. 이는 메시지 (호출 메소드)를 보내는 프로토콜 (동적 언어의 메커니즘)에 의해 해결되며 해당 메시지가 수신자에 의해 지원되지 않으면 표준 콜백이 호출됩니다. 제약이있는 구체적인 프로토콜을 갖는 것이 더 좋을 것입니다.
원격을 생각하십시오 ...
여기에는 클라이언트와 서버가 있습니다. 인터넷에 의해 물리적으로 분리되어 있다고 가정 해 보겠습니다. 클라이언트는 실제 실행이 서버에서 발생하는 메서드를 호출하고 있습니다. 클라이언트의 관점에서 클라이언트는 실행을 수행하는 서버의 개체에 대해 아무것도 알지 못합니다. 그러나 호출 할 메서드를 알고 있습니다. 클라이언트 프로그램을 빌드하는 동안 인터페이스 (또는 계약)에만 노출되기 때문입니다. 우리는 실제로 서버에 살고있는 전체 객체에 노출되지 않습니다. .net 원격에서 몇 가지 데모 앱을 시도하면 나머지는 알아낼 것입니다. 즐거운 프로그래밍.
다른 사람이 나와 같고 설명이 아닌 예제와 행동으로 배우면 여기에 몇 가지 코드가 있습니다 ....
나는 우아하고 유용한 방식으로 인터페이스를 사용하는 프로젝트 다운로드를 포함하여 C #의 신경망 구현을 발견했습니다.