ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Coding Convention] 프로그래밍 습관
    프로그래밍 언어 2022. 4. 15. 14:32

     - #region 을 활용하여 관련 있는 코드는 묶기. 접었을 때 코드 찾기에 수월

     - private, public 멤버 변수는 파일의 맨 위에 두고 아래 메소드를 작성

     - 숫자 값을 하드코딩이 아닌 readonly 나 const 을 사용하기

       그러나 상수의 사용(생성)은 자제해야 하며 필요하다면 데이터베이스나 파일에 기록하여 사용해야 함.

       추후 수정이 필요한 경우 모든 관련 어셈블리를 다시 빌드해야 하기 때문(readonly를 사용 추천)

     - 문자열을 하드코딩 하지 않기

     - 문자열을 비교할 때는 대문자(혹은 소문자)로 변경한 뒤 수행하기 (Equal 메소드의 오버로드 중 비교타입에 IgnoreCase 를 설정해도 됨)

     

     예)

    if (name.ToLower() == "john")
    {
    	//...
    }

     - ""대신에 string.Empty 를 사용하기

     예)

    if (name == String.Empty)
    {
    	// do something
    }

     - 멤버 변수의 사용을 자제하기. 여러 메소드에서 사용해야 될 필요가 있는 변수는 메소드의 인자로 전달하는 구조를 사용. 멤버 변수를 사용했을 때 오류가 발생(중간에 값이 예기치 않게 변경)하면 어디서 바뀌었는지 찾기 힘듦.

     - 열거형(enum) 대신 숫자나 문자열을 사용하지 않기.

     예)

    enum MailType
    {
    	Html,
        PlainText,
        Attachment
    }
    
    void SendMail (string message, MailType mailType)
    {
    	switch (mailType)
        {
        	case MailType.Html:
            	//Do something
                break;
            case MailType.PlainText;
            	//Do something
                break;
            case MaiType.Attachment;
            	//Do something
                brea;
            default:
            	//Do something
                break;
         }
    }

    나쁜 예)

    void SendMail (string message, string mailType)
    {
    	switch (mailType)
        {
        	case "Html":
            	//Do something
                break;
            case "PlainText";
            	//Do something
                break;
            case "Attachment";
            	//Do something
                break;
            default:
            	//Do something
                break;
        }
    }

     - 이벤트 핸들러에서 해당 이벤트의 작업을 수행하지 말고, 별도의 메소드를 호출하여 처리

     -  로컬 경로나 드라이브명을 하드코딩 하지 않기

     - 실행 경로가 특정한 곳(C:\)일 것이라는 가정하에 코딩하지 않기

     - 어플리케이션이 시작되면 '셀프 체크'를 수행하여 필요한 파일들이 있는지 등을 확인하고 문제가 있다면 사용자에게 친절한 오류메세지를 보여주기

     - 오류 메세지는 사용자로 하여금 문제 해결에 도움을 주는 단서가 됨. '오류가 발생하였습니다.', '어플리케이션 오류' 와 같은 메세지 대신 '데이터베이스 접속에 실패하였습니다. 로그인ID와 비밀번호를 확인하여 주십시오.' 와 같은 메세지를 보여주기.

     - 사용자에게는 짧지만 친절한 메세지를 보여주되, 실제로는 알 수 있는 모든 정보를 기록한 로그파일을 만들어야 함. 이는 나중에 디버깅할 때 도움 됨.

     - 컬렉션을 리턴 값으로 가지는 메소드가 있다면, 값이 없는 경우에 null 을 넘겨주기

     - 데이터 베이스를 소켓, 파일스트림 등을 통해 열었을 때는 닫는 로직을 finally 이나 using을 사용. 이는 열고난 이후 닫기 전에 오류가 발생하여도 마지막에는 닫을 수 있도록 해줌.

     - 루프 문에서 문자열 처리를 해야 할 때는 String 클래스 대신에 StringBuilder 클래스를 사용. String 객체는 동작방식이 미묘하여 문자열에 대해 새로운 작업(+, remove 등)이 일어날 때 이전 객체는 파기하고 항상 새로운 객체를 생성하도록 되어있음. (이러한 작업은 비용이 많이 듦)

     

Designed by Tistory.