FrontEnd
Javascript
Diary
ML
CS
Django
Algorithm
AWS
Co-Work
HTML
CSS
Python
React
ReactNative

ADT와 Encapsulation의 느낌

프로그래밍이란 알고리즘을 컴퓨터가 실행할수 있게 프로그래밍 언어로 작성하는 과정이다

알고리즘은 문제에 대해 필요한 data와 문제 해결까지의 프로세스를 말하는데 프로그래밍 언어는 이를 위해 데이터 유형과 제어 할 수 있는 구조를 제공한다

이러한 알고리즘을 공부하는 것은 프로그램이나 컴퓨터에 따라 달라지는 것이 아닌 특정 기준에 의거하여 문제 해결법을 비교하고 평가해볼 눈을 기르는 것을 말한다.

ADT

프로그래밍 언어는 기본적으로 low-level의 data type을 제공하는데(primitive type) 이는 알고리즘 구성의 기본이 된다.

하지만 이런 primitive data type은 우리의 복잡한 문제앞에서는 한계를 드러내기도 한다. 따라서 우리는 추상화(Abstract)라는 개념을 이용해 해결하고자 한다

ADT(Abstract data type)은 말그대로 추상적인 data type으로 data를 보는 방법이나 구현방법에 관계없이 드러나는 것을 말한다.

쉽게 말하면 휴대폰을 사용함에 있어 해당 기능이 어떻게 구현되고 만들어 졌는지는 관심이 없고 휴대폰의 기능이 어떤 일을 하고 어떻게 사용하는지에 관심을 가지는 것과 같다고 볼 수 있다.

즉 사용자는 추상적으로 만들어진 껍데기(interface)를 보고 사용하는 것이다.

이를 ADT라고 하고, ADT를 통해서 *캡슐화(encapsulation)를할수 있는데

우리는 캡슐화를 통해
  1. 객체의 property와 method를 하나로 묶을 수 있고
  2. 외부로부터 정보를 은닉할 수 있다.

ADT가 왜 좋은가??

위의 캡슐화말고도 ADT는 아래와 같은 이유에서도 이점이 있다.

자료구조를 구현하기 위해서는 primitive type의 data를 이용해 물리적(?) 구성이 되어야한다.

그리고 이렇게 ADT으로 구성을 하게 되면 사용자에게 data들의 자세한 정보를 제공하지 않아도 사용자들이 논리적인 측면(interface)에서 사용할 수 있게 된다.

그리고 이런 관점의 분리 ( 구현 독립성이기도 하다 ) 는 사용자가 접하는 interface만 변경하지 않으면 세부적인 구현사항을 변경해도 사용자의 문제 해결에 지장이 가지 않는다는 장점도 가져다 준다.

즉 자동차의 기능은 그대로 놔두고 내부 부품을 바꾸어도 사용자들이 사용하는데는 문제가 없다는 것과 비슷하다.