728x90
마이크로소프트가 제공하는 닷넷 프레임워크는 그 양이 정말 방대하다. 그러다 보니 이미 오래전부터 존재하고 있음에도 불구하고 사용자들에게 널리 사용되지 않는 요소들도 꽤 많다. 오래된 기술이라서 Deprecated 되는 요소를 제외하더라도 그 유용성에 비해 사용자들의 인지가 떨어지는 것들이 여럿 있다. 그 중 대표적인 것이 바로 "?? 연산자" 이다. 

일반적으로 사용자들은 단행 조건문 처리를 할 때나 Nullable 자료형을 선언할 때 쓰는 "?" 는 많이 사용하는 편이다. 하지만 물음표를 두개 붙이 "??" 연산자를 사용하는 경우는 쉽게 찾아보기 어렵다. 그렇다면 도대체 물음표를 두개 붙여 놓은 "?? 연산자"는 무얼하는 친구일까?

 
우선 "??" 연산자는 영어로 null-coalescing 연산자라고 부른다. 우리말로 어떻게 해석해야 할지 조금 애매하니 그냥 "??" 또는 "?? 연산자" 라고 부르기로 하겠다. 이 연산자의 용도는 Null 값을 가질 수 있는 변수들을 사용할 때 초기값의 원활한 지정이다. 보통 Null 값의 처리를 위해 아래와 같은 코드를 많이 사용한다.

int? numOne = null;
int? numTwo = 23;

if (numOne != null)
    return numOne;
if (numTwo != null)
    return numTwo;

return 10;


이 코드는 Null 값을 가질 수 있는 두개의 정수형 변수 numOne 과 numTwo를 비교하여 Null이 아닌 값을 출력하기 위한 간단한 코드이다. 만약 둘다 null 값이면 숫자 10을 출력하게 된다. 우선 이 코드를 물음표 한개를 이용하여 단행 조건문으로 처리해 보면 아래처럼 표현될 수 있다.

return (numOne != null ? numOne : (numTwo != null ? numTwo : 10));

한줄로 처리가 되긴 했지만 가독성이 그리 높은 코드는 아니다. 코드 자체의 길이도 길지만 콜론과 괄호, 물음표, 부등호 등이 섞여 있어서 한눈에 내용을 파악하기에는 쉽지 않은 상태이다. 이것은 "??" 연산자를 이용해서 표현하면 아래와 같다.

return ((numOne ?? numTwo) ?? 10);

처음에 상당히 길었던 코드가 상당히 짧게 표현되었다. numOne ?? numTwo 의 의미는 두가지 변수 중 Null 값이 아닌 것이 어떤 것인가? 를 의미한다. Null 이 아닌 값이 있으면 해당 변수 값이 Return 된다. 하지만 둘다 Null 이면 numOne ?? numTwo 의 결과는 Null 이다. 이후 바깥쪽 괄호의 처리가 진행되는데 Null ?? 10 을 연산하게 되면 Null 이 아닌 10 이 Return 되게 된다.  

소프트웨어 개발을 하면서 Null 값의 처리는 꼭 해줘야 하는 필수적인 예외처리 로직이다. 이왕 해야 하는 처리 로직이라면 조금 더 간결하고 가독성 있는 코드를 만들어 쓰는 것이 더 좋지 않을까?

- NoPD - 
728x90
728x90
마이크로소프트의 자격증 1과목당 응시 비용은 정말 오래전부터 80달러를 유지해 왔습니다. 환율을 적용하여 7만원부터 9만원 사이의 금액으로 한과목의 시험을 볼 수 있었는데요, 오늘 아침에 도착한 마이크로소프트의 메일을 보니 7월 1일부터 금액이 인상된다고 합니다.

제 기억이 맞다면 2003년에도 80달러 였습니다. 10여년이 지났는데도 80달러가 유지되고 있었다는 것은 새로운 시험의 개발과 관련된 서비스의 제공 등에 따른 비용을 처리하기 쉽지 않았을거라는 생각이 드네요. 어쨌든 중요한 것은 7월 1일부터 아래 스샷처럼 과목당 시험비용이 100달러로 증가됩니다. 시험 준비하고 계셨던 분들은 피치를 좀 올리셔야 겠네요!
 

- NoPD -
 
728x90
728x90
애자일 프로그래밍을 하던 그렇지 않던 지속적인 통합 (CI, Continuous Integration) 은 개발자들의 노고를 덜어주기 위한 큰 화두임에 틀림없다. 관련하여 여러가지 자료를 찾아 보던중 월간 마이크로소프트웨어지에 필진으로 활동중이신 최재훈 님께서 2008년도에 1년동안 연재했던 자료가 있어서 링크를 모아 보았다. 

혹시나 CI 에 관하여 고민하고 있거나 공부를 하고 싶은 사람이라면 (저처럼 ^^) 한번 쭈욱 읽어보면서 감을 잡아보는 것도 나쁘지 않을 것 같다. 다만 내용은 닷넷과 VC++ 을 모두 커버한다고 전제를 깔긴 했지만 대부분의 내용은 VC++ 중심으로 돌아가고 있다. 그렇다 하더라도 큰 줄기는 틀리지 않으니 참고하기엔 가장 좋은 글이라 생각된다.


최재훈 님의 글은 리눅스 서버에 Subversion 을 설치하고 여기에 이슈관리 도구인 trac 을 설치해서 사용하는 환경으로 되어 있다. 시절이 좀 지나서 그런지 (쓰신건 2008년) 지금은 윈도우에서도 얼마든지 이 도구들을 설치해서 활용하는 것이 가능하다. 윈도우용 Subversion 도구인 Visual SVN Server 를 설치해서 레파지토리를 만들고 윈도우용 Visual SVN Server Trac 을 설치하는 방식으로도 가능하다. 

참고링크 : 즐거운 삐약토끼님의 " 윈도우에 Visual SVN Server + Trac 설치하기 [바로가기] "

결과적으로 지속적인 통합은  1) 소스버전관리, 2) 이슈관리, 3) 빌드자동화, 4) 테스트 자동화 등이 어우러져 아름다운 조화를 이룰때 실현 가능하다는 것을 알 수 있다. 처음이 어렵지 익숙해지면 없이는 살 수 없을 것 같은 생각이 든다.

- NoPD -
728x90
728x90
Visual Studio 2010 Express 가 아닌 정식 버전을 사용하는 경우에도 윈도폰7용 개발도구를 설치하는 방법은 동일합니다. 필요는 없지만 Visual Studio 2010 Express 도 설치가 되어야 하고 조금 지저분해지는 감이 없진 않습니다만 아직까지 별도로 Express 의 설치를 회피할 수 있는 방법은 공식적으로 없는 상태입니다.

문제는 간헐적으로 이런 설치를 진행한 다음에도 Visual Studio 2010 Express 에서 보이듯이 윈도폰7 개발을 위한 프로젝트 템플릿이 안보이는 경우입니다. 결론을 먼저 이야기하면 개발도구는 정상적으로 되었지만 템플릿이 Visual Studio 2010 정식 버전쪽으로 등록이 되지 않아 발생하는 문제입니다. 



NoPD의 Visual Studio 2010 Professional 버전의 화면입니다. XNA Game Studio 4.0 이 추가되어 있는 것으로 보아 윈도폰7 개발도구가 정상적으로 설치된 상태라는 것을 추정할 수 있습니다. 실제로 XNA Game Studio 4.0 템플릿 메뉴에 들어가면 윈도폰7용 게임 개발 프로젝트 양식은 정상적으로 등록이 되어 있는 걸 볼 수 있습니다. 이제부터 이 사태(?)를 처리하는 방법을 알려드리겠습니다. 삭제후 재설치하는 것은 의미가 없습니다. 재설치를 해도 안번 설치가 잘 안되기 시작한 환경에서는 죽어도 설치가 안되니까요 ^^;;;


비주얼 스튜디오가 설치된 경로의 위의 경로로 찾아가시기 바랍니다. CSharp 하위에 Silverlight for Windows Phone 이 있습니다만 템플릿이 뜨지 않는 경우에는 1033 폴더만 존재하고 1042 폴더는 없을 겁니다. 혹시나 Visual Studio 2010 의 버전에 따라 숫자는 차이가 있을 수 있으니 CSharp 하위의 다른 폴더의 구조를 참고하시기 바랍니다. 

일단 NoPD가 사용하는 Professional 버전에서는 1042 폴더를 사용합니다. 1033 폴더를 통째로 복사해서 1042 폴더 이름으로 변경을 해 줍니다. 이 때 관리자 권한이 필요하다고 에러가 뜨지만 무시하시고 그냥 진행하시면 됩니다.


이제 비주얼 스튜디오 명령 프롬프트를 열어 위의 스크린에 나온 경로로 찾아갑니다. 해당 경로에서 devenv.exe /InstallVSTemplates 라고 명령을 내리면 비주얼 스튜디오가 템플릿을 검색하여 등록 작업을 시작합니다. 이 명령어 역시 관리자 권한으로 실행 되어야만 구동 가능하니 비주얼 스튜디오 명령 프롬프트를 관리자 권한으로 실행해 주시기 바랍니다.


이제 비주얼 스튜디오를 다시 실행해 보면 위와 같이 Silverlight for Windows Phone 이 등록된 모습을 볼 수 있습니다. 지금까지 세대의 PC 환경에 윈도폰7 개발도구를 설치해 봤는데 딱 한군대 에서만 정상적으로 설치가 되었고 나머지 두대에서는 위와 같은 현상이 발생했습니다. 검색을 해봐도 별다른 해답은 안나오는데 혹시나 비슷한 난감함을 겪는 분들을 위하여 내용 공유합니다.

- NoPD -
728x90

+ Recent posts