문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Visual Basic 코딩 규칙

다음 지침은 샘플과 설명서를 개발하기 위해 Microsoft에서 사용하는 지침입니다. Visual Basic 언어 사양에서는 코딩 표준을 정의하지 않습니다.

  • 코딩 규칙을 사용하면 사용자가 레이아웃이 아닌 코드의 내용에 집중할 수 있도록 일관성 있는 모양의 코드를 만들 수 있습니다.

  • 규칙을 사용하면 사용자가 이전 경험을 기반으로 예상할 수 있기 때문에 코드를 더 신속하게 이해할 수 있습니다.

  • 규칙을 사용하면 코드를 더 쉽게 복사하고 변경하며 유지할 수 있습니다.

  • 규칙에는 Visual Basic에서의 "최선의 방법"이 반영되어 있습니다.

명명 규칙

  • 명명 지침은 클래스 라이브러리 개발을 위한 디자인 지침에 설명되어 있습니다.

  • Visual Studio 디자이너 도구로 만든 개체의 이름을 지침에 맞게 변경할 필요는 없습니다.

  • Imports 문을 추가하는 대신 네임스페이스 한정자를 사용합니다. 프로젝트에서 기본적으로 네임스페이스를 가져오는 경우에는 코드를 복사하고 붙여넣을 때 코드가 IntelliSense에서 비정규화된 상태로 실행되므로 코드를 정규화할 필요가 없습니다. 긴 줄로 된 코드를 읽기 쉽도록 분리할 때 정규화된 이름은 "."다음에 분리할 수 있습니다. 예를 들면 다음과 같습니다.

    
    Dim collection As System.Diagnostics. 
           InstanceDataCollectionCollection
    
    
    
  • 변수 이름의 일부로 "My"나 "my"를 사용하지 마십시오. My 개체와 혼동될 수 있습니다.

레이아웃 규칙

좋은 레이아웃에서는 서식 지정을 사용하여 코드 구조를 명확히 나타내고 코드를 쉽게 읽을 수 있도록 합니다.

  • 서식 다시 적용 기능을 사용하여 코드를 기본 설정(자동 들여쓰기, 네 자 들여쓰기, 탭을 공백으로 저장)으로 서식 지정합니다. 자세한 내용은 옵션 대화 상자, 텍스트 편집기, Basic, VB 관련을 참조하십시오.

  • 한 줄에 하나의 문만 사용합니다. Visual Basic 줄 연속 문자(:)를 사용하지 마십시오.

  • 한 줄에 하나의 선언만 사용합니다.

  • 서식 다시 적용 기능에서 연속된 줄의 서식을 지정하지 않는 경우 연속된 줄을 탭 정지 하나만큼 들여 씁니다.

  • 메서드 및 속성 정의 사이에 적어도 하나 이상의 빈 줄을 추가합니다.

주석 규칙

  • 코드 줄의 끝에는 주석을 사용하지 않습니다. 주석은 별도의 줄에 삽입합니다.

  • 주석 텍스트는 대문자로 시작합니다.

  • 주석 끝에는 마침표를 찍습니다.

  • 주석 구분 기호(')와 주석 텍스트 사이에 공백 하나를 삽입합니다.

    
    ' Here is a comment.
    
    
    
  • 주석을 서식이 지정된 별표 블록으로 둘러싸지 마십시오.

프로그램 구조

  • Main 메서드를 사용할 때는 새 콘솔 응용 프로그램에 대해 기본 구조를 사용하고 명령줄 인수에 대해 My를 사용합니다.

    
    Sub Main()
      For Each argument As String In My.Application.CommandLineArgs
        ' Add code here to use the string variable.
      Next
    End Sub
    
    
    

언어 지침

String 데이터 형식

  • &를 사용하여 문자열을 연결합니다.

    
    MsgBox("hello" & vbCrLf & "goodbye")
    
    
    
  • 루프에 문자열을 추가하려면 StringBuilder 개체를 사용합니다.

    
    Dim longString As New System.Text.StringBuilder
    For count As Integer = 1 To 1000
      longString.Append(count)
    Next
    
    
    

형식 유추

지역 형식 변수에 대해 형식 유추를 사용합니다.


Public Sub GetQuery()
  Dim filterValue = "London"
  Dim query = From customer In customers 
              Where customer.Country = filterValue
End Sub


이벤트 처리기의 완화된 대리자

코드에서 이벤트 인수를 사용하지 않는 경우 완화된 대리자를 사용하고 이벤트 인수를 포함하지 않습니다.


Public Sub Form1_Load() Handles Form1.Load
End Sub


부호 없는 데이터 형식

  • 메모리가 최상의 상태에 있지 않는 한 부호 없는 형식 대신 Integer를 사용합니다.

배열

  • 선언 줄에 배열을 초기화할 때는 간단한 구문을 사용합니다.

    
    Dim letters1() As String = {"a", "b", "c"}
    
    
    

    아래 예제 보다는 위 예제와 같이 작성합니다.

    
    Dim letters2() As String = New String() {"a", "b", "c"}
    
    
    
  • 형식 대신 변수에 배열 지정자를 삽입합니다.

    
    Dim letters3() As String = {"a", "b", "c"}
    
    
    

    아래 예제 보다는 위 예제와 같이 작성합니다.

    
    Dim letters4 As String() = {"a", "b", "c"}
    
    
    
  • 기본 데이터 형식의 배열을 선언하고 초기화할 때 {} 구문을 사용합니다.

    
    Dim letters5() As String = {"a", "b", "c"}
    
    
    

    아래 예제 보다는 위 예제와 같이 작성합니다.

    
    Dim letters6(2) As String
    letters6(0) = "a"
    letters6(1) = "b"
    letters6(2) = "c"
    
    
    

With 키워드 사용

한 개체에 대해 여러 호출을 사용하는 경우에는 With 키워드를 사용합니다.


With orderLog
  .Log = "Application"
  .Source = "Application Name"
  .MachineName = "Computer Name"
End With


For 또는 For Each 문에서 루프 변수에 대해 형식 유추 사용.

루프 범위 변수의 형식을 결정하기 위해 형식 유추를 허용합니다.

다음은 For 문에서 형식 유추를 사용하는 예입니다.


For count = 0 To 2
  MsgBox(names(count))
Next


다음은 For Each 문에서 형식 유추를 사용하는 예입니다.


For Each name In names
  MsgBox(name)
Next


예외 처리를 위해 Try...Catch 및 Using 문 사용

  • On Error Goto를 사용하지 마십시오.

  • 예외를 처리하려면 Try...Catch 문을 사용합니다.

    
    Dim conn As New SqlConnection("connection string")
    Try
      Conn.Open()
    Catch ex As SqlException
    
    Finally
      Conn.Close()
    End Try
    
    
    
  • Using 문은 Try...Catch 문과 Dispose 메서드 호출을 결합하여 코드를 간단하게 만듭니다. Try...Catch 문을 사용하고 Finally 블록의 코드에서만 Dispose 메서드를 호출하는 경우 대신 Using 문을 사용합니다.

    
    Using redPen As New Pen(color.Red)
      ' Insert code here.
    End Using
    
    
    

IsNot 키워드 사용

Not...Is Nothing 보다 IsNot 키워드를 우선적으로 사용합니다.

AndAlso 및 OrElse 키워드 사용

불필요한 코드를 건너뛰어 예외를 방지하고 성능을 향상하려면 비교를 수행할 때 And 대신 AndAlso를 사용하고 Or 대신 OrElse를 사용합니다.


' Avoid a null reference exception. If the left side of the AndAlso 
' operator is False, the right side is not evaluated and a null 
' exception is not thrown.
If nullableObject IsNot Nothing AndAlso nullableObject = testValue Then

End If

' Avoid an unnecessary resource-intensive operation. If the left side
' of the OrElse operator is True, the right side is not evaluated and 
' a resource-intensive operation is not called.
If testCondition OrElse ResourceIntensiveOperation() Then

End If


폼의 기본 인스턴스

My.Forms.Form1.ShowDialog 대신 Form1.ShowDialog를 사용합니다.

New 키워드

  • 간단한 인스턴스를 사용합니다.

    
    Dim employees As New List(Of String)
    
    
    

    앞의 줄은 다음과 동일합니다.

    
    Dim employees2 As List(Of String) = New List(Of String)
    
    
    
  • 매개 변수 없는 생성자 대신 새 개체에 대해 개체 이니셜라이저를 사용합니다.

    
    Dim orderLog As New EventLog With { 
        .Log = "Application", 
        .Source = "Application Name", 
        .MachineName = "Computer Name"}
    
    
    

이벤트 처리

  • AddHandler 대신 Handles를 사용합니다.

    
    Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
    End Sub
    
    
    
  • AddressOf 를 사용하고 대리자를 명시적으로 인스턴스화하지 않습니다.

    
    Dim closeItem As New ToolStripMenuItem( 
        "Close", Nothing, AddressOf ToolStripMenuItem1_Click)
    Me.MainMenuStrip.Items.Add(closeItem)
    
    
    
  • 이벤트를 정의할 때는 간단한 구문을 사용하고 컴파일러에서 대리자를 정의하도록 합니다.

    
    Public Event WhatHappened(ByVal source As Object, 
                              ByVal e As WhatHappenedEventArgs)
    
    
    
  • RaiseEvent 메서드를 호출하기 전에 이벤트가 Nothing(null)인지 확인하지 마십시오. RaiseEvent 는 이벤트를 발생시키기 전에 Nothing을 확인합니다.

공유 멤버 사용

인스턴스 변수에서 호출하지 않고 클래스 이름을 사용하여 Shared 멤버를 호출합니다.

MsgBox 함수 사용

MessageBox.ShowConsole.WriteLine 대신 MsgBox를 사용합니다. MsgBox 함수를 지원하지 않는 Silverlight와 같은 환경에서 적절한 대체 방법을 사용합니다.

My 네임스페이스 사용

.NET Framework 클래스 라이브러리나 Visual Basic 런타임 라이브러리보다 My 기능을 우선적으로 사용합니다. 자세한 내용은 개체(Visual Basic)를 참조하십시오.

XML 리터럴 사용

XML 리터럴을 사용하면 XML을 사용할 할 때 가장 일반적으로 수행하는 로드, 쿼리, 변환과 같은 작업을 간단하게 만들 수 있습니다. XML을 개발할 때 다음 지침을 따릅니다.

  • XML API를 직접 호출하는 대신 XML 리터럴을 사용하여 XML 문서 및 조각을 만듭니다.

  • 파일 또는 프로젝트 수준에서 XML 네임스페이스를 가져와서 XML 리터럴의 성능 최적화를 활용합니다.

  • XML 축 속성을 사용하여 XML 문서의 요소 및 특성에 액세스합니다.

  • Add 메서드와 같은 API 호출을 사용하는 대신 포함 식을 사용하여 값을 포함하고 기존 값에서 XML을 만듭니다.

    
    Private Function GetHtmlDocument( 
        ByVal items As IEnumerable(Of XElement)) As String
    
      Dim htmlDoc = <html>
                      <body>
                        <table border="0" cellspacing="2">
                          <%= 
                            From item In items 
                            Select <tr>
                                     <td style="width:480">
                                       <%= item.<title>.Value %>
                                     </td>
                                     <td><%= item.<pubDate>.Value %></td>
                                   </tr> 
                          %>
                        </table>
                      </body>
                    </html>
    
      Return htmlDoc.ToString()
    End Function
    
    
    

LINQ 쿼리

  • 쿼리 변수에 의미 있는 이름을 사용합니다.

    
    Dim seattleCustomers = From cust In customers 
                           Where cust.City = "Seattle"
    
    
    
  • 쿼리의 요소에 별칭을 지정하여 익명 형식의 속성 이름이 파스칼식 대/소문자에 따라 올바로 대문자로 표시되도록 합니다.

    
    Dim customerOrders = From customer In customers 
                         Join order In orders 
                           On customer.CustomerID Equals order.CustomerID 
                         Select Customer = customer, Order = order
    
    
    
  • 결과의 속성 이름이 모호한 경우 속성 이름을 바꿉니다. 예를 들어 쿼리에서 고객 이름과 주문 ID를 반환하는 경우 결과에서 NameID로 남겨두지 않고 다음과 같이 이름을 바꿉니다.

    
    Dim customerOrders2 = From cust In customers 
                          Join ord In orders
                            On cust.CustomerID Equals ord.CustomerID 
                          Select CustomerName = cust.Name, 
                                 OrderID = ord.ID
    
    
    
  • 쿼리 변수 및 범위 변수의 선언에서 형식 유추를 사용합니다.

    
    Dim customerList = From cust In customers
    
    
    
  • 쿼리 절을 From 문 아래에 정렬합니다.

    
    Dim newyorkCustomers = From cust In customers 
                           Where cust.City = "New York" 
                           Select cust.LastName, cust.CompanyName
    
    
    
  • 다른 쿼리 절 앞에 Where 절을 사용하여 나중 쿼리 절이 필터링되어 축소된 데이터 집합에 대해 실행되게 합니다.

    
    Dim newyorkCustomers2 = From cust In customers 
                            Where cust.City = "New York" 
                            Order By cust.LastName
    
    
    
  • Where 절을 사용하여 조인을 암시적으로 정의하는 대신 Join 절을 사용하여 조인을 명시적으로 정의합니다.

    
    Dim customerList2 = From cust In customers 
                        Join order In orders 
                          On cust.CustomerID Equals order.CustomerID 
                        Select cust, order
    
    
    

Visual Basic 런타임 라이브러리 멤버 사용

.NET Framework 클래스 라이브러리보다 Visual Basic 런타임 라이브러리를 우선적으로 사용합니다.

커뮤니티 추가 항목

추가
표시: