인터페이스 담론과 변화 대비 (011-009~015)

서술 개념(“program to an interface”의 의미·인터페이스의 개념적 정의·변화 대비 기준)은 ANKI 참고: 29-program to an interface의 올바른 의미 이후 카드들

다음 각 명제의 O/X는? (011-015 복습 퀴즈 유형)

  1. 함수 매개변수의 자료형으로 인터페이스를 사용하면, 그 함수 내에서 호출하는 매개변수의 메서드를 좀 더 명확하게 특정할 수 있다

  2. 인터페이스를 사용하면 가독성이 떨어진다

  3. 인터페이스를 사용하면 여러 부모로부터 함수 구현을 상속받을 수 있다

  4. O — 클래스를 사용하면 상태(멤버 변수)도 포함되지만, 인터페이스는 순수 추상 클래스라 동작의 시그니처만 전달됨 → 함수 안에서 호출할 수 있는 메서드가 명확히 특정됨

  5. O — 구체적이지 않아 직관적이지 못함 (디커플링 단점 1). 어떤 구체 개체가 쓰이는지 일일이 확인해야 함

  6. X — 인터페이스 다중 구현은 시그니처 묶음을 여러 개 받는 것일 뿐, 구현(실체)은 상속받지 못함 — 구현은 언제나 구현 클래스에서 하나로 작성 (다중 상속 흉내의 비용)

  • 근거: 변화에 대비해야 하는가?의 복습 퀴즈 (“interface의 장단점 설명 중 올바르지 않은 것은?” — 정답: “interface는 가독성을 높인다”)

다음 각 명제의 O/X는? (모든 건 인터페이스여야 하는가)

  1. 미래의 변화에 대비해 모든 클래스를 인터페이스로 만드는 것이 좋다

  2. “program to an interface, not an implementation”에서 interface는 Java의 interface 키워드를 의미한다

  3. 변화에 대한 대비가 필요한지는 “내가 쉽게 바꿀 수 있는가”로 판단한다

  4. X — 다형적이지도 않은 인터페이스가 양산됨. 인터페이스는 다형성이 필요할 때 만드는 것. 근거: 추상화·indirection은 인간에게 그냥 어려워서 추상화가 적을수록 실수가 적음 (협업에서는 만드는 시간보다 실수 고치는 시간이 더 큼)

  5. X — 여기서 interface는 부모 클래스의 다형적 메서드를 의미 (GoF 책의 곡해된 문구). Java의 interface로 받아들이면 다형성이 빠진 잘못된 해석

  6. O — 시스템이 크지 않거나, 외부 클라이언트가 적거나, 여러 버전을 기간 한정 지원할 수 있으면 크게 대비할 필요 없음. 쉽게 바꿀 수 없는 경우에만 인터페이스로 대비

0건의 항목