C# 인터페이스 문의

푸하히   
   조회 6099   추천 1    

코딩 문의를 여기에 해도 되는지 모르겠는데.. 알고 있는 커뮤니티가 여기뿐이라.. 

제가 최근에 C#을 공부하고 있는데요.. 


문의 드릴건 "인터페이스" 인데요 

기능으로 보면 클래스가 더 많고 인터페이스는 제한적인데... 

무엇인가 구현할려고해도 인터페이스 내에서는 안되고..

 파생 클래스를 또 사용해야하고...

그런데도 인터페이스를 쓰는 이유가 무엇인가요..? 


개념 잡기가 너무 힘들어서.. 문의 드립니다. 

짧은글 일수록 신중하게.
무아 2016-06
인터페이스.. 그다지 필요성도 모르겠고 잘 쓰진 않지만 어쩔수 없이 써야할 경우도 있더군요. (딴 사람이 만든 것들을 쓰다보면...)
그냥 인터페이스는 일종의 규격을 표시한 문서 같은 것 같습니다.
이 규격에 구현까지 넣어버리게 되면 이 규격을 사용하는 다른 사람들이 싫어할 것이고.
구현을 넣고 싶으면 인터페이스를 상속받아서 클래스를 만들어 구현을 하라... 뭐.. 이정도 개념이 아닌가 싶습니다.

혼자서 다 짤것이면 그냥 클래스로 하면 되지만
여러명이 작업을 하거나 나중에라도 누군가 이를 바탕으로 다른 것을 만들어야 한다면 표준화된 인터페이스를 제공하는 것이 더 낫다고 생각해서 만든 것이 아닐까요?

p.s. 저는 인터페이스란 말을 object-c 할 때 처음 봤었는데 재미있었습니다.
https://ko.wikipedia.org/wiki/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8B%B0%EB%B8%8C-C
링크 내용도 한번 읽어보세요.
     
푸하히 2016-06
인터페이스를 규격이라고 생각하면 될까요??

제가 예제로 풀었던 문제는 입력된 데이터를 출력하는 문제였습니다.
하나는 "콘솔" 하나는 "TXT" 파일

만약에 누가 추가로 "엑셀"에 파일을 출력한다고 할때
인터 페이스가 있음 규격이 비슷해서 더 찾기 쉬워서 라고 생각하면 될까요?

답변 감사합니다
          
찾기 쉽다는 것보다는 쓰기 편해진다...가 좀 더 가까울듯 합니다.

예를 들어...IOutput 이라는 인터페이스에 Print 라는 메소드를 선언했다고 가정하고..
CConsole, CTextFile 두개의 클래스가 각각 IOutput 을 상속받도록 정의한 후...
Print 메소드에 CConsole 은 콘솔로 아웃풋하는 걸 구현하고...CTextFile 은 TextFile 에 저장하는 걸 구현하면...
Console 로 출력하든 TextFile 로 출력하든...출력부분은 수정할 필요가 없어지고 출력을 어디로 하는지는 상관이 없어집니다.

IOutput outputMethod = new CConsole(); // 혹은 new CTextFile();
outputMethod.Print(); // Print 하는 그 시점에는 outputMethod 가 어떤 클래스이던 신경쓸 필요가 없어짐.

실제 코딩 상황에서는...
CConsole 일지 CTextFile 일지는 출력하는 부분이 아닌 외부에서 지정해주고 코드 상에서는 외부에서 지정된 방식으로 출력하게끔 한다던디...
혹은...외부에서 아예 IOutput 에 해당하는 클래스의 인스턴스를 생성해서 넘겨주고...그걸 받아서 IOutput.Print 만 호출하는 방식으로 처리되게끔 합니다.

위의 예에서 엑셀에 출력하는 걸 추가한다면...
IOutput 을 상속받는 CExcel 을 만들어서...대체해주면 됩니다.

즉...출력하는 사람은 그게 어디로 출력되던지...동일한 (통일된) 형태의 호출방식을 유지할 수 있으므로 코드의 일관성을 가져갈 수 있습니다.
이거 글로 쓰려니 글재주가 모자라서 상당히 어렵네요. ㅠㅠ;;
               
푸하히 2016-06
아닙니다 충분히 도움 되었습니다~
제가 휴가라.. 답글을 늦게 달았네요
답변감사합니다~
그늘 2016-06
인테페이스를 쓰는 이유는 가장큰게 다중상속때문입니다.

C#에서 클래스는 다중상속이 되지 않습니다.

인터페이스로 구현하고 파생클래스에서 다중상속해서 구현하여 사용합니다.

그리고 다른 개발팀과 협업을 할때 인터페이스로 구현을 해서 클래스의 형태를 1차적으로
고정시키고 개발할때도 사용합니다.

사실 여러사람이 짜면 짜는 사람의 특성 때문에 설계를 해도 나중에는 서로 다르게
구현을 합니다.

최상위 인터페이스를 구현하고 이를 상속받게해서 구현을 하면 큰 틀이 유지되기 때문에
코드의 통일성도 있고  그렇습니다.
     
푸하히 2016-06
아 코드의 통일성 감사합니다
제가 휴가라 답글을 늦게 달았네요
DoubleSH 2016-06
용어자체가 ... inter + face (다른 면과 다른면)
서로다른 것들을 연결시키는 의미입니다. (라고 해석하면 편하죠..)
Network interface = UTP선의 끝에 RJ45 잭을 꼽아 받아들이는 장치...

인터체인지는 다른 도로들을 연결하고... 인터페이스는 서로 다른 규격들을 연동하고...
     
푸하히 2016-06
한번 이해하면 참 편한데.. 그 한번이해하는게 너무 어렵네요 ㅠ


QnA
제목Page 2390/5724
2015-12   1763179   백메가
2014-05   5237476   정은준1
2016-06   5824   신우섭
2016-06   5297   이건희
2016-06   15745   yanku
2016-06   6110   Christopher
2016-06   5876   회원K
2016-06   6174   퍼싱글
2016-06   4474   yanku
2016-06   7235   Noman
2016-06   4218   DoubleSH
2016-06   4704   늘파란
2016-06   6530   회로쟁이
2016-06   4553   회원K
2016-06   5261   Sunrise
2016-06   4958   하나룸
2016-06   19087   정은준1
2016-06   8726   만곰이
2016-06   7570   Lucyed
2016-06   4989   izegtob
2016-06   6121   김건우
2016-06   5225   김건우