이론

덕 타이핑

월러비 2024. 4. 15. 18:24

덕 타이핑 이란?

  • 덕 타이핑은 동적 타이핑의 한 종류로, 객체의 변수 및 메소드의 집합이 객체의 타입을 결정하는 것을 말한다.
  • 클래스 상속이나 인터페이스 구현으로 타입을 구분하는 대신, 덕 타이핑은 객체가 어떤 타입에 걸맞은 변수와 메소드를 지니면 객체를 해당 타입에 속하는 것으로 간주한다.

덕 타이핑 특징

  • 덕 타이핑에서는, 객체의 타입보다 객체가 사용되는 양상이 더 중요하다.
    • 덕 타이핑이 없는 프로그래밍 언어로는 오리 타입의 객체를 인자로 받아 객체의 걷기 메소드와 꽥꽥거리기 메소드를 차례로 호출하는 함수를 만들 수 있다.
    • 반면에, 같은 함수를 덕 타이핑이 지원되는 언어에서는 인자로 받는 객체의 타입을 검사하지 않도록 만들 수 있다.
    • 걷기 메소드나 꽥꽥거리기 메소드를 호출 할 시점에서 객체에 두 메소드가 없다면 런타임 에러가 발생하고, 두 메소드가 제대로 구현되어 있다면 함수는 정상적으로 작동한다.
    • 여기에는 인자로 받은 객체가 걷기 메소드와 꽥꽥거리기 메소드를 갖고 있다면 객체를 오리 타입으로 간주하겠다는 암시가 깔려있다.
      • 바로 이 점이 앞에서 인용한 덕 테스트의 사상과 일치하기 때문에 덕 타이핑이라는 이름이 붙었다

덕 타이핑 예시

List<string> names = new List<string>()
{
    "안씨", "이씨", "박씨"
};
Print(names);
IEnumerable<string> name2 = names; //가능 //foreach에 들어간다는 전제 하에 이렇게 리스트나 배열을 가져와 쓸 수 있다.

Dictionary<string, Color> colorMap = new Dictionary<string, Color>()
{
    ["Error"] = Color.red,
    ["Warning"] = Color.yellow,
    ["Information"] = Color.white,
    ["Vrbose"] = Color.green,
}; //앞에가 키(string)고 뒤에가 value(Color) 다.
Print(colorMap);
IEnumerable<KeyValuePair<string, Color>> colorMap2 = colorMap; //foreach에 들어간다는 전제 하에 이렇게 리스트나 배열을 가져와 쓸 수 있다.

덕 타이핑 사용 이유

  • 덕 타이핑은 추상화와 상속으로 생성된 파생 클래스의 수정에 문제가 발생했을 때 좀 더 유연하게 해결할 수 있도록 돕는다.
    • 상속 관계를 이용하지 않기 때문에 프로그램 동작에 관여하는 부분만 수정하면 되기 떄문이다.

'이론' 카테고리의 다른 글

3 Way Handshake  (0) 2024.04.17
지연된 함수  (0) 2024.04.17
CPU ALU  (0) 2024.04.13
캐시 메모리  (0) 2024.04.13
CPU 레지스터  (0) 2024.04.09