본문 바로가기
TIL

추상화 레벨이란? (22.09.09 TIL)

by winteringg 2022. 9. 9.

 먼저 추상화란 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화시키는 작업이다. 불필요하고 너무 구체적인 세부사항이나 흔한 공통사항 등을 제거한다. 단순화, 간추리기, 일반화, 개념화 등으로 대체해볼 수 있다. 좋은 추상화는 복잡성을 줄이고 개발자가 더 쉽고 적은 버그로 코드를 변경할 수 있도록 해준다.

 예를 들어, '다른 사람에게 인사하기' 라는 메서드가 있다고 하면, 이 추상화를 구현하는 방법은 여러 가지가 있을 수 있다. 문자로 '안녕하세요' 라고 보낸다거나, '좋은 아침입니다' 라고 전화를 한다거나, 손편지를 쓰는 등의 방식이다. 내부 방식이 어떻든 이 방식들의 핵심만 뽑아본다면 '다른 사람에게 인사하기' 인 것이다.

세부적인 내용들이 나열되어 있는 코드를 일일이 한 줄 한 줄씩 다 읽는 것은 생산성이 떨어진다. 추상화를 하기 위해서는 구체적인 방법 (how) 를 숨기고, 먼저 무엇을 하는 것인지 (what) 를 보여줄 수 있는 코드를 작성하는 연습을 해야한다. 

 그럼 추상화 레벨은 무엇일까? 한 줄로 정의해보자면 추상화 레벨은 시스템을 보거나 프로그래밍 하는 데 사용되는 복잡성의 정도이다. 레벨이 높을 수록 디테일이 떨어진다. 레벨이 낮을 수록 더 자세한 정보를 제공한다. 가장 높은 추상화 레벨은 전체 시스템이고, 그 다음 수준의 추상화는 각각의 구성 요소가 될 것이다. 그리고 가장 낮은 수준의 추상화는 수백만 개의 개체일 것이다. 클린코드 라는 책에서는 다음과 같이 나와 있다.

지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 어쨌거나 우리가 함수를 만드는 이유는 큰 개념을(다시 말해, 함수 이름을) 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서가 아니던가. - CleanCode

 영어 원문으로는 "one level of abstraction per function" 이라고 표현한다. 여기서 function (함수) 은 abstraction of computation 이다. 사용자가 진짜로 하고 싶은 요구사항의 추상화가 function 이고, 이 function 을 실제로 구현해서 컴퓨터에게 시킬 수 있도록 만든 것이 computation 이다. 

 어떤 함수들은 추상화를 한 번만 해도 되는 computation 이 있는가 하면, 여러 번에 걸쳐서 추상화 작업을 해야하는 computation 도 존재한다. 이렇게 추상화 작업을 해야 하는 횟수를 추상화 레벨 (level of abstraction) 이라고 부른다. 만약 level 이 여러개이면 추상화 작업을 한 번에서 끝내는 것이 아니라 여러 번 해야 하고, 더 많은 인적 비용이 들 것이다. 그렇기 때문에 CleanCode 에서도 "지정된 함수 이름 아래에서는 추상화 수준이 딱 하나" 이어야 한다고 주장하는 것이다.

 메서드문의 모든 구문은 동일한 추상화 레벨에 속해야 한다. 더 낮은 추상화 레벨에 속하는 구문이 있으면 이 구문이 포함된 다른 메서드로 다시 이동시켜야 한다.

 

출처 :

 

Levels of Abstraction, A Key Concept in Systems Design

Working with complex systems means creating different interpretations of reality.

medium.com

 

Single Level of Abstraction (SLA) [Principles Wiki]

 

principles-wiki.net

 

댓글