난 '비트 플래그 쓰지마!' 라는 쪽에 손을 든다
비트 플래그는 어떤 데이터에 대해서 비트를 응용한 비트마스크 기법 중 하나고
플래그라는 건 특정 동작을 수행할지 말지 결정하는 변수를 Programming에서 플래그라 부르는 거고
포괄적인 개념으로는 이거 어원이 레이스 같은 데서 깃발 올리면 그때 경주가 시작되는 것 그런 거하고 비슷함
흔히 아는 bool 타입이 이 플래그에 최적화된 타입이고
무슨 이 플래그 기능이 비트 플래그가 아니면 구현할 수 없다 라고 알고 있는 사람도 있는 것 같은데
플래그는 개념이야 개념 비트 플래그나 Enum은 프로그래밍이고요
bool 하나로 조건 체크하면 싱글 플래그고 그 bool을 여러 개 만들면 멀티 플래그인 거야
멀티 플래그? 이것도 결국 리스트 같은 구조 안에 불값 여러 개 넣고 차례대로 검사하면 끝나는 건데?
가변인자 활용해서 쓰기 편하게 함수로 만들 수 있다니까?
그럼 또 이렇게 말하는 사람이 있겠지 비트 플래그는 O(1)인데 너처럼 검사하면 O(n)이잖아
인정해 비트 플래그는 빠르고 메모리도 적게 써
그런데 그렇게 따지면 비트 플래그도 단점이 존재하잖아
1. 저 레벨을 다루기 때문에 안전하지 않다
2. 요즘 개발자들은 이해하기 힘든 코드일 수도 있다
3. 확장성이 없다. 여기서 말하는 확장성은 플래그의 개수 뿐만 아니라, 비트 단위 조작이라서 부가적인 코드 처리하기도 난감한 부분이 있다
나는 최적화 이슈가 없다면 굳이 저레벨의 비트 연산을 조작할 필요는 없다고 생각 함
요즘처럼 언어가 하이레벨화 되는 와중에는 비트 연산 모르는 개발자들도 넘치는데 다른 사람들이 내 코드를 봤을 때 설명해주기 귀찮거든
(그럼 이렇게 말하겠지. 비트 연산을 모르는 건 그 개발자가 공부를 안한 거다. 애초에 그런 개발자랑 일하는 니 수준도 나온다 ㅋㅋ - 응 세상이 바뀌는 거야)
심지어는 요즘 스크립팅 언어에서는 비트 연산을 빼는 추세도 있어
그런 사람들한테 비트 플래그 어떻게 설명한 건데?
설명할 비용이 더 들어갈 바에는 최적화를 포기하는 게 나아
구글에 The rules of optimization 치면 가장 많이 나오는 법칙임
1. 최적화 하지 마(Don't do it)
2. 아직 하지 마(Don't do it yet)
댓글 0