추상화 반전
Abstraction inversion![]() |
컴퓨터 프로그래밍에서 추상화 반전(Abstraction inversion)은 구조 사용자가 구현된 함수를 필요로 하지만 인터페이스에 노출되지 않을 때 발생하는 반패턴입니다.그 결과, 사용자는 인터페이스의 관점에서 필요한 기능을 재실장하고, 이는 다시 동일한 기능의 내부 구현을 사용한다.이로 인해 상위 수준의 특징과 관련하여 하위 수준의 특징을 구현할 수 있으며, 따라서 '추상 반전'이라는 용어를 사용할 수 있습니다.
생각할 수 있는 부작용은 다음과 같습니다.
- 이러한 재실장된 기능의 사용자는 실행 비용을 심각하게 과소평가할 수 있습니다.
- 구성 사용자는 복잡한 기계적 세부 사항으로 구현 방식을 모호하게 해야 합니다.
- 많은 사용자가 동일한 문제를 해결하려고 시도하여 오류 위험을 높입니다.
예
프로프로그래밍계에서는 다음과 같은 예를 들 수 있습니다.
- 에이다에서는, 동기 프리미티브로서의 랑데부 구조의 선택은 프로그래머들이 보다 복잡한 [1]기반에서 세마포어와 같은 단순한 구조를 구현하도록 강요했다.
- Applesoft BASIC에서는 부동소수점 산술 위에 정수 산술이 구현되어 있으며 비트 연산자도 없고 래스터 그래픽스 블릿도 지원되지 않습니다(이 언어가 Apple II의 래스터 하드웨어에서 벡터 그래픽스를 지원함에도 불구하고).이로 인해 BASIC으로 작성된 게임 및 기타 프로그램의 실행 속도가 느려졌습니다.
- Applesoft BASIC과 마찬가지로 Lua는 데스크톱 [3]컴퓨터용으로 구성할 때 부동소수점 타입을 유일한 수치[2] 타입으로 가지고 있으며 Lua 5.[4]2 이전에는 비트 연산자가 없었습니다.
- 함수를 나타내는 오브젝트를 작성하는 것은 Java 및 C++(특히 C++11 및 Java 8 이전)와 같은 오브젝트 지향 언어에서는 번거롭습니다.이 언어에서는 함수는 퍼스트 클래스 오브젝트가 아닙니다.C++ 에서는, 오버로드 하는 것에 의해서, 오브젝트를 「콜 가능」하게 할 수 있습니다.
()
연산자, 그러나 STL의 펑터와 같은 새로운 클래스를 구현해야 하는 경우가 많습니다.(C++11의 람다 함수는 함수를 나타내는 객체를 훨씬 쉽게 만들 수 있습니다.) - Tom Lord는 Subversion 버전 제어 시스템이 성능이 [5]낮은 읽기/쓰기 데이터베이스에 쓰기 전용 데이터베이스를 구현하는 추상화 반전에 대한 비용을 지불할 것을 제안했습니다.
- 프로그래머에게 이러한 프로시저를 전개할 권리를 부여하지 않고 스토어드 프로시저를 사용하여 관계형 데이터베이스의 데이터를 조작하면 데이터베이스 외부에서 쿼리를 다시 구현할 수 있습니다.예를 들어 대규모 데이터셋(극단적인 경우 전체 테이블)을 가져오고 실제 필터링은 애플리케이션 코드에서 수행됩니다.또는 여러 행 쿼리를 실행하는 대신 수천 개의 행이 하나씩 업데이트(삽입 또는 가져오기)됩니다.
프로프로그래밍계 이외에서 흔히 볼 수 있는 예는 다음과 같습니다.
- 스프레드시트 조회 기능을 사용하여 데이터베이스 기능 복제
- 정수형도 사용할 수 있는 Microsoft Visual Basic에서 다양한 데이터 유형을 루프 카운터로 사용합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ DIN Kernel Lisp Definition Version 1.2, 각주 2 Archived 2018-05-06 - (참조 없이) 이 용어는 Ada 랑데부 비판에서 유래한 것으로 보여집니다.
- ^ Lua에서의 프로그래밍 : 2.3 - 2009-10-12 에 액세스 된 번호.
- ^ lua-users c2: 부동소수점 접근2009-10-12 。
- ^ lua-users c2: 2013-01-15에 접속된 비트 연산자.
- ^ sourcefrog : Tom Lord on Subversion
외부 링크
- Portland Pattern Repository의 추상화 반전 - 광범위한 논의, 그 대부분은 "복잡화"라는 의미에서 "추상화 반전"을 필요로 합니다.