다음을 통해 공유


배열 사용 지침

배열 및 배열 사용에 대한 일반적인 내용은 System.Array 클래스를 참조하십시오.

배열과컬렉션

클래스 라이브러리 디자이너는 배열을 사용할 때와 컬렉션을 반환할 때와 관련하여 어려운 결정을 해야 할 수 있습니다. 이 두 형식의 사용 모델은 유사하지만 성능 특징은 서로 다릅니다. 일반적으로 컬렉션을 조작하기 위한 Add, Remove 또는 기타 메서드가 지원될 때 컬렉션을 사용해야 합니다.

컬렉션 사용에 대한 자세한 내용은 컬렉션 및 데이터 구조를 참조하십시오.

배열 사용

배열의 내부 인스턴스를 반환하지 않습니다. 이렇게 하면 호출 코드가 배열을 변경할 수 있습니다. 다음 예제에서는 Path 속성이 set 접근자를 구현하지 않는 경우에도 해당 속성에 액세스하는 코드에 의해 badChars 배열이 변경되는 방법을 보여 줍니다.

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class ExampleClass
   NotInheritable Public Class Path
      Private Sub New()
      End Sub

      Private Shared badChars() As Char = {Chr(34),"<"c,">"c}
      
      Public Shared Function GetInvalidPathChars() As Char()
         Return badChars
      End Function

   End Class
   
   Public Shared Sub Main()
      ' The following code displays the elements of the 
      ' array as expected.
      Dim c As Char
      For Each c In  Path.GetInvalidPathChars()
         Console.Write(c)
      Next c
      Console.WriteLine()
      
      ' The following code sets all the values to A.
      Path.GetInvalidPathChars()(0) = "A"c
      Path.GetInvalidPathChars()(1) = "A"c
      Path.GetInvalidPathChars()(2) = "A"c
      
      ' The following code displays the elements of the array to the
      ' console. Note that the values have changed.
      For Each c In  Path.GetInvalidPathChars()
         Console.Write(c)
      Next c
   End Sub
End Class
using System;
using System.Collections;

public class ExampleClass
{
   public sealed class Path
   {
      private Path(){}
      private static char[] badChars = {'\"', '<', '>'};
      public static char[] GetInvalidPathChars()
      {
         return badChars;
      }
   }
   public static void Main()
   {
      // The following code displays the elements of the 
      // array as expected.
      foreach(char c in Path.GetInvalidPathChars())
      {
         Console.Write(c);
      }
      Console.WriteLine();

      // The following code sets all the values to A.
      Path.GetInvalidPathChars()[0] = 'A';
      Path.GetInvalidPathChars()[1] = 'A';
      Path.GetInvalidPathChars()[2] = 'A';

      // The following code displays the elements of the array to the
      // console. Note that the values have changed.
      foreach(char c in Path.GetInvalidPathChars())
      {
         Console.Write(c);
      }
   }
}

badChars 배열을 readonly(Visual Basic의 경우 ReadOnly)로 지정하여 앞의 예제에서 나타나는 문제점을 수정할 수 없습니다. badChars 배열을 복제하고 해당 복사본을 반환할 수 있지만 이는 성능에 상당한 영향을 줍니다. 자세한 내용은 아래에 나오는 하위 단원, 배열을 반환하는 속성을 참조하십시오. 다음 코드 예제에서는 GetInvalidPathChars 메서드를 수정하여 badChars 배열의 복제본을 반환하는 방법을 보여 줍니다.

Public Shared Function GetInvalidPathChars() As Char()
   Return CType(badChars.Clone(), Char())
End Function
public static char[] GetInvalidPathChars()
{
   return (char[])badChars.Clone();
}

배열을 반환하는 속성

배열을 반환하는 속성으로 인한 코드의 비효율성을 방지하려면 컬렉션을 사용해야 합니다. 다음 코드 예제에서는 myObj 속성을 호출할 때마다 해당 배열의 복사본이 만들어집니다. 따라서 다음 루프에서는 2n+1개의 배열 복사본이 만들어집니다.

Dim i As Integer
For i = 0 To obj.myObj.Count - 1
   DoSomething(obj.myObj(i))
Next i
for (int i = 0; i < obj.myObj.Count; i++)
      DoSomething(obj.myObj[i]);

자세한 내용은 속성과 메서드 간의 선택을 참조하십시오.

배열을 반환하는 필드

배열의 readonly(Visual Basic의 경우 ReadOnly) 필드를 사용하지 않습니다. 이러한 필드를 사용하면 배열은 읽기 전용이어서 변경할 수 없지만 배열의 요소는 변경할 수 있습니다. 다음 코드 예제에서는 읽기 전용 배열 InvalidPathChars의 요소를 변경하는 방법을 보여 줍니다.

public sealed class Path
{
   private Path(){}
   public static readonly char[] InvalidPathChars = {'\"', '<', '>','|'}'
}
//The following code can be used to change the values in the array.
Path.InvalidPathChars[0] = 'A';

컬렉션에서 인덱싱된 속성 사용

인덱싱된 속성은 컬렉션 클래스 또는 인터페이스의 기본 멤버로만 사용합니다. 컬렉션 이외의 형식에서는 함수 패밀리를 만들지 않습니다. Add, Item, Count 등의 메서드 패턴은 해당 형식이 컬렉션이어야 함을 알립니다.

빈 배열 반환

StringArray 속성은 null 참조를 반환하지 않아야 합니다. 다음 컨텍스트에서는 Null을 이해하기 어려울 수 있습니다. 예를 들어, 사용자는 다음 코드가 올바르게 작동할 것으로 가정할 수 있습니다.

Public Sub DoSomething()
   Dim s As String = SomeOtherFunc()
   If s.Length > 0 Then
      ' Do something else.
   End If
End Sub
public void DoSomething()
{
   string s = SomeOtherFunc();
   if (s.Length > 0)
   {
      // Do something else.
   }
}

일반적인 규칙은 null, 빈 문자열("") 및 빈 배열(항목이 0개인 배열)이 동일한 방식으로 처리되어야 한다는 것입니다. 따라서 null 참조 대신 빈 배열을 반환합니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

참고 항목

참조

Array

개념

사용 지침

기타 리소스

클래스 라이브러리 개발을 위한 디자인 지침