추상 데이터 타입, ADT

Uno·2021년 4월 8일
0

개념보관소

목록 보기
1/3

추상 데이터 타입 ADT

Target


본격적으로 자료구조를 알기 전에, Abstract Data Type(이하 ADT)를 알아봅시다.

Contents


  1. What is “ADT”?
  2. Application example
  3. How to use ADT
  4. Conclusion

1. What is “ADT”?


ADT를 직역하면 추상 자료형 이라는 뜻입니다. 즉, 어떻게 코드를 구성했는지 그 내용을 추상화하고 명칭만 남겼다고 볼 수 있습니다. 추상 자료형에는 아래와 같은 속성을 가지고 있습니다.

1. Characters : 추상 자료형의 세부 속성
2. Operations : 추상 자료형의 연산

첫 번째 속성인 Characters는 추상 자료형을 구성하는 구성요소입니다. 예를 들면, 비행기가 하나의 ADT라고 생각합시다. 그러면 “비행기”의 Characters는 날개, 제트엔진, 바퀴, 문 이 될 것입니다.
두 번째 속성인 Operations는 추상 자료형의 연산을 뜻합니다. 위 비행기 예시를 적용하면, 이륙을하다 , 착륙을하다, 문을 개방하다 와 같은 로직들이 “Operations” 이 될 것입니다. 여기서 유의사항이 있습니다. “Operations”에는 내부 속성과 같은 일종의 프로퍼티를 정의하지 않는 것입니다. 순수히 로직만 정의하는 것입니다. (Swift에서는 연산 프로퍼티와 같습니다.)

2. Application example


“월급통장”이라는 소재로 ADT에 대해 설명하겠습니다.

월급통장에 월급이 “100억” 들어옵니다. 그 돈이 입금되는 곳은
1. 빌딩에 대한 월세로 20억
2. 개인 노동력으로 인한 80억
입니다. 상상만해도 행복하죠. 위 두 항목이 “Characters” 가 됩니다.
“위 속성들을 통해서 제가 어떤 결과들을 끌어낼 수 있을까요?” 라는 질문이 Operations가 될 겁니다.
예를들자면,
1. “월세 : 개인노동력“ 금액 비중을 구할 수 있습니다.
2. 두 소득에 대한 입금 여부를 구할 수 있습니다.

한 문장으로 정리하면 다음과 같습니다.

“ADT” 란 어떤 개념을 구성하는 구성요소를 정의하고, 구성요소를 연산하는 로직을 정의한다.

3. How to use ADT


ADT를 작성하는 것은 자유입니다만, 아래 작성하는 것은 참고할만한 사례정도로 받아들이시면 될 것 같습니다. 다만 Characters는 내부속성(구성요소)를 정의하고 Operations는 로직을 정의한다라는 점을 기억하시면 됩니다.

class MyMoney {
	// Characters를 정의
	var buildingIncome: Int		// 땅값
	var laborIncome: Int		// 몸값
	var expenditure: Int		// 지출금액

	// Operations를 정의
	var getCurrentTotalMoney: Int {	
		// 현재 통장에 있는 금액을 확인
	}

	var spendMoney: Int {
		// 몸값을 우선적으로 소비하고 모두 소비하였을 시, 땅값을 소비		
	}

	var putMoney: Int {
		// 돈을 통장에 추가
	}
}

4. Conclusion


Swift에서 viewModel을 구성하는 것과 유사하다고 생각하시면 편합니다. ADT를 통해서 Controller에서는 값을 Input만 합니다. 그리고 ViewModel이 연산을 모두 처리합니다. Controller는 Output을 적절히 사용하게됩니다. 그 결과 Controller는 View와 ViewModel의 소통창구 역할만담당하면 되는 겁니다. ViewModel은 값을 연산하기만하면 됩니다. View는 UI를 구현만하면됩니다.

제가 직접경험한 사항은 아니라 책임질 수는 없는 말이지만, 이렇게 구분하게되면 Test 시, 좀더 편리하다고 합니다.

profile
iOS & Flutter

0개의 댓글