나사 조이는 걸 예로 들면 전동드릴 두고 손으로 돌리는 거임
그게 잘못 된 건 아니지만 잘한다고 할 수도 없음
드릴이 없는 것도 아니고 옆에 두고 쓸줄 모른다고 안 쓰는거니까
집에서 취미로 뭐 조립하는 거면 아무도 신경 안 쓰겠지만
공사판에 나가서 일로 하는 거면 뒤지게 욕 먹겠지
물론 취미여도 스케일 커지면 전동드릴 써야 할 거임
수백 수천개 나사를 언제 드라이버로 돌리고 앉아있나
마찬가지로 상태 패턴 같은 추상타입을 활용한 방식이 있는데
인터페이스 안 써도 구현이야 가능하지만 c 처럼 밖에 못 쓸 걸
그러면 if 체크나 캐스팅에 쓸데없는 코드 노가다가 많아짐
델리게이트도 일종의 인터페이스라고 보면 이미 많이 쓸텐데
c#이 제공해주고 유니티가 다 만들어놨다고 기초를 배째면
제일 중요한 응용력에서 찐빠나버려서 한계가 생김
그게 잘못 된 건 아니지만 잘한다고 할 수도 없음
드릴이 없는 것도 아니고 옆에 두고 쓸줄 모른다고 안 쓰는거니까
집에서 취미로 뭐 조립하는 거면 아무도 신경 안 쓰겠지만
공사판에 나가서 일로 하는 거면 뒤지게 욕 먹겠지
물론 취미여도 스케일 커지면 전동드릴 써야 할 거임
수백 수천개 나사를 언제 드라이버로 돌리고 앉아있나
마찬가지로 상태 패턴 같은 추상타입을 활용한 방식이 있는데
인터페이스 안 써도 구현이야 가능하지만 c 처럼 밖에 못 쓸 걸
그러면 if 체크나 캐스팅에 쓸데없는 코드 노가다가 많아짐
델리게이트도 일종의 인터페이스라고 보면 이미 많이 쓸텐데
c#이 제공해주고 유니티가 다 만들어놨다고 기초를 배째면
제일 중요한 응용력에서 찐빠나버려서 한계가 생김
흠.. 그정돈가
델리게이트가 무슨 일종의 인터페이스냐.. 인터페이스랑 델리게이트 공부부터 다시 좀..
둘이 같다는 게 아니라 개념적으로 비슷하다는 거지 델리게이트랑 "단일" 인터페이스는 시그니처가 같으면 거의 비슷하게 쓸 수 있음 델리게이트를 익명 콜백으로 밖에 안 써봤으면 이해함
무슨말하는지 알겠고, C#은 v2.0부터 써오던 개발자인데 이탈리아 요리사가 "할머니가 바퀴 들고 있다고 할머니가 자전거가 되냐?" 라고 했던 짤이 생각나네 태생 자체가 다르고, 개념 자체가 다른데 그걸 "일종의"라는 표현을 써버리면 그걸 보는 초보개발자들이 혼동오지 않겠음? 그럴땐 개념적으로 비슷하다고 하는게 아니라 사용방식이 비슷하다라고 해야지. 너 말대로면 abstract도 일종의 인터페이스이자 델리게이트가 되버리는데
OOP에서 왜 상속과 구성이 있고, 이를 C#이 abstract와 interface로 지원하는지를 알면 이해를 할텐데 아마 디자인패턴이나 아키텍처패턴같은 실무에서 실제 설계를 안해보고 함수포인터 사용하듯 그냥 사용만 해서 그렇게 이해하고 있는듯한데 그거 아니야...
이 정도 알고 있으면 초창기 oop는 다중상속 됐던 것도 알 것 같은데 추상 클래스나 인터페이스나 클래스 헤더에 메타데이터 추가 하는 거고 기능이나 문법적으로 제한이 있는 건 경험적으로 부작용 큰 것들을 컴파일러단에서 제한 해놓은 거고 태생까지 가버리면 결국 포인터 왔다 갔다 인데 엄청 심오한 뭔가가 있는 것 처럼 얘기하면 좀 오글거림
객체지향이 생긴 이유가 클래스가 생긴 이유가 단지 네임스페이스가 전역 밖에 없어서 쓸 이름이 없어서 생겼다고 하면 믿을지 모르겠는데 그렇게 지역 변수가 생기고 함수도 붙여서 팩킹하고 그러다가 자주 쓰이는 형태가 있어서 패턴이라고 이름도 붙이고 하다가 지금까지 온 거지 엄청난 이유와 비밀은 없음
참 시니컬하네. 어셈블리>C>C++>WinAPI>MFC>WinForm>WPF 외 자바 등등 다 밟아왔지만 난 아직도 개발이 심오하고 어려운데 수많은 컴퓨터 과학자들이 논문도 쓰고 해오면서 오랜시간 발전해온 개념들이 그렇게 별거 아니면... 너 혹시 대형프로젝트 요구사항 보자마자 뚝딱뚝딱 만들고, 운영하면서 기획측 변경사항도 뚝딱뚝딱 해내는 전설의 S급 개발자? (국내에서 난 한번도 못봄. A급도 잘 못봄) 근데 심오한 뭔가도 없고 그렇게 별거 아니면.. 본문 내용과 다르게 인터페이스 왜 씀?
별 거 아니라는 거 아니고 나도 모르는 거 많음 발전의 과정에서 무에서 유를 창조한 사람들 다 대단하다고 생각함 근데 꿈보다 해몽이 커보여서 얘기한 거고 인터페이스는 전동드릴로 다시 얘를 들면 나는 전동드릴 만드는 법도 구조도 모르지만 충전해서 버튼 누르면 돌아간다는 건 알음 그리고 쓰면 편해진다는 것도 알고 그럼 안 쓸 이유가 있음?
댓 길이 때문에 의문문으로 끝났는데 핑퐁 충분히 했다고 생각하고 그다지 생산적인 내용은 아닌 것 같아서 마무리 하고 답글은 더 안 하겠음
내가 뭔가 잘못알고 있거나 놓치는게 있나 해서 본문을 다시 곱씹어보고 찬찬히 생각해봤어. "델리게이트도 일종의 인터페이스" 이 부분이 설계적, 개발적인 측면에서 말도안된다는 생각밖에 계속 안들긴한데 "인터페이스와 델리게이트 모두 참조를 통해 콜백호출이 가능하니까 델리게이트를 일종의 단일 계약사항을 가진 인터페이스로 볼 수 있다." 이런 주장이라고 이해하는걸로.. 실제 닷넷 내부 구현이 다르고, 동적이나 정적이냐의 차이 등등 많은 차이점이 있지만... 나도 그렇게 이해하고 끝내겠음. 뭔가를 얻었으면 모르겠는데 서로의 견해차이가 커서 생산적인 내용이 아니라는데 이하동문.
답답해서 꿀잠을 위해 챗GPT한테 결론 내달라고함. Q: "delegate도 일종의 interface라고 볼 수 있는가?" A: Delegate와 Interface는 유사한 기능을 제공하는 측면이 있지만, 본질적으로 다른 개념입니다. 하지만 일정한 맥락에서는 delegate를 interface의 특별한 형태로 볼 수도 있습니다. Delegate는 엄격히 말해 Interface와 다른 개념입니다. Delegate는 함수 호출을 캡슐화한 객체이고, Interface는 클래스 또는 구조체의 동작을 정의하는 계약입니다. 하지만, Delegate는 특정 시그니처의 메서드 호출을 강제하는 점에서 "단일 메서드를 가진 간단한 Interface"로 간주될 수 있습니다.
특히, Delegate를 Interface의 일부 기능을 구현하는 도구로 이해하면, Delegate를 Interface의 특별한 형태로 볼 수 있는 맥락이 존재합니다. 즉, "Delegate는 Interface의 일종이다"라고 단언하기는 어렵지만, **"Delegate는 Interface의 일부 역할(단일 메서드 호출)을 간단하게 구현한 도구"**라고 볼 수 있습니다. ---------- 왜 견해차가 생기는지 gpt가 명확하게 짚어주네. 끝.