ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • abstraction(추상화)
    프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 13:36

    # 정의
    > wekipedia 정의
    추상화
    (abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

    > 해석
    추상화란 `구체적인 것에서 핵심을 찾아내는 것`라고 정의할 수 있다
    `구체적인 것`과 `핵심`은 무엇일까?

    `구체적인 것`이라는 것은 상대적인 것이며 상황에 따라 다르다.
    `A문서를 a4 용지에 좌우 여백은 10으로 하고 상하 여백은 20으로 해서 출력하라` 라는 문장이 있다고 하자. 위 문장에서 핵심은 무엇일까?
    "A문서를 출력하라" 가 위 문장에서 어떻게 하는지는 숨기고 핵심만 뽑아낸 것이다. 무언가 핵심적인 것만 추려낸 느낌이다. "A문서를 출력하라"에서 더 핵심을 뽑아내기란 어려워 보인다.
    `A문서를 a4 용지에 좌우 여백은 10으로 하고 상하 여백은 20으로 해서 hp 프린터를 이용해 출력하라` 로 구체적인 것이 한 단계 더 숨겨져 있던 것일 수도 있다.

    추상화에서 `핵심`이란 어떻게(how) 하는지를 숨기고 무엇(what)을 하는지로 나타난다. 

    프로그래밍에서 가장 익숙한 추상화는 `1+1` 이 있다. 1+1은 사실 메모리 수준에서 bit 단위 연산을 해서 나온 결과의 값이다. bit 단위 연산을 어떻게 하는지도 있기 때문에 더 들어가면 이런 구체적인 것들까지 알아야만 1+1을 할 수 있다.
    우리의 멘탈 모델 중 수학에서의 `1과 1을 더한다` 라는 것이 어떻게 되는지 실제적으로 되는지는 숨기고 무엇을 하는지에 집중하게끔 프로그램 언어가 높은 수준의 추상화 수준을 지원하는 것이다. 
    우리는 높은 수준의 추상화 수준을 제공하는 시대에 살고 있다. 

    프로그램을 보던 중 다음과 같은 코드를 보면 이 코드가 무엇을 하는 코드인지 알 수 있을까? (python 코드)

    n = 10
    k = n - 1
    for i in range(0, n):
        for j in range(0, k):
            print(end=" ")
        k = k - 1
        for j in range(0, i+1):        
            print("* ", end="")
        print("\r")

    이 코드가 `무엇(what)`을 하는지 알려면 코드를 한줄 한줄 들여다 보아야한다. 심지어 변수명도 i, n, k 등으로 의미를 알 수 없어 더욱 파악하기 어렵다.
    https://www.online-python.com/ 같은 곳에서 코드를 실행해봐야만 어떤 코드인지 이해할 수 있다. 

    코드가 what을 나타내지 않는 경우에는 추상화 수준을 높여주는 작업이 필요하다 
    위 예시 코드는 삼각형 모양을 출력해주는 함수이다. 따라서 `삼각형을 출력한다` 라는 의미로 함수를 선언하면 코드를 읽는 사람이 삼각형을 출력하는지 한 눈에 알 수 있다.

    def printTriangle(n):
        k = n - 1
     
        for i in range(0, n):
            for j in range(0, k):
                print(end=" ")
        
            k = k - 1
            for j in range(0, i+1):
                print("* ", end="")
            print("\r")
     
    n = 10
    printTriangle(n)


    # 활용
    프로그래밍 과정에서 어떤 부분에서 무엇(what)을 파악하기 어렵다면 추상화를 통해 how는 숨기고 핵심만 뽑아내는 작업을 해볼 수 있다.

     

    댓글

Designed by Tistory.