우리는 앞에서 OOP 4대 특성인 캡슐화, 상속, 다형성에 대해서 알아보았습니다.
이제는 마지막으로 남은 추상화에 대해서 알아보겠습니다.
추상화에 대한 우리의 첫인상은 ‘어렵다’, ‘난해하다’입니다.
그럴 수도 있는 것이 추상화라는 단어를 검색하면 바로 이런 형태의 그림들만 나오기 때문입니다.
이 그림을 보여주면서 ‘추상화란 무엇인가요?’라고 묻는다면 대답하기 굉장히 난해 할 것입니다.
이제 시작점으로 돌아와서…
추상화의 사전적 의미부터 알아보도록 하겠습니다.
추상화는 공통되는 특성을 추출하고 불필요한 것을 제거해 단순화하는 과정이라고 합니다.
이것을 왜 하는지에 대해 알아보기 전에 적합한 예를 한번 보고 가도록 하겠습니다.
왼쪽에 있는 지도를 추상화한 결과입니다.
바로 약도죠?
약도를 잘 살펴보면 주요 도로와 지하철 출구 번호, 그리고 특징이 될만한 건물들만 표기되고 나머지 정보는 모두 그림 속에서 지워버리죠. 이렇게 추상화는 공통되는(누구나 중요하다고 여기는) 특성들을 추출하고, 불필요한 정보를 제거하는 것입니다.
이번엔 반대로 생각해 볼까요?
만약 약도에서 주요 도로와 주변을 대표하는 건물, 그리고 지하철 주요 출구 등이 빠진다면 어떨까요?
아무리 단순화한다 하여도 약도를 보고 찾아오기 쉽지 않겠죠? 그래서 추상화는 없어서는 안 되는 필수 정보만 남겨 놓는다는 의미로도 해석할 수 있습니다.
꼭 있어야만 하는 정보, 꼭 지켜야만 하는 규칙.
이것을 우리는 표준, 규격 이라고도 표현합니다.
우리가 흔히 알고 있는 USB C 타입을 생각해 보겠습니다.
USB C 타입의 크기와 모양, 생김새 그 외 등등의 필요한 요건만 갖추고 있다면…
어느 회사에 어떤 폰이던지 충전이 가능합니다.
그래서 우리는 어떤 기기에서 어떤 규격을 사용하고 있는가에 대한 설명을 하곤 하죠?
우리가 공부할 프로그래밍에서도 다르지 않습니다.
추상화는 이렇게 ‘이것만은 꼭 만들어야 해’라고 규격을 만들기 위한 개념이고, 이 규격을 따르는 다른 코드들과 얼마든지 호환이 될 수 있게 됩니다.
이제 추상화에 대한 감이 좀 오나요?
추상화는 꼭 필요한 것만 남기고 단순화시키는 작업이라 하였습니다. 그래서 이것만은 있어야 한다는 표준을 만드는 작업이기도 하다고 했고요.
다음에는 이런 추상화의 개념을 실제로 적용해 주는 추상 클래스와 인터페이스에 대해서 배워보도록 하겠습니다.