초기화 시점의 분기 - 단 한번의 확인
(One check & Memoization Pattern)



 프로그램을 개발하다가 보면 기본 베이스를 깔고 개발해야 하는 부분이 있다. 예를 들면 프로그램은 H/W가 PC이고 운영 체제는 Windows 또는 Linux에서 실행이 된다고 하는 전제 조건을 말이다. 그렇다면 자바스크립트 개발에서는 어떤 전제가 둘 수 있을 까~~


 대체적으로 브라우저의 파편화 때문에 지원여부를 확인해야 하는 사항이 있을 수 있을 것이다. IE에서 지원하는 Active-X기술로 Ajax을 지원하도록 하고 다른 브라우저에서는 다른이름의 내장 객체로 지원하도록 한다. 그리고 이 이외에 다른 사항들을 확인하기 위해서 초기에 확인 작업을 해야 할 것이다. 지원 여부와 상위 단계의 일관적인 프로그래밍 접근 방식을 위해 하위 단계에서 발을 굴려야 하는 것 처럼 말이다. - 백조 처럼 말이다


 자바스크립트에서는 브라우저가 처음 로딩이 될때 이와 같은 작업을 하거나 해당 객체가 처음 실행이 될때 작업할 수 있을 것이다. 문제는 핵심은 전제 조건에 대한 확인을 중복 확인하지 않도록 하는 것이다. 아래 코드에서 잘못된 예와 제안하는 예를 살펴 보자.


[코드1] 중복 확인 하는 코드 예제


 위 코드는 utils에서 브라우저 정보를 체크하는 부분이다. 그렇지만 호출이 될 때마다 체크를 하는 단점을 가지고 있다.  그래서 메모이제이션 패턴을 이용하여 위 코드를 한번의 확인을 재 사용하는 코드로 수정해 보도록 하겠다. 이와 같은 방식의 패턴이 나올 수 있는 전제 조건은 실행 환경에서 초기화가 이뤄진 상태(페이지가 로딩이 되면 초기화가 일어 나게 되어 있다.)에서 전제 조건( 예로 브라우저)이 아무 이유없이 바뀔 수있는 구조가 아니라는 것이다. 그럼으로 한번의 확인된 사항 - 실행 비용이 많이 드는 사항 역시 마찬 가지다 - 을 값을 가지고 있다가 다음 호출에서 저장된 값을 리턴해주는 패턴으로 가도록 하겠다. (Memoization pattern) 아래 코드를 확인해 보자.



[코드1] Memoization pattern으로 중복 확인 제거된 코드 예제


 "코드2"는 같은 Utils 객체에서 BrowserInfo를 체크해서 undefined값이면 브라우저 버전을 체크 하도록 하고 체크된 정보를 가지고 있도록 한다. 그리고 다음에 호출되었을 때 캐시되어 있던 정보를 바로 리턴해 주는 방식으로 구현이 되었다. 이와같이 기본 전제 조건에 대해서 중복 체크하지 않고 한번만 체크할 수 있도록 하여 최적화를 진행할 수 있을 것이다.




+ Recent posts