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