2010년 10월 4일 월요일

C# region 에 대하여.

 조금 여락한 환경에서 .NET 개발을 하고 있다. 조금은 더 효과적, 체계적으로 배우고 싶은데..




C# 코드 파일은 C 계열 언어와 달리 .cs 파일 하나에 코드를 구현한다. 구현에 있어 클래스가 길어 질 수 있는데(클래스가 장대하게 길어지면 그것도 디자인을 잘못한듯) #region-#endregion을 이용하여 코드를 문서화 할 수 있다. 딱 여기까지는 익히 아는건데 도데체 어떻게 써야 잘 썼다고 말할까?! 고민하다 Open Source 인 log4net 은 어떻게 사용하나 살펴보았다. 


정답은 없지만 그래도 Open Source 의 코드는 경험 많은 개발자들의 코드이므로 도움이 될 것 같다.





 보통 클래스 내 멤버의 접근 지정자에 따라 분류한다. 










1. public, protected, private 등 접근 지정자 별로 분류


2. 같은 접근 지정자일 경우, 생성자, 프로퍼티, 필드 등 으로 분류


3. 가시성은 public 멤버를 제일 상단에 배치













또는 인터페이스의 구현, helper, static wrapper 와 같이 성격이 비슷한 것 끼리 묶을 수 도 있다.













#endregion 라인에 아무것도 써주지 않아도 되는데, #region-#endregion 부분이 길어질 경우 #endregion 만 써 놓으면 어떤 부분인지 찾아야 되는 번거러움이 있으므로 #endregion 옆에도 참고가 될 설명을 붙여준다.













인터페이스 구현 시 IDE가 #region 을 자동으로 추가해 준다. 구현하는 인터페이스 별로 분류하니 보기도 좋다.








 첨엔 #region-#endregion 으로 분류 해 놓으니 개발하는 중간에는 파일을 열 때 마다 #region 을 풀어주는게 귀찮았던 적이 있다. 귀찮아서 하지 않은 코드가 있었는데 나중에 열어보니... 어후...  나중을 위해 서라도 #region-#endregion 잘 활용해 보자

모를땐, 익숙하지 않을땐 따라하면서 배워야지!!



댓글 8개:

  1. "C# 코드 파일은 C 계열 언어와 달리 .cs 파일 하나에 코드를 구현한다"라고 했는데

    .Net Framework 2.0 이상부터는 C#에서 patial 키워드를 지원합니다.

    이를 이용하여, 논리적으로 나누기 힘든 Class의 경우 성격(?)별로 별도의 파일에 코드를 나누는 것이 가능합니다.


    예를 들어,

    Logic.Core.cs
    Logic.Intrastructure.cs

    같이 나누어 사용이 가능합니당~

    답글삭제
  2. 아... 네 맞습니다. 작성하면서 partial 키워드를 사용할 수 있다는것을 깜빡했네요. WinForm 사용하면서 맨날 사용하면서.. ㅠㅠ

    듣기로는 partial 키워드를 이용해선 WinForm 과 같이 구현과 디자인 파일이 나눠져 있는 경우를 제외하고선 잘 사용 안하시는 것으로 알고 있는데 어떤지 잘 모르겠네요. .NET 전문가 분들은...

    아직 경험이 많이 않아서요 좋은 정보 알려 주시면 감사해요 ^^

    답글삭제
  3. #region-#endregion 검색했다가 들어와서, 잘 보고 갑니다.
    많은 도움이 되었습니다!!

    아, 저도 찾아보진 않았는데, #region로 처리되어 있는 부분을 풀어놓는 걸 Default로 하는 옵션이 있지 않을까요?
    ㅎㅎ

    답글삭제
  4. 안녕하세요 ^^

    #region-#endregion 접고 펼치는 것이 단축키로 있을 것 같은데 아직 못찾았어요. 몬가 있을 것 같긴 한데요 ㅎㅎㅎ

    답글삭제
  5. 찾았습니다~

    #region - #endregion으로 된 코드 열기/닫기 단축키는

    Ctrl + M + L 이네요!! ^^*


    혹은, Tools > Options > Text Editor > C# > Advanced 에서

    '#region으로 생성된 코드 감싸기' 부분을 체크해제 하시면 됩니다~

    답글삭제
  6. 아!! 그랬군요.

    Microsoft Visual C# Default Key Bindings 문서에 확인해보니

    Edit.ToggleAll-Outlining [CTRL + M, L]
    으로 나와 있었네요... 문서를 봐도 이게 몬가 하고 있었는데.. ㅎㅎ

    위의 단축키는 문서의 전체에 대해 작동하고,

    Edit.Toggle-OutliningExpansion [CTRL + M, M]
    은 개별로 작동되는군요.

    덕분에 좋은 정보 얻었네요. 감사해요 :)

    답글삭제
  7. 좋은 정보 감사합니다.
    담아갑니다~♡

    답글삭제