FingerEyes-Xr의 GraphicLayer에 대한 최상위 지정(Top Most)

그래픽 레이어는 DBMS에 공간 데이터 저장을 위한 별도의 테이블을 준비하지 않아도, 자유로운 방식으로 지도 상에 원하는 위치 기반 데이터를 표시하고 이용할 수 있는 편의성과 유연성을 제공합니다. 그러다보니, 그래픽 레이어는 지도 상에 어떠한 요소보다 최상단에 표출되어 사용자에게 그 시인성을 확실하게 확인할 수 있는 것이 좋습니다. 아래의 화면은 CCTV를 지도 상에 표시하고 있는데, CCTV가 최상단에 노출되지 않음으로써 이러한 시인성 확보가 마련되지 않은 경우입니다.

FingerEyes-Xr에서 그래픽 레이어는 GraphicLayer라는 클래스를 통해 생성되는데, 아래처럼 간단히 topMost 매서드를 통해 최상단으로 지정될 수 있습니다.

var gl = new Xr.layers.GraphicLayer("cctv");

gl.topMost(true);
map.layers().add(gl);

결과적으로 아래처럼 해당 그래픽 레이어는 항상 최상단으로 표출됨으로써 그 시인성이 확보됩니다.

사용자를 위한 시인성 확보를 위한 방안으로 위처럼 기능으로써 개선될 수 있고, 디자인적으로는 그래픽 레이어에 표시되는 항목의 아이콘에 외곽선(Stroke)을 장식하여 훨씬 더 세련되고 강력하게 시인성을 확보할 수도 있습니다.

비트(Bit) 단위로 생각하기 (비트 연산)

거의 대부분의 프로그래밍 언어를 학습하다보면 나오는 비트 연산은 이진 파일 포맷 분석, 해시, 암호화 등이 아닐 경우 거의 사용되지 않는다. 그래서인지, 관련 내용을 그냥 눈으로만 보고 이해하거나, 그냥 넘기는 경우가 다반사인데.. 그러다보니 비트연산에 대한 깊이 있는 이해가 수반될 일이 없어 더욱더 비트 연산을 쓸일이 없게 된다.

사실 비트 연산은 매우 최적화된 연산이고, 모든 기능들.. 즉 그 모든 복잡한 기능들을 구성하는 가장 최소 단위라고 할 수 있다. 일단 최적화된 연산이라는 관점에서 그 활용처를 생각해보면, 상태값을 담아두기 위해 저장소로 활용될 수 있는데.. 만약 8개의 상태가 필요할 경우 총 8개의 boolean 타입이 필요하다. 언어에 따라 다르지만 boolean 타입의 변수를 위해 할당하는 메모리의 양은 비트연산을 통해 동일한 기능을 수행하는 것에 비해 엄청난 양의 메모리를 사용하며 그 속도 또한 엄청나게 느리다.

여기서 8개의 상태값을 담아 두는 비트연산 기능을 코드로 들어, 필자 스스로를 위한 비트 연산의 이해를 다져 본다.

8개의 상태값을 담기 위해 부호가 없는 8비트의 정수 변수인 states를 정의하였다. 즉 8개의 상태 값을 저장하기 위해 단 1바이트만을 사용하고 있다. 코드는 이 states 변수의 2번째와 4번째 그리고 7번째를 On으로 하고 나머지는 Off로 상태로 설정하는 코드이다.

var states uint8 = 1 << 1 | 1 << 3 | 1 << 6

이제 이 상태 변수를 통해 4번째의 상태를 파악하기 위해 다음의 코드가 필요하다.

if states&(1<<3) != 0 {
    fmt.Println("index 4 is ON")
}

그리고 상태에서 4번째만을 ON으로 하는 코드는 아래와 같다.

states = states | (1 << 3)

그리고 상태에서 4번째만을 OFF으로 하는 코드는 아래와 같다.

states = states &^ (1 << 3)

끝으로 4번째 상태를 토글(Toggle), 즉 ON이면 OFF로.. OFF면 ON으로 설정하는 코드는 아래와 같다.

states = states &^ (1 << 3)