테이블을 활용하는 기법은 어떠한 정보를 이해하기 위해서 논리적인 명령문(if, else)들을 사용하지 않고 테이블에 있는 정보를 검색하는 방식이다.

 

테이블을 활용할때 일반적으로 고려해야 할 사항들

테이블이 있다면, 복잡한 if와 비교가 난무하지 않고 charType = charTypeTable[inputChar];로 대신할수 있다.

테이블을 활용한 기법의 두가지 문제점.

  1. 테이블에 있는 엔트리들을 어떻게 참조할 것인가. 직접 접근 방식/ 인덱스 접근 방식/단계적 접근 방식
  2. 테이블을 활용한 기법을 사용하고 있을때 테이블에 무엇을 저장해야 하는지 설명해야 한다

 

직접접근방식 - 직접 접근 방식은 복잡한 논리 제어구조를 대체한다. 데이타의 엔트리가 있고 해당하는 것에 직접 접근 한다.

ex private var monthArray:Array = ["January","February","March","April","May","June","July","August" ,"September","October","November","December"];  식의 테이블이 있고

text = monthArray[monthValue]; 이런 식으로 사용하면 복잡한 if else를 대체할수 있다

이런식의 테이블 참조를 위해서 참조키를 조작한다 - 테이블의 인덱스와 사용하는 값이 1:1 대응 혹은 복잡한 수식을 통해서 대응될수 있다. 그래서

  • 키 값을 곧바로 사용할수 있도록 정보를 복사한다
  • 곧바로 사용할수 있도록 키 값을 반환한다.
  • 키 변환 기능을 루틴으로 작성하라 - 함수를 빼는 것과 같은 이치.!

 

인덱스 접근 방식 - 간단한 수학적인 변환만으로 충분하지 않은 경우에는 인덱스접근방식이 좋다. 인덱스를 사용할때에는 인덱스 테이블에 있는 키를 참조하기 위해서 원본데이터를 사용하고,

여러분이 참조하고자 하는 실제 데이터를 참조하기 위해서 인덱스 테이블에 있는 값을 사용한다.

인덱스 접근 방식의 장점

-만약 주 참조테이블(실제 데이터가 저장된 테이블)에 있는 각 엔트리들이 크다면, 많은 공간이 낭비되는  주 검색 테이블을 만드는 대신, 많은 공간을 낭비하는 인덱스 배열(주 검색 테이블의 위치를

저장하는 테이블)을 만들기때문에 공간이 더 적게 사용된다.

-인덱스를 사용함으로 공간을 절약할수 없다고 하더라도 메인 테이블에 있는 엔트리보다 인덱스에 있는 엔트리를 다루는 것이 더 간단한 경우가 있다.

 

단계적 접근 방식 - 인덱스 구조처럼 간접적으로 데이터에 접근하며, 데이터 공간의 낭비가 심하지 않다. 테이블에 있는 엔트리들이 특정한 데이터 위치가 아니라 데이터 영역을 나타내는 것이다.

다른 테이블 활용법 보다 불규칙한 데이터를 잘 다룬다. 그리고 유연성과 수정가능성을 갖는다. 주의할 사항은 다음과 같다

  • 종결점을 확인해라 - 각 단계의 최대값에 해당하는 경우를 처리했는지, '<' '<='를 혼동하지 않았는지 확인한다
  • 순차 검색법 대신 이진 검색법 사용을 고려해라
  • 단계적 접근 방식 대신 인덱스 접근 방식을 고려해라 - 상황에 따라 검색량과 효율이 인덱스 접근방식에 비해 떨어질수 있다.

 

 

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 1. 30. 09:24