한개의 변수에 여러 값 저장하기…

프로그램을 짜다 보면…
셀수없이 많은 데이터를 저장해야 할 일이 생긴다…
사용 빈도가 적은 값이라면…
데이터파일을 만들어 사용하는것도 한 방법이겠지만…
사용 빈도가 높고 자주 수정되는 값이라면…
데이터파일을 만들어 사용하기엔 무리가 있다…

데이터베이스(SQL등)를 사용하는것도 한 방법이겠지만…
어쩔수 없이…
변수로 메모리에 저장해야 될 경우가 생긴다…

작년 7월… 전자상황판을 VB로 만들때…

전체 지역을 약 900개의 소단위로 만들고…
(간단히 하기 위해 각 소단위는 전부 객체로 지정하였다…)
약 30개의 건물및 객체를 만들어야 할 일이 생겼다…

각 객체는 8개 정도의 상황을 가지고 있었고…
상황은 독립적이였다…

처음에는 각 객체 수 * 10만큼의 배열을 만들어 사용하려고 했으나…
그러기엔 너무 프로그램이 무거워 저버릴것 같았다…
(그 시점에서도… 프로그램은 충분히 무거웠다…)

따라서… 상황을 저장할 다른 방법을 찾아야만 했다…

우연한 기회로… 2진수와 비트연산, 백터에 대해 볼 일이 생겼고…
이걸 사용하면… 간단히 한 변수에 여러가지 값을 저장할수 있겠다는 생각이 들었다…

따라서…

소단위 변수 int f_d_area[0,998]
건물변수 int f_d_bild[0,9]
기타변수 int f_d_etc[0,19]

를 만들었고…

각 상황 10개에는 차례대로…

1, 2, 4, 8, 16, 32, 64, 128, 256, 512

이라는 값을 가진다고 정의(노트에 필기)하였다…

3소단위에 첫번째 상황이 부여 된다면…

f_d_area[2] = f_d_area[2] + 2^0

을 해 주었고…

해당 소단위에 어떠한 첫번째 상황이 발생되어 있는지를 검사하려면…

f_d_area[index] and 2^0

을 해주었을때…
1이 리턴 된다면… 해당 상황이 발생했다고 생각할수 있었다…

따라서 어떤 상황이 발생되었는지를 체크하기 위해…
select case 구문을 사용하여…
각 상황값을 차례대로 체크하여…
그 상황에 맞는 함수를 호출하게 코딩하였다…

1 and 1 = 0000000001 and 0000000001 = 0000000001 = 1
1 and 2 = 0000000001 and 0000000010 = 0000000000 = 0
2 and 2 = 0000000010 and 0000000010 = 0000000010 = 2
3 and 1 = 0000000011 and 0000000001 = 0000000001 = 1
3 and 2 = 0000000011 and 0000000010 = 0000000010 = 2

댓글 남기기