누출형 추상화

Leaky abstraction

소프트웨어 개발에서 유출된 추상화는 추상화되어야 할 세부사항을 누설하는 추상화다.[1]

조엘 스폴스키(Joel Spolsky)에 의해 만들어진 것처럼, Leaky 추상화의 법칙은 다음과 같이 말한다.[2]

어느 정도는 비종교적 추상화는 모두 새어 나온다.

이 진술은 소프트웨어 결함의 특히 문제적인 원인을 강조한다. 즉 소프트웨어 개발자가 추상화의 무불확실성에 의존하는 것이다.

스폴스키의 기사는 대부분의 경우 효과가 있지만, 근본적인 복잡성의 세부사항을 무시할 수 없는 추상화의 예를 제시하며, 따라서 추상화에서 다시 추상화를 사용하는 소프트웨어로 복잡성을 누출시킨다.

역사

조엘 스폴스키(Joel Spolsky)는 2002년 'leaky 추상화'라는 용어를 유행시켰다.[2][3]Kiczales의 앞선 논문은 불완전한 추상적 개념의 일부 문제를 설명하고 추상화 자체의 맞춤화를 허용함으로써 문제에 대한 잠재적인 해결책을 제시한다.[4]

소프트웨어 개발에 미치는 영향

시스템이 복잡해지면서 소프트웨어 개발자들은 더 많은 추상화에 의존해야 한다.각 추상화는 개발자가 현대 컴퓨팅의 많은 변형을 "처리"하는 소프트웨어를 만들도록 하여 복잡성을 숨기려고 한다.

그러나, 이 법은 신뢰할 수 있는 소프트웨어의 개발자들은 어쨌든 추상화의 기본 세부사항을 배워야 한다고 주장한다.

스폴스키의 기사는 소프트웨어 개발에 문제를 일으키는 누출성 추상화의 많은 예를 인용하고 있다.

  • TCP/IP 프로토콜 스택은 '베스트 에포트' 서비스만 제공하는 IP 위에서 실행되는 신뢰할 수 있는 정보 전달을 시도하는 TCP의 조합이다.IP가 손실되면 패킷 TCP는 패킷을 재전송해야 하므로 시간이 더 걸린다.그러므로 TCP는 신뢰할 수 있는 연결의 추상화를 제공하지만, 구현 세부사항은 잠재적으로 가변적인 성능의 형태로 누설된다(투입과 지연 모두 데이터를 재전송해야 할 때 어려움을 겪는다).
  • 큰 2차원 배열 위에 반복하는 것은 요소들이 메모리에 저장되는 순서에 따라 수직이 아닌 수평으로 수행된다면 근본적으로 다른 성능을 가질 수 있다.한 방향은 캐시 누락페이지 결함을 크게 증가시킬 수 있으며, 이 두 방향 모두 메모리에 대한 접근을 크게 지연시킨다.
  • SQL 언어는 데이터베이스 조회를 위한 절차 단계를 추상화하여 원하는 것을 정의하기만 하면 된다.그러나 특정 SQL 쿼리는 다른 논리적으로 동등한 쿼리보다 수천 배 느리다.훨씬 더 높은 수준의 추상화, ORM 시스템에서 관계형 데이터베이스를 사용하는 객체지향 코드를 개체지속성의 구현으로부터 분리하는 ORM 시스템은 ORM이 생성한 질의의 성능이 문제가 되는 즉시 프로그래머가 데이터베이스, 테이블, 네이티브 SQL 질의 등의 관점에서 생각하게 한다.
  • NFSSMB와 같은 네트워크 파일 시스템은 원격 컴퓨터의 파일을 로컬인 것처럼 취급하도록 허용하지만, 원격 컴퓨터에 대한 연결이 느려지거나 끊어질 수 있으며 파일이 로컬인 것처럼 작동을 중지한다.
  • ASP.ASP와 혼동하지 않도록 NET 웹 양식 프로그래밍 플랫폼.NET MVC는 HTML 코드에서 하이퍼링크 클릭(<a>)을 처리하는 것과 버튼 클릭을 처리하는 코드 사이의 차이를 추상화한다.하지만 ASP.NET는 HTML에서는 하이퍼링크에서 양식을 제출할 방법이 없다는 사실을 숨길 필요가 있다.이것은 JavaScript의 몇 줄을 생성하고 하이퍼링크에 온클릭 핸들러를 연결함으로써 이것을 한다.그러나 최종 사용자가 JavaScript를 사용할 수 없는 경우 ASP.NET 애플리케이션 오작동.더욱이 ASP의 이벤트 핸들러를 순진하게 생각할 수는 없다.Windows Forms와 같은 데스크톱 GUI 프레임워크에서와 같은 방식으로 NET; 웹의 비동기적 특성 때문에 ASP에서 이벤트 핸들러를 처리한다.NET은 서버와 데이터를 교환하고 양식을 다시 로드해야 한다.

Git의 인터페이스는 이 글에서 설명한 것처럼 누출되는 추상화의 또 다른 예다.[5]

참고 항목

참조

  1. ^ Seibel, Peter (1 November 2006). Practical Common Lisp. Apress. p. 96. ISBN 978-1-4302-0017-8.
  2. ^ a b Spolsky, Joel (2002). "The Law of Leaky Abstractions". Retrieved 2010-09-22.
  3. ^ arvindpdmn (2019-08-23). "Leaky Abstractions". Devopedia. Retrieved 2020-07-07.
  4. ^ Kiczales, Gregor (1992). "Towards a New Model of Abstraction in the Engineering of Software" (PDF). Archived from the original (PDF) on 2011-06-04. Retrieved 2010-02-03.
  5. ^ "Version Control (Git)". the missing semester of your cs education. Retrieved 2020-07-31.