인터페이스와 함수 포인터

노트 유형: Cloze

Text

C에서 인터페이스와 유사한 개념은 {{c1::함수 포인터}} — 둘 다 {{c2::함수 시그니처}}만 전달하고, 실제 어떤 구현이 호출될지는 실행 중에 결정됨(다형성)

  • 개체를 통째로 넘기면 불필요한 {{c3::상태·다른 메서드}}까지 전달됨 → 이를 모두 제거하고 추상 메서드만 남긴 순수 추상 클래스가 인터페이스 (함수 포인터 전달 흉내)
  • 추상 메서드를 여러 개 두면 {{c4::함수 포인터 여러 개}}를 전달하는 것과 동일한 개념

Back Extra

  • 여기서 “함수 시그니처”는 C 함수 포인터 기준: 반환형·매개변수 목록 — 함수 이름은 무관, 모양만 맞으면 어떤 함수든 대입해서 전달 가능
  • 구분: Java 컴파일러가 중복 정의·오버로딩을 판정하는 메서드 시그니처는 이름·매개변수 목록 (반환형 제외 — 반환형만 다르면 중복 정의 오류). @Override의 판정 기준은 이름·매개변수 목록·반환형
  • 함수 블랙박스도 인터페이스와 유사한 개념 — 함수 시그니처가 곧 인터페이스, 함수 내부 공간은 구현자의 공간
  • Monster 예: 매개변수로 어떤 개체가 들어오느냐에 따라 calculateDamage()의 구현이 결정됨 — 개체 대신 함수 포인터를 전달하면? 이 질문이 인터페이스로 이어짐

출처: https://pocu-site.pages.dev/pocu-note/COMP2500/010-interface/010-002-interface-and-function-pointer/