NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# [Visual Studio] CodeMaid를 이용하여 편리하게 코드를 정리하자. (Let's use the CodeMaid …

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘은 비주얼 스튜디오의 확장 기능인 CodeMaid 사용 방법에 대해서 알아보겠습니다. 우리는 프로그램을 완성한 후 좀 더 보기 좋게 하기 위해서 코드를 정리합니다. 또는 코딩하는 중간 중간 코드를 정리하기도 합니다. 이런 수동적인 작업을 편리하게 도와주는 확장 툴입니다.

     

    비주얼 스튜디오를 실행한 후 도구 > 확장 및 업데이트를 클릭하세요.

    아래 그림과 같이 좌측에 온리인을 선택한 후 우측의 검색창에 "CodeMaid"를 입력합니다.

    중앙에 검색되는 CodeMaid를 다운로드하세요.

    다운로드가 완료되면 자동으로 설치됩니다.

    설치가 완료되면 비주얼 스튜디오를 다시 실행하세요.

    aSIFrnD.png

     

     

    준비가 되면 비주얼 스튜디오를 종료하세요.

    sy1vpPt.png

     

     

    설치가 진행됩니다.

    CRf9ppV.png

     

     

    코드매이드의 기능을 알아보기 위해 간단한 응용 프로그램을 만듭니다. 콘솔 프로그램을 생성한 후 아래와 같이 코드를 추가 해주세요.

    Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    namespace ConsoleApp1
    {
        class Program
        {
            #region Member Fields        
            #endregion
            static void Main(string[] args)
            {
                if (args.Length > 0)
                {
                    foreach (var arg in args)
                    {
                        Console.WriteLine(arg);
                    }
                }
                Thread thread1 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 1: {0}", i);
                    }
                });
     
                Thread thread2 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 2: {0}", i);
                    }
                });
     
                Thread thread3 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 3: {0}", i);
                    }
                });
     
                thread1.Start();
                thread2.Start();
                thread3.Start();
                Console.ReadKey();
            }
     
            #region Member Methods
            public static void Run1()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 1: {0}", i);
                }
            }
            public static void Run2()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 2: {0}", i);
                }
            }
            public static void Run3()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 3: {0}", i);
                }
            }
            #endregion
        }
    }

     

     

    위 예제 코드의 불필요한 코드들을 자동으로 제거해줍니다. 이 명령을 실행한 후 코드를 다시 확인 해보세요.

    CXxu86S.png

     

     

    코드 정리는 아래와 같은 작업들을 수행합니다.

    1. 사용하지 않는 using문을 제거하고, 정렬합니다.

    2. 클래스 또는 메서드에 한정자가 없다면 추가합니다.

    3. 불필요한 빈 줄을 제거합니다.

    4. 구문 분리용 빈 줄의 경우 간격을 자동으로 조정 해줍니다.

    5. 내용이 없는 전처리 기호(#region)를 제거합니다.

    6. 라인의 끝에 공백이 있을 경우 공백을 제거합니다.

    7. 비주얼 스튜디오 서식을 적용시킵니다.

     

     

    CodeMaid Spade 트리뷰에서 맴버들을 쉽게 이동할 수 있습니다.

    클래스 맴버들을 Drag & Drop으로 쉽게 이동할 수 있습니다. 또한, 간단한 메타 정보와 복잡도도 표시합니다.

    50U8kF7.png

     

     

    속성의 경우 읽기 전용, 쓰기 전용, 읽기/쓰기 전용인지 쉽게 파악할 수 있습니다.

    lSsi9NY.png

     

     

    분산되어 있는 필드와 맴버를 마이크로소프트의 StyleCop 규칙에 맞게 정리합니다. 아래와 같이 필드와 속성을 메서드 사이에 분산해서 코딩합니다.

    Program.cs

    using System;
    using System.Threading;
    namespace ConsoleApp1
    {
        internal class Program
        {
            public string name;
     
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private static void Main(string[] args)
            {
                if (args.Length > 0)
                {
                    foreach (var arg in args)
                    { Console.WriteLine(arg); }
                }
     
                Thread thread1 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 1: {0}", i);
                    }
                });
     
                Thread thread2 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 2: {0}", i);
                    }
                });
     
                Thread thread3 = new Thread((ThreadStart)delegate
                {
                    for (int i = 1; i < 100; i++)
                    {
                        Console.WriteLine("Thread 3: {0}", i);
                    }
                });
                
                thread1.Start();
                thread2.Start();
                thread3.Start();
                Console.ReadKey();
            }
            public int age; public int Age
            {
                get
                {
                    return age;
                }
                set
                {
                    age = value;
                }
            }
     
            public string Address { get; set; }
            
            #region Member Methods        
            public static void Run1()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 1: {0}", i);
                }
            }
     
            public static void Run2()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 2: {0}", i);
                }
            }
     
            public static void Run3()
            {
                for (int i = 1; i < 100; i++)
                {
                    Console.WriteLine("Thread 3: {0}", i);
                }
            }
            #endregion Member Methods    
        }
    }
    

     

     

    위 코드의 필드와 속성이 메서드와 섞여있습니다. 아래 그림과 같이 재구성하게 되면 필드, 속성, 인덱서, 메서드등등... 자동으로 정리됩니다.

    PydjiJ6.png

     

     

    실행한 후 맴버들이 재구성된 모습니다.

    3f1JFLu.png

     

     

    불필요한 줄바꿈을 제거 해줍니다.

    이 작업은 라인을 정리 하기전에 영역을 선택해야 합니다.

    x3QfLoj.png

     

     

    선택한 속성의 줄바꿈이 제거 되었습니다. 보통 간단한 반복기나 속성 및 인덱서의 경우 한줄로 표시하곤 합니다. 비주얼 스튜디오에서 자동으로 서식이 지정될 때 원하는 영역을 선택하고 라인을 제거할 수 있습니다.

    UGGz1cl.png

     

     

    이외에도 비주얼 스튜디오의 솔루션 탐색기와 통합되어, 한번에 코드를 정리 할 수 있고 솔루션 트리를 축소 할 수도 있습니다. 자잘한 기능들이 많이 있지만, 이외에 그렇게 사용할 만한 기능은 없네요^^;

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    profile_image

    쏜프로님의 댓글

    no_profile 쏜프로 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    감사합니다. 많은 도움을 받고 있습니다!