인터페이스 담론과 변화 대비 (011-009~015)
서술 개념(“program to an interface”의 의미·인터페이스의 개념적 정의·변화 대비 기준)은 ANKI 참고: 29-program to an interface의 올바른 의미 이후 카드들
다음 각 명제의 O/X는? (011-015 복습 퀴즈 유형)
-
함수 매개변수의 자료형으로 인터페이스를 사용하면, 그 함수 내에서 호출하는 매개변수의 메서드를 좀 더 명확하게 특정할 수 있다
-
인터페이스를 사용하면 가독성이 떨어진다
-
인터페이스를 사용하면 여러 부모로부터 함수 구현을 상속받을 수 있다
-
O — 클래스를 사용하면 상태(멤버 변수)도 포함되지만, 인터페이스는 순수 추상 클래스라 동작의 시그니처만 전달됨 → 함수 안에서 호출할 수 있는 메서드가 명확히 특정됨
-
O — 구체적이지 않아 직관적이지 못함 (디커플링 단점 1). 어떤 구체 개체가 쓰이는지 일일이 확인해야 함
-
X — 인터페이스 다중 구현은 시그니처 묶음을 여러 개 받는 것일 뿐, 구현(실체)은 상속받지 못함 — 구현은 언제나 구현 클래스에서 하나로 작성 (다중 상속 흉내의 비용)
- 근거: 변화에 대비해야 하는가?의 복습 퀴즈 (“interface의 장단점 설명 중 올바르지 않은 것은?” — 정답: “interface는 가독성을 높인다”)
다음 각 명제의 O/X는? (모든 건 인터페이스여야 하는가)
-
미래의 변화에 대비해 모든 클래스를 인터페이스로 만드는 것이 좋다
-
“program to an interface, not an implementation”에서 interface는 Java의
interface키워드를 의미한다 -
변화에 대한 대비가 필요한지는 “내가 쉽게 바꿀 수 있는가”로 판단한다
-
X — 다형적이지도 않은 인터페이스가 양산됨. 인터페이스는 다형성이 필요할 때 만드는 것. 근거: 추상화·indirection은 인간에게 그냥 어려워서 추상화가 적을수록 실수가 적음 (협업에서는 만드는 시간보다 실수 고치는 시간이 더 큼)
-
X — 여기서 interface는 부모 클래스의 다형적 메서드를 의미 (GoF 책의 곡해된 문구). Java의
interface로 받아들이면 다형성이 빠진 잘못된 해석 -
O — 시스템이 크지 않거나, 외부 클라이언트가 적거나, 여러 버전을 기간 한정 지원할 수 있으면 크게 대비할 필요 없음. 쉽게 바꿀 수 없는 경우에만 인터페이스로 대비