추상화 계층과 간접 수준은 서로 다른 개념입니다. 추상화는 데이터 또는 프로그램 명령과 같은 여러 요소 (예 : 파일 또는 메소드 호출의 개념)의 집계 및 의미있는 이름 지정이며, 간접 성은 관계의 실현 실현 연기를 용이하게하기 위해 엔티티의 분리입니다. 예를 들어, 애플리케이션 컨테이너에 의해 제공 될 수있는 실제 리소스로부터 프로그램 내의 리소스의 식별을 분리하기 위해 JNDI를 사용하는 것.
종종 개념이 함께 진행되고 특정 구성에 적용되는 개념은 진행중인 운동이나 토론에 따라 다릅니다. 예를 들어, API를 배우거나 문서화 할 때 인터페이스의 추상적 특성이 중요합니다. 응용 프로그램에 확장 성을 추가하거나 테스트를 만들 때 간접 속성은 중요합니다.
추상화 계층은 추상화를 통합하여 개념 무결성과 사용 일관성을 제공하는 것입니다. CreateProcess는 프로세스를 빌드하고 실행하는 많은 코드의 win32 API 이름입니다. "이름"은 DoAllocMemThenMakeEnvThenFindEntryPoint와 같은 함수를 호출하면 실제로 매우 추상적이지 않기 때문에이 컨텍스트에서 중요합니다. Win32 API와 같은 계층은 프로그래머가 벤처하지 말 것을 권고 할 수있는 장벽을 제공합니다. 전력 소비 감소 (유연성, 성능 등)로 호출자의 관점에서 복잡성을 제거합니다. 이 절충은 누출 추상화에 대한 빈번한 논의로 강조됩니다. Hibernate를 사용할 때 직접 SQL 호출을 수행하거나 .NET을 사용할 때 Win32 호출을 수행해야 할 수도 있습니다.
간접적으로, 사소하지 않은 대부분의 프로그램은 어떤 형태의 사용자 코딩 간접적으로 작동하며, 방주 앞의 COBOL의 INPUT-OUTPUT 섹션을 목격하십시오. 데이터베이스와 같은 리소스에 액세스 할 때 코드에 JDBC 연결 문자열이 레벨 0 간접, JNDI 연결 (자원 선택을 애플리케이션 컨테이너에 위임하는) 및 레벨 1로 맵핑되는 일부 스프링 구성이 임베드되는 것을 볼 수 있습니다. 다중 레벨은 많은 외부 관계 (이 경우 코드 실행과 데이터베이스 간의 관계)가 관계를 조작 할 수 있도록합니다. 이는 인터페이스 및 이벤트와 같은 내부 프로그램 구성 요소에 동일하게 적용됩니다.
우리는 다른 특성이 무엇이든 추상화는 복잡성을 줄이고 간접 성은 증가 시킨다는 것을 알 수 있습니다. 추상화는 전력을 감소시키는 반면 간접은 전력을 증가시킵니다. 사용자 지정 콜백으로 기본 동작을 재정의함으로써 간접 기능을 사용하여 추상화의 힘을 복원 할 수 있습니다.