티스토리 뷰
Data Structure - 추상 자료형(ADT : abstract data type)
ShinyOcean 2021. 2. 17. 16:56Data Structure(자료 구조)를 주제로 한 첫번째 포스팅은 추상 자료형(ADT : abstract data type)에 대하여 알아보겠습니다.
추상 자료형(ADT : abstract data type)이란 자료형을 추상적, 수학적으로 정의한 것이다.
즉, 프로그래밍 언어로 구현하기전의 시스템을 간략화된 기술 또는 명세에 집중하는것입니다.
시스템의 정말 핵심적인 구조나 동작에만 집중하여 표현하는 것으로 좋은 추상화란 사용자에게 중요한 정보는 강조되고 중요하지 않은 구현 세부사항은 제거되는 것입니다.
추상형 자료타입에서는 데이터나 연산이 무엇(what)인지는 정의되지만, 연산을 어떻게(how) 컴퓨터에서 구현할 것인지는 정의되지 않습니다. 예를들어 연산의 이름, 변수, 반환형은 정의하지만, 구체적인 코드는 주어지지않는 것입니다
그렇다면 위의 개념을 가지고 사람의 연령을 나타내는 "나이"를 기준으로한 추상 자료형 다루어 보겠습니다.
먼저 나이(age)를 추상형 자료타입으로 정의 하기 위해서는 어떠한 핵심구조와 동작이 필요할지 생각할 필요가 있습니다
대한민국에서 나이(age)는 태어남(birth)와 동시에 기본적으로 1살이 됩니다.
그리고 해가 지남에 따라 1살씩 더 늘어나게 됩니다. 그러므로 현재(now)에서 태어남(birth)을 년도로 변환하여 빼고 기본적으로 태어나자마자 갖게된 1살을 더한식으로 구현가능합니다.
그러면 여기서 몇 가지 핵심구조를 얻을 수 있습니다. 태어남(birth), 현재(now), 이것들을 조합하여 만든 최종목표 나이(age)입니다. 핵심구조를 바탕으로 동작을 추상형으로 만들면
AGE(now, birth,)..... int age = now – birth + 1
return age;
라는 핵심적인 동작을 얻을수 있습니다.
근데 만약, 나이가 한국나이가 아닌 international age, 만나이 또는 국제나이가 된다면 어떻게 변화하게 될지도 생각해 보았습니다.
국제나이는 태어날 때 0살, 생일이 지나야만 나이가 증가하는 규칙을 가지고있습니다.
그러면 여기서 태어남(birth)의 구조를 년도뿐 아닌 날짜(월,일)까지 고려해야 합니다.
“현재년도 – 태어난년도” 라는 구조를 기본으로, 만약 현재날짜(월,일)이 태어난날짜(월,일)보다 작다면 –1 크거나 같다면 그대로 유지라는 조건을 걸어서 구현해야 합니다.
여기서의 핵심구조는 현재(now)의 년,월,일 그리고 태어남(birth)의 년,월,일 과 계산후의 최종목표 나이(age)가 있습니다. 이 핵심구조들을 바탕으로 동작을 추상형으로 만들면
AGE(now, birth).... int age = now(년도)- birth(년도);
if ( now(월,일) < birth(월,일) ){
age = age –1;
}
return age;
이런 형태로 핵심적인 동작이 이루어 질 것 같습니다. 이로써 나이를 추상형 자료타입으로 정의해 보았습니다.
'Development > Data Structure' 카테고리의 다른 글
Data Structure - 노드와 연결리스트의 이해(2) (0) | 2021.02.17 |
---|---|
Data Structure - 노드와 연결리스트의 이해(1) (0) | 2021.02.17 |
Data Structure - 스택을 이용한 미로 표현 (0) | 2021.02.17 |
Data Structure - 희소행렬, 전치행렬 (0) | 2021.02.17 |
Data Structure - intro (0) | 2021.02.17 |