템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터

Bogoomi·2022년 7월 17일
0

EffectiveC++

목록 보기
22/24

항목41 - 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터



요약
객체지향 프로그래밍의 중심이 되는 두가지
1. 명시적 인터페이스
2. 런타임 다형성

명시적 인터페이스는 대개 함수 시그너처로 이루어져 있다.
함수 시그너처는 함수의 이름, 매개변수 타입, 반환 타입 등을 통들어 말한다.(데이터 멤버는 포함하지 않는다).
이와 다르게 암시적 인터페이스는 함수 시그너처에 기반하지 않는다!
암시적 인터페이스를 이루는 요소는 '유효 표현식' 이다.
템플릿함수는 인스턴스화를 진행할때 어떤 템플릿 매개변수가 들어가는냐에 따라 호출되는 함수가 달라진다.

클래스에서 제공하는 명시적 인터페이스와 호환되지 않는 방법으로 그 클래스의 객체를 쓸 수 없듯이,
어떤 템플릿 안에서 어떤 객체를 쓰려고 할 때 그 템플릿에서 요구하는 암시적 인터페이스를 그 객체가
지원하지 않으면(해당 함수에 유효하지 않다면) 컴파일이 되지 않는다!




잊지말자!

  • 클래스 및 템플릿은 모두 인터페이스와 다형성을 지원한다.

  • 클래스의 경우, 명시적 인터페이스. 함수 시그너처를 중심으로 구성.
    다형성은 프로그램 실행 중에 가상함수를 통해 나타남.

  • 템플릿 매개변수의 경우, 암시적 인터페이스. 유효 표현식에 기반을 두어 구성.
    다형성은 컴파일 중에 템플릿 인스턴스화와 함수 오버로딩 모호성 해결을 통해 나타남.

profile
개에에에바알

0개의 댓글