태그 보관물: operator

플래그 데이터와 이진 연산

개요

얼마 전 Justin Yoo님의 논리 연산자와 이진 연산자의 차이에 대한 블로그 포스트가 그 분의 의도와는 다르게 페이스북 ‘생활코딩’ 그룹에 콜로세움(?)을 세운 사건이 있었습니다. 저는 포함되지 않아서 아쉬운 내용이 조금 있었지만 많은 분들에게 도움이 될만한 글이며 크게 문제가 될 부분은 없다고 생각했는데 다른 의견을 가진 분들이 많이 있었습니다. 급기야 C#의 논리 연산자와 이진 연산자 내부 동작이 C/C++과 같지 않다는 오해까지 번져나갔습니다. C/C++에만 익숙한 분들이 겉모습이 비슷하긴 하지만 C#에서는 논리 연산자는 오직 System.Boolean 값 사이에만 사용 가능하며(연산자 사용자 정의는 논외로 하겠습니다. 일이 너무 커져요…) 조건식 결과 역시 System.Boolean 형식만 가능함을 알지 못했기 때문입니다. 마찬가지로 C#만 경험한 분들은 C/C++에서 if 구문과 조건부 삼항 연산자(?:)에 다양한 형식의 식이 사용된다는 점을 몰랐겠죠.

그리고 2주 쯤 전에 회사에서 코드 리뷰를 할 때 동료 사원 한 분이 플래그 열거형의 필드 값을 10진수가 아닌 16진수를 사용해 정의한 이유를 물어보셨는데 당시 시간 여건 상(점심시간이 다가오고 있었어요!) 충분한 설명을 해 드리지 못했습니다. 그래서 해당 내용과 Justin Yoo님의 포스트에 포함되지 않은 내용을 함께 정리해 봅니다. 언어는 C#을 기준으로 진행하지만 개념적인 부분은 다른 프로그래밍 언어에도 그대로 적용됩니다.

C#의 논리 연산자와 이진 연산자 내부 동작이 궁금하면 C++로 작성된 CLI 소스 코드를 확인하는 것을 권합니다.

이 글을 먼저 읽고 Justin Yoo님의 포스트를 읽으시면 더 이해가 쉬울 거라 생각됩니다.

계속 읽기