동적 바인딩이란 무엇입니까?
컴퓨터 과학에서 이름 바인딩은 함수 또는 변수 이름과 같은 식별자와 코드 또는 데이터 섹션과 연관됩니다. 가장 일반적인 시나리오에서 정적 바인딩 에서이 매핑은 컴파일 시간에 알려져 있습니다. 동적 바인딩에서, 함수에 의해 맵핑 된 물체는 컴파일 시간에 알려지지 않으며 프로그램 실행 시간 동안 만 결정될 수있다. 이러한 이유로, 동적 결합을 늦은 바인딩이라고도합니다. 동적 바인딩은 정적 결합으로 유연성을 제공하지 않지만 정적 결합보다 성능 비용이 더 많습니다.
동적 결합은 객체 지향 프로그래밍의 일부인 다형성과 밀접한 관련이 있습니다. 다형성은 동일한 방법 이름을 다른 방식으로 구현할 수 있도록합니다. 컴파일 시간에 정확한 방법을 결정할 수없는 방식으로 코드가 기록되지 않으면 동적 바인딩을 사용해야합니다.
예를 들어"모양"클래SS는 모든 모양이 영역을 가지고 있기 때문에 "getarea"라는 방법을 가질 수 있습니다. 그러나 "형상"의 "원"서브 클래스는 "정사각형"서브 클래스의 방식과 다르게 "getarea"를 구현할 것입니다. 따라서 새 객체가 유형 "모양"으로 생성되고 코드가 해당 모양에서 메소드를 "getArea"라고 호출하면 컴파일러는 모양이 원인지 사각형인지 여부를 알 수있는 방법이 없으므로 어떤 getArea 방법을 호출할지 알 수 없습니다. 올바른 getarea 방법은 런타임에만 맵핑되기 때문에 동적 바인딩의 예입니다.
동적 바인딩을 사용하면 특정 구현이 사용될 특정 구현을 알지 못하고 추상 방법을 사용하는 유연성이 가능합니다. "모양"예에서, 코드는이 논리를 명시 적으로 사용하여 동적 바인딩을 피하기 위해 작성 될 수 있습니다. 그렇지 않으면, 모양이 정사각형 인 경우, 특정 getarea 메소드에 전화하십시오.사각형. 동적 바인딩의 이점은 코드가 대안보다 깨끗하고 유지 가능하다는 것입니다. 정적 바인딩 예제에는 코드 복제가 있으며 새로운 유형의 모양이 추가 될 때마다 코드를 업데이트해야합니다.
동적 바인딩의 단점은 성능과 안전입니다. 정적 바인딩에서 컴파일러는 어떤 코드를 호출 해야하는지 정확히 알고 코드를보다 효율적으로 실행할 수 있습니다. 동적 바인딩의 일부 구현에서 메소드를 지원하지 않는 객체에서 메소드를 호출 할 수 있기 때문에 유형 안전은 문제가 될 수 있습니다. 예를 들어, "getarea"메소드는 모양이 아닌 객체에서 호출 될 수 있으므로 "getarea"메소드가 없으므로 런타임 오류가 발생할 수 있습니다. 정적 바인딩은 컴파일 오류를 제기 하여이 시나리오를 방지합니다.