인다이렉션
Indirection컴퓨터 프로그래밍에서 간접(비참조라고도 함)은 값 자체 대신 이름, 참조 또는 컨테이너를 사용하여 무언가를 참조하는 기능입니다.간접의 가장 일반적인 형태는 메모리주소를 통해 값을 조작하는 행위입니다.예를 들어 포인터를 사용하여 변수에 액세스하는 것입니다.이중 간접으로 객체에 대한 참조를 제공하기 위해 존재하는 저장된 포인터를 간접 노드라고 합니다.일부 오래된 컴퓨터 아키텍처에서는 간접어가 다소 복잡한 다양한 어드레싱 모드를 지원했습니다.
또 다른 중요한 예는 다음과 같은 이름을 가능하게 하는 도메인 이름 시스템입니다.en.wikipedia.org
다음과 같은 네트워크 주소 대신 사용됩니다.208.80.154.224
. 사람이 읽을 수 있는 이름에서 네트워크 주소로 간접적으로 이동하는 것은 웹 페이지에 대한 참조가 더욱 기억에 남는다는 것을 의미하며, 웹 사이트를 다른 서버로 재배치할 때 링크를 변경할 필요가 없습니다.
개요
Butler Lampson의 유명한 격언은 "컴퓨터 과학의 모든 문제는 다른 수준의 간접적인 방법으로 해결할 수 있다" ("소프트웨어 공학의 기본 정리")[1]입니다.이는 종종 의도적으로 "간접 수준" 대신 "추상 계층"으로 잘못 인용됩니다.이에 따라 자주 인용되는 것은 "...간접 레이어가 너무 많다는 문제를 제외하면"입니다.
유머러스한 인터넷 메모지 RFC1925에서는 다음과 같이 규정하고 있습니다.
(6) 문제를 해결하는 것보다 문제를 이동하는 것이 (예를 들어 네트워크 아키텍처 전체의 다른 부분으로 이동하는 등) 쉽습니다.
- (6a)(결과).언제든지 다른 수준의 간접을 추가할 수 있습니다.
오브젝트 지향 프로그래밍에서는 다이렉션을 광범위하게 사용합니다.단순한 예로는 다이내믹 디스패치가 있습니다.간접의 보다 높은 수준의 예는 프록시 및 프록시 서버의 설계 패턴입니다.위임은 간접 패턴의 또 다른 전형적인 예입니다.동적 데이터형을 사용하는 강력한 유형의 인터프리터 언어에서는 대부분의 변수 참조는 간접적인 수준을 필요로 합니다. 먼저 변수 유형이 안전한지 확인한 다음 실제 값에 대한 포인터가 참조되지 않고 처리됩니다.
재귀 데이터 유형은 일반적으로 간접을 사용하여 구현됩니다. 그렇지 않으면 데이터 유형의 값이 동일한 데이터 유형의 다른 값 전체를 포함할 수 있는 경우 이 데이터 유형의 값에 필요한 크기에는 제한이 없습니다.
형식적인 수학적 사양에서 심볼 프로그래밍을 수행할 때, 간접의 사용은 매우 유용할 수 있습니다.간단한 예부터 시작하자면, z + 2 (\ z})와 방정식의 변수 x, y 및 z는 다음과 같습니다. 임의의 숫자를 참조할 수 있습니다.사람들은 다양한 숫자에 대한 물체를 상상할 수 있고, 그러면 x, y, z는 특정 문제에 사용되는 특정 숫자를 가리킬 수 있다.단순한 예로는 실수가 무한히 많기 때문에 한계가 있다.심볼 프로그래밍의 다양한 다른 부분에서는 심볼이 매우 많습니다.그래서 더 중요한 예로 넘어가기 위해 논리적으로 공식 α는 어떤 공식이든 참조할 수 있다. 따라서 β, β, β, β, β, β, β, ... 또는 β→가 될 수 있다, β, β, β, α, ...가 될 수 있다.집합-수식 표기법을 사용할 때, 문장 δ={α}는 모든 공식의 집합을 의미한다. 따라서 α에 대한 참조가 있지만 여기에는 첫 번째 α 집합과 두 번째 δ 집합에서 α의 각 발생에 대한 특정 공식에 대한 두 가지 간접 수준이 있다.
「 」를 참조해 주세요.
레퍼런스
- ^ Spinellis, Diomidis (2007). "Another level of indirection". In Oram, Andy; Wilson, Greg (eds.). Beautiful Code: Leading Programmers Explain How They Think. Sebastopol, California: O'Reilly and Associates. pp. 279–291.