중첩된 namespace는 어떻게 써야 하나?

오늘 코딩을 하다가 namespace를 중첩해서 만들어야 할 일이 생겼다. 내가 C#에 영향을 많이 받은지라, 각 namespace의 계층 구조를 만들어서 써보자는 생각을 했다.

그런데 문제가 생겼다. 이거 들여쓰기를 어떻게 해야 할 지 고민된다.

몇 가지 방법을 생각해냈다.

1번

namespace Foo { namespace Bar {
    class ImYourFather
    {
        ...
    }
} }
2번

namespace Foo
{
    namespace Bar
    {
        class INeedACupOfCoffee
        {
            ...
        }
    }
}

3번

namespace Foo
{
namespace Bar
{
class WatchWhereYouShooting
{
    ...
}
}
}



일단 namespace를 제시하는 방법과, namespace와 class의 들여쓰기 방법이 차이가 난다. 따라서 내가 여기에 제시한 것 말고도 여러 변형이 나올 수 있다만, 일단 저 세 개를 후보로 정했다.

1번은 namespace를 옆으로 나열한 것이다. packed 방식이라고 하더라. 들여쓰기는 한 번만 된다.
2번은 namespace마다 들여쓰기를 한 것이다.
3번은 namespace와 class 모두 들여쓰기를 하지 않은 것이다.

예상되는 장점과 단점을 생각해 보자면...

1번
장점
namespace의 계층 구조를 쉽게 파악할 수 있다. 들여쓰기는 한 번만 된다. Visual Studio의 자동 들여쓰기에 의존해도 되므로 편하다. C++은 C#과 달리 namespace를 namespace Foo::Bar {...} 로 선언할 수 없는 것을 가장 유사하게 극복하는 방법이다.

단점
내가 따르는 일반적인 C++ Coding Style을 위반한다. 보통 중괄호는 별개의 라인에 작성해야 한다.




2번
장점
Visual Studio가 알아서 들여쓰기를 해주므로 편하다.

단점
namespace 계층 구조가 깊어질 수록 들여쓰기가 많아진다.




3번
장점
namespace 때문에 들여쓰기가 중첩되는 현상이 없다. 즉, 수평 공간을 낭비하지 않는다.

단점
Visual Studio의 자동 들여쓰기 기능이 있기 때문에 수동으로 왼쪽에 정렬해줘야 하는 불편함이 따른다. 별 것 아니지만 귀찮다.
왠지 namespace만 들여쓰기를 하지 않는게 거슬린다.
계층 구조를 파악하기가 조금 힘들수도 있다.




아... 정말 고민된다!

다른 프로젝트들은 어떻게 하고 있을까?

내가 좋아하는 C#

C#쪽은 대체로 2번 규칙을 따르는 것으로 보인다. 근데 C#은 namespace 지정을 namespace Foo.Bar {...} 이렇게 할 수 있어서 나름 들여쓰기가 절약이 된다.


Google

Google의 경우 3번 규칙과 비슷하다. 다만 중괄호가 같은 라인에 있다.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces


Ogre3D

게임 쪽은 어떨까... Ogre3D를 봅시다.
Ogre3D의 경우 2번 규칙과 비슷하다. 중괄호가 namespace와 같은 라인에 있는 경우가 일반적으로 보인다. 별개의 라인에 중괄호가 위치하는 경우도 있기는 하지만 같은 라인에 위치하는 것이 보다 일반적으로 보인다. 좀 더 살펴본 결과 3번 스타일도 사용하는 것으로 확인되었다. 오픈 스스기 때문에 여러 사람이 작업해서 그런건지 스타일도 여러개다.

Ogre3D의 namespace는 계층이 최대 2단계까지만 중첩되기 때문에 어차피 들여쓰기 문제는 없는 것으로 보인다.


WebKit, Mozilla

외국쪽 사정도 비슷한듯... 들여쓰기에 대한 논쟁이 좀 있다.
http://bugreports.qt.nokia.com/browse/QTCREATORBUG-567

살펴보니 WebKit도 3번 규칙을 따른다. http://www.webkit.org/coding/coding-style.html
Mozilla도 3번 규칙을 따른다. https://developer.mozilla.org/En/Mozilla_Coding_Style_Guide


 VS2010에서 namespace indention 안하는 방법
http://stackoverflow.com/questions/3727862/is-there-any-way-to-make-visual-studio-stop-indenting-namespaces


Unreal Engine

사족: C++에서 C#처럼 enum 쓰기
Unreal쪽 자료를 찾아보다가 여길 보니 enum을 C#스타일로 쓰기 위해 namespace를 사용한다는 내용이 나온다. 나도 예전에 생각해봤던건데 진짜로 쓰는 데가 있었구나!

http://udn.epicgames.com/Three/CodingStandard.html


결론

이것 때문에 몇 시간을 다른 사람들은 어떻게 하고 있는지 찾는데 보냈다. 코딩은 언제 하나 ㅠㅠ

대개 3번 유형을 선택하고 있는 것으로 보이고 간혹 2번, 그리고 드물게 1번 스타일을 사용하는 것으로 보인다.

일단은 1번 스타일로 하려고 한다. 중첩된 namespace를 사용하기에는 가장 편리하고 적합한 것으로 보인다. 그리고 namespace 선언으로 발생하는 탭 하나 정도는 괜찮다. 어차피 C#도 보니까 그러더만... 너무 들여쓰기 많아져서 스트레스 받기도 싫고, 들여쓰기 집어넣느라 스트레스 받기 싫다.




반응형

지금 사용중인 놈:
http://skyok.co.kr/product.php?code=741


여태까지는 멤브레인과 노트북 키보드밖에 써본 적이 없다. 개인적으로 키보드의 키압(키보드 압력)이 낮은 것을 좋아한다. 키압 높으면 손가락 관절 아프다 ㅠ

처음 써보는 기계식 키보드인데, 정확히 말해서 다른 사람의 기계식 키보드는 몇 번 만져본 적이 있었다. 기계식 키보드의 존재만 알 때 만져본 녀석이 하나 있고 - 지금 생각해보면 갈축 - 흑축과 리얼포스를 만져본 적이 있다.

당시 하도 키보드랑 마우스를 많이 만져서 손가락 관절이 정말로 아팠기 때문에 흑축은 개인적으로 너무 손가락이 아팠고, 리얼포스는 그냥 업그레이드 된 멤브레인 느낌이었는데 가격이 너무 세서 놀랐다.


아무튼 돈이 좀 생기게 될 일이 있어서 이 김에 기계식 키보드 한번 써보자! 하는 생각에 조사를 좀 해봤는데... 여러 사람이 있는 공간에서 써야 될 키보드라 그나마 조용하다고 하는 갈축을 샀다. 넌클릭이라고 하더라. 
이 모델이 기계식 키보드 치고는 꽤 싸게 나온 것으로 보인다.


기계식 키보드, 그 중에서도 갈축이라는 녀석을 처음 써본 결과, 멤브레인에 비해서 아주 미칠듯이 좋은건 아니다. 좋다기 보다는 각자의 개성이 있다는 느낌이다. 다만 기계식 키보드는 제작의 특성상 가격이 비쌀 수 밖에 없을 뿐이고. 따라서 멤브레인이 더 좋다는 사람이 있다면 오히려 돈도 아끼고 좋다는 생각이다.

갈축이라는게 조용해서 사무실에서도 쓸 수 있다고 광고에 써있기는 했지만, 분명히 말해서 조용한 사무실 기준으로 멤브레인보다 두 배 정도의 체감적인 소음은 난다. 내가 한글 기준으로 타수가 
평균 500~600타/분 정도 나오는데, 아마 이 정도로 친다면 바로 옆에 앉아 있는 사람들이 내 키보드 소리가 거슬리지 않을 수 없을 것 같다. 솔직히 말해서, 치면서도 눈치때문에 스트레스 받았다(내가 좀 눈치를 많이 보는 스타일이긴 하다). 요즘은 그냥 누군가 태클 걸어줄 때까지 주변 신경쓰지 않고 치려고 한다. 

키압이 낮아서 좋고, 사각거리는 느낌이 좋다. 다만 키를 체감상 30%~40% 정도만 눌러도 인식이 되고, 말했다시피 키압이 낮기 때문에 지금 오타율이 좀 올라간 상황이다. 평소엔 키보드 치는 습관 상 건드리는 키들이 - 나도 이런 습관이 있는 줄 몰랐다 - 무시되었었는데 이제는 100% 입력이 들어간다. 

NUM, CAPS, SCROLL의 LED는 확실히 밝다. 뭐 쳐다보지 않으면 눈부시지는 않다. 밤에 불꺼놓고 쓴다거나 한다면 거슬릴 수는 있을 것 같다. 반대로 뭐가 눌려 있는지 확실히 알 수 있는 장점도 있다. NumLock, CapsLock 자주 쓰는 사람이라면 유용할 듯.

전체적으로는 만족하는 편. 고속으로 칠 때 눈치만 안보면 되는데 orz




옆옆 사람이 이틀 정도 청축 키보드를 썼었는데 꽤나 많은 피드백(?)을 받고는 집으로 철수시켰다 --; 사무실 끝에 있는 사람도 들릴 정도라니... 확실히 그 키보드 소리는 듣자마자 기계식 키보드의 진한 향기가 났다. 커피로 치면 에스프레소같은 느낌? 갈축은 진한 아메리카노 같은 느낌이다. 흑축은 라떼 정도 되려나...(?!) 나도 한번 쳐봤다. 짤깍거리는 클릭음이라는게 이런거구나 하고 느꼈다. 집에서 쓰면 적절할 듯.



반응형

사건의 발단 - 키보드 불량?

몇 달 MSI GE620 i7 N-Gene이라는 노트북을 샀는데, 키보드가 좀 말썽이었다. 솔직히 말해서, 140만원(2011년 03월 기준)이나 되는 노트북의 키보드가 이래도 되나 하는 생각이 들었다.

겉보기에는 좋아 보이고 멀쩡하긴 한데, 키 감촉이 영 좋지 않다. 가장 큰 문제는 키가 눌렸다는 느낌이 들었는데도 안 눌린 것으로 처리되는 경우가 있다는 것이다. 이 현상은 몇 번의 실험 결과 키를 가운데 누르지 않고 키의 가장자리쪽을 눌렀을 때 발생한다는 사실을 알아냈다.

특히 한/영 키가 문제였는데, 보통 엄지 손가락으로 누르게 되는데 이 키가 오른쪽 엄지 손가락보다 좀 오른쪽에 위치하기 때문에 아무래도 가장자리를 누르게 될 일이 많다. 난 분명 눌렸다고 생각했는데 한글과 영어가 전환이 되지 않아 스트레스를 많이 받았다. 하지만 A/S 센터를 가기에는 시간이 없었고, 연속으로 써야 되서 거의 3달 반 정도를 참고 썼다.


나중에는 그냥 내 키 누르는 습관이 바뀌었다. 그래도 한/영 키 누를 때마다 잘 바뀌었는지 불안한 느낌이 드는 것은 어쩔 수 없었다. 문서를 옮겨 적거나 할 때 모니터 안보고 치다 보면 한글과 영어가 반대로 써있는 경우도 많았다. 그럴때면...

MSI GT680 Phoenix 모델도 최근에 장만했는데 이녀석은 키 촉감도 더 낫고 한영 전환도 더 잘되는 느낌. 근데 겉보기에는 두 노트북 모두 같은 키보드다. 희안하네.


센터 방문

결국 오늘 큰 마음(?)을 먹고 용산의 MSI A/S 센터로 갔다.


사소한 실망

센터 위치는 꽤 좋은 편으로 보인다. 내부도 나쁘지 않았다. 까페 비슷한 분위기의 대기실도 있었다. 다만 세심한 배려는 약간 부족한 느낌; 예를 들면 커피 머신과 2개의 과일 주스 - 각각 포도, 오렌지 - 디스펜서가 있었는데, 커피는 나오지 않았고(뭔가 에러 메시지가 보였다) 음료수의 맛은 가히 최악이었다. 그리고 대기실의 노트북은 성능이 아주 안좋았고 작았으며(귀엽긴 했다) 무선랜도 엄청나게 느렸다. 나름 고객에게 노트북 어필할 수 있는 기회인데... 아무래도 A/S 센터다 보니까 이런 홍보적인 면에서는 본사에서 잘 관리하지 않는 것으로 보인다.

키보드가 잘 안 눌리는 안되는 현상을 앞에서 보여주고, 교체를 한번 했다. 약 15분이 소요되었다. 



커다란 실망

대기실에서 기다리고 있었는데, 중간에 기사님이 와서 내 노트북 운영체제의 비밀번호를 적어달라고 했다. 비밀번호는 남에게 알려주지 않는 것이 기본 아닌가... 그래서 결국 직접 수리실 같은 곳에 들어가서 내가 쳤다.

교체 후에 테스트해본 결과 좀 개선된 느낌이 들긴 했지만 - 솔직히 말해서 내가 키 누르는 습관이 바뀌어서 그렇다고 생각한다 - 역시 가장자리를 눌렀을 때 해당 문제가 계속 재현되었다. 이것은 기사님도 확인하였다. 그리고 한 번 더 교체를 요청했다. 기사님은 교체해봤자 증상은 동일할꺼라고 했다. 쩝.

두 번째 교체 후에도 증상은 개선되지 않았다. 물어본 결과 GT680이나 GE620이나 들어가는 키보드는 동일하다고 한다. 내 생각인데 두 노트북의 키보드는 같은게 맞는 것 같다. 다만 키보드 아래쪽의 공간이랄까, 구성이 좀 달라서 누르는 느낌이 다른게 아닌가 생각한다.

아무튼 이런 문제가 있으니 본사에 연락을 하든지 해서 리포트를 하고 피드백을 달라고 했는데... 뭐랄까 너무 안된다 어렵다 그래봤자 소용없을 것이다 이런 어조로 말씀하셔서 상당히 기분이 안좋았다. 물론 키보드 모듈을 잘 못 만든게 기사님 탓은 아니지만, 같은 MSI 소속 직원인 만큼 고객의 피드백 수집에는 신경을 쓸 것이라고 했는데 소속감은 없는 것 같은 느낌이다. 그냥 MSI가 싸놓은 똥 치우러 온 용병의 느낌.



그 외 의견:

개인적으로 두 노트북 다 LCD 패널이 글레어 타입이라서 마음에 안든다. 보통 사무실에 형광등이 많이 있는데 이거때문에 작업할 때 아주 짜증난다. 용산 간 김에 퓨어메이트 가서 안티 글레어(AG) 필름 발랐는데 모래알 생겨서 또 짜증이... 퓨어메이트 소개에는 자기네 회사껀 모래알 안 생기는 것처럼 써있어서 믿었건만 ㅠㅠ

그래도 형광등 보면서 멀미 안해서 좀 낫다.



반응형

+ Recent posts