개체 지향 프로그래밍 (Visual Basic)Object-oriented programming (Visual Basic)

Visual Basic은 캡슐화, 상속 및 다형성을 포함 하는 개체 지향 프로그래밍에 대 한 완전 한 지원을 제공 합니다.Visual Basic provides full support for object-oriented programming including encapsulation, inheritance, and polymorphism.

캡슐화는 서로 관련된 속성, 메서드 및 기타 멤버의 그룹을 하나의 단위나 개체로 취급하는 것을 말합니다.Encapsulation means that a group of related properties, methods, and other members are treated as a single unit or object.

상속은 기존 클래스를 기반으로 새로운 클래스를 만들 수 있는 능력을 나타냅니다.Inheritance describes the ability to create new classes based on an existing class.

다형성은 동일한 속성 또는 메서드를 각각 다른 방식으로 구현하는 여러 클래스를 서로 교체하여 사용할 수 있음을 의미합니다.Polymorphism means that you can have multiple classes that can be used interchangeably, even though each class implements the same properties or methods in different ways.

이 단원에서는 다음과 같은 개념에 대해 설명합니다.This section describes the following concepts:

클래스 및 개체Classes and objects

클래스개체를 혼용하는 경우가 있지만 클래스는 개체의 형식을 나타내고 개체는 사용 가능한 클래스의 인스턴스를 나타냅니다.The terms class and object are sometimes used interchangeably, but in fact, classes describe the type of objects, while objects are usable instances of classes. 따라서 개체를 만드는 작업을 인스턴스화라고 합니다.So, the act of creating an object is called instantiation. 청사진에 비유한다면 클래스는 청사진이고 개체는 해당 청사진을 사용하여 만든 빌딩입니다.Using the blueprint analogy, a class is a blueprint, and an object is a building made from that blueprint.

클래스를 정의하려면To define a class:

Class SampleClass
End Class

또한 Visual Basic는 큰 개체 배열을 만들어야 하 고 해당 개체에 너무 많은 메모리를 사용 하지 않으려는 경우에 유용 하 게 사용 되는 구조체 라는 클래스의 light 버전을 제공 합니다.Visual Basic also provides a light version of classes called structures that are useful when you need to create large array of objects and do not want to consume too much memory for that.

구조체를 정의하려면To define a structure:

Structure SampleStructure
End Structure

자세한 내용은 다음을 참조하십시오.For more information, see:

클래스 멤버Class members

각 클래스에는 클래스 데이터를 설명하는 속성, 클래스 동작을 정의하는 메서드 및 서로 다른 클래스와 개체 간의 통신을 제공하는 이벤트가 포함된 다양한 클래스 멤버가 있을 수 있습니다.Each class can have different class members that include properties that describe class data, methods that define class behavior, and events that provide communication between different classes and objects.

속성 및 필드Properties and fields

필드 및 속성은 개체가 포함하는 정보를 나타냅니다.Fields and properties represent information that an object contains. 필드는 직접 읽거나 설정할 수 있기 때문에 변수와 비슷합니다.Fields are like variables because they can be read or set directly.

필드를 정의하려면To define a field:

Class SampleClass
    Public SampleField As String
End Class

속성에는 값을 설정하고 가져오는 방법을 보다 세밀하게 제어할 수 있는 get 및 set 프로시저가 있습니다.Properties have get and set procedures, which provide more control on how values are set or returned.

Visual Basic를 사용 하면 속성 값을 저장 하기 위한 전용 필드를 만들거나이 필드를 내부적으로 자동으로 만들고 속성 프로시저에 대 한 기본 논리를 제공 하는 자동 구현 속성을 사용할 수 있습니다.Visual Basic allows you either to create a private field for storing the property value or use so-called auto-implemented properties that create this field automatically behind the scenes and provide the basic logic for the property procedures.

자동 구현 속성을 정의하려면To define an auto-implemented property:

Class SampleClass
    Public Property SampleProperty as String
End Class

속성 값을 읽고 쓰기 위해 몇 가지 추가 작업을 수행해야 하는 경우 다음과 같이 속성 값을 저장하기 위한 필드를 정의하고, 속성 값을 저장 및 검색하기 위한 기본 논리를 제공합니다.If you need to perform some additional operations for reading and writing the property value, define a field for storing the property value and provide the basic logic for storing and retrieving it:

Class SampleClass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class

대부분의 속성에는 속성 값을 설정하고 가져오는 메서드나 프로시저가 있습니다.Most properties have methods or procedures to both set and get the property value. 그러나 읽기 전용 또는 쓰기 전용 속성을 만들어 속성을 수정하거나 읽지 못하도록 제한할 수도 있습니다.However, you can create read-only or write-only properties to restrict them from being modified or read. 이렇게 하려면 Visual Basic에서는 ReadOnlyWriteOnly 키워드를 사용하면 되고In Visual Basic you can use ReadOnly and WriteOnly keywords. 하지만 자동 구현 속성은 읽기 전용 또는 쓰기 전용일 수 없습니다.However, auto-implemented properties cannot be read-only or write-only.

자세한 내용은 다음을 참조하십시오.For more information, see:

메서드Methods

메서드는 개체에서 수행할 수 있는 작업입니다.A method is an action that an object can perform.

참고

Visual Basic에서는 두 가지 방법으로 메서드를 만들 수 있습니다. 메서드가 값을 반환하지 않으면 Sub 문을 사용하고 메서드가 값을 반환하면 Function 문을 사용합니다.In Visual Basic, there are two ways to create a method: the Sub statement is used if the method does not return a value; the Function statement is used if a method returns a value.

클래스의 메서드를 정의하려면To define a method of a class:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class

클래스에는 매개 변수 개수나 매개 변수 형식이 다른 동일한 메서드의 구현 또는 오버로드가 여러 개 있을 수 있습니다.A class can have several implementations, or overloads, of the same method that differ in the number of parameters or parameter types.

메서드를 오버로드하려면To overload a method:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub

대부분의 경우 클래스 정의 내에서 메서드를 선언하지만In most cases you declare a method within a class definition. 그러나 Visual Basic는 클래스의 실제 정의 밖에 있는 기존 클래스에 메서드를 추가할 수 있는 확장 메서드도 지원 합니다.However, Visual Basic also supports extension methods that allow you to add methods to an existing class outside the actual definition of the class.

자세한 내용은 다음을 참조하십시오.For more information, see:

생성자Constructors

생성자는 지정된 형식의 개체를 만들 때 자동으로 실행되는 클래스 메서드로,Constructors are class methods that are executed automatically when an object of a given type is created. 일반적으로 새 개체의 데이터 멤버를 초기화합니다.Constructors usually initialize the data members of the new object. 생성자는 클래스를 만들 때 한 번만 실행할 수 있습니다.A constructor can run only once when a class is created. 또한 생성자의 코드는 항상 클래스의 다른 코드보다 먼저 실행됩니다.Furthermore, the code in the constructor always runs before any other code in a class. 그러나 다른 메서드를 만들 때와 동일한 방법으로 여러 생성자 오버로드를 만들 수 있습니다.However, you can create multiple constructor overloads in the same way as for any other method.

클래스의 생성자를 정의하려면To define a constructor for a class:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

자세한 내용은 개체 수명: 개체가 만들어지고 소멸 되는 방법을 참조 하세요.For more information, see: Object Lifetime: How Objects Are Created and Destroyed.

소멸자Destructors

소멸자는 클래스의 인스턴스를 소멸하는 데 사용됩니다.Destructors are used to destruct instances of classes. .NET Framework에서는 애플리케이션의 관리되는 개체에 대해 가비지 수집기가 자동으로 메모리를 할당하고 해제하지만In the .NET Framework, the garbage collector automatically manages the allocation and release of memory for the managed objects in your application. 애플리케이션에서 만들어지는 관리되지 않는 개체를 정리하려면 여전히 소멸자가 필요할 수 있습니다.However, you may still need destructors to clean up any unmanaged resources that your application creates. 각 클래스에는 소멸자가 하나씩만 있을 수 있습니다.There can be only one destructor for a class.

.NET Framework의 소멸자 및 가비지 수집에 대한 자세한 내용은 가비지 수집을 참조하세요.For more information about destructors and garbage collection in the .NET Framework, see Garbage Collection.

이벤트Events

클래스나 개체에서는 특정 상황이 발생할 때 이벤트를 통해 다른 클래스나 개체에 이를 알려 줄 수 있습니다.Events enable a class or object to notify other classes or objects when something of interest occurs. 이벤트를 보내거나 발생시키는 클래스를 게시자라고 하며 이벤트를 받거나 처리하는 클래스를 구독자라고 합니다.The class that sends (or raises) the event is called the publisher and the classes that receive (or handle) the event are called subscribers. 이벤트를 발생시키고 처리하는 방법에 대한 자세한 내용은 이벤트를 참조하세요.For more information about events, how they are raised and handled, see Events.

중첩 클래스Nested classes

다른 클래스 내에 정의된 클래스를 중첩 클래스라고 합니다.A class defined within another class is called nested. 기본적으로 중첩 클래스는 전용입니다.By default, the nested class is private.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class

중첩 클래스의 인스턴스를 만들려면 다음과 같이 컨테이너 클래스의 이름, 점, 중첩 클래스의 이름을 차례로 입력합니다.To create an instance of the nested class, use the name of the container class followed by the dot and then followed by the name of the nested class:

Dim nestedInstance As Container.Nested = New Container.Nested()

액세스 한정자 및 액세스 수준Access modifiers and access levels

모든 클래스 및 클래스 멤버는 액세스 한정자를 사용하여 다른 클래스에 제공할 액세스 수준을 지정할 수 있습니다.All classes and class members can specify what access level they provide to other classes by using access modifiers.

다음과 같은 액세스 한정자를 사용할 수 있습니다.The following access modifiers are available:

Visual Basic 한정자Visual Basic Modifier 정의Definition
공용Public 동일한 어셈블리의 다른 코드나 해당 어셈블리를 참조하는 다른 어셈블리의 코드에서 형식이나 멤버에 액세스할 수 있습니다.The type or member can be accessed by any other code in the same assembly or another assembly that references it.
프라이빗Private 동일한 클래스의 코드에서만 형식이나 멤버에 액세스할 수 있습니다.The type or member can only be accessed by code in the same class.
보호Protected 동일한 클래스의 코드나 파생 클래스의 코드에서만 형식이나 멤버에 액세스할 수 있습니다.The type or member can only be accessed by code in the same class or in a derived class.
FriendFriend 동일한 어셈블리의 코드에서는 형식이나 멤버에 액세스할 수 있지만 다른 어셈블리의 코드에서는 액세스할 수 없습니다.The type or member can be accessed by any code in the same assembly, but not from another assembly.
Protected Friend 동일한 어셈블리의 코드 또는 다른 어셈블리의 파생 클래스에서 형식이나 멤버에 액세스할 수 있습니다.The type or member can be accessed by any code in the same assembly, or by any derived class in another assembly.

자세한 내용은 Visual Basic의 액세스 수준을 참조 하세요.For more information, see Access levels in Visual Basic.

클래스 인스턴스화Instantiating classes

개체를 만들려면 클래스를 인스턴스화하거나 클래스 인스턴스를 만들어야 합니다.To create an object, you need to instantiate a class, or create a class instance.

Dim sampleObject as New SampleClass()

클래스를 인스턴스화한 후에는 인스턴스의 속성과 필드에 값을 할당하고 클래스 메서드를 호출할 수 있습니다.After instantiating a class, you can assign values to the instance's properties and fields and invoke class methods.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

클래스를 인스턴스화하는 동안 속성에 값을 할당하려면 다음과 같이 개체 이니셜라이저를 사용합니다.To assign values to properties during the class instantiation process, use object initializers:

Dim sampleObject = New SampleClass With
    {.FirstProperty = "A", .SecondProperty = "B"}

자세한 내용은 다음을 참조하십시오.For more information, see:

공유 클래스 및 멤버Shared classes and members

클래스의 공유 멤버는 클래스의 모든 인스턴스에서 공유 하는 속성, 프로시저 또는 필드입니다.A shared member of the class is a property, procedure, or field that is shared by all instances of a class.

공유 멤버를 정의 하려면:To define a shared member:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

공유 멤버에 액세스 하려면이 클래스의 개체를 만들지 않고 클래스의 이름을 사용 합니다.To access the shared member, use the name of the class without creating an object of this class:

MsgBox(SampleClass.SampleString)

Visual Basic 공유 모듈은 공유 멤버만 포함 하며 인스턴스화할 수 없습니다.Shared modules in Visual Basic have shared members only and cannot be instantiated. 공유 멤버도 비공유 속성, 필드 또는 메서드에 액세스할 수 없습니다.Shared members also cannot access non-shared properties, fields or methods

자세한 내용은 다음을 참조하십시오.For more information, see:

무명 형식Anonymous types

익명 형식을 사용하면 데이터 형식에 대한 클래스 정의를 작성하지 않고 개체를 만들 수 있습니다.Anonymous types enable you to create objects without writing a class definition for the data type. 대신 컴파일러가 클래스를 생성합니다.Instead, the compiler generates a class for you. 이 클래스는 사용할 수 있는 이름이 없고 개체를 선언할 때 지정하는 속성을 포함합니다.The class has no usable name and contains the properties you specify in declaring the object.

익명 형식의 인스턴스를 만들려면To create an instance of an anonymous type:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}

자세한 내용은 다음을 참조하세요. 익명 형식을 참조하세요.For more information, see: Anonymous Types.

상속Inheritance

상속을 사용하면 다른 클래스에 정의된 동작을 다시 사용, 확장 및 수정하는 새 클래스를 만들 수 있습니다.Inheritance enables you to create a new class that reuses, extends, and modifies the behavior that is defined in another class. 멤버가 상속되는 클래스를 기본 클래스라고 하고 해당 멤버를 상속하는 클래스를 파생 클래스라고 합니다.The class whose members are inherited is called the base class, and the class that inherits those members is called the derived class. 그러나 Visual Basic의 모든 클래스는 Object .net 클래스 계층 구조를 지원 하 고 모든 클래스에 하위 수준 서비스를 제공 하는 클래스에서 암시적으로 상속 됩니다.However, all classes in Visual Basic implicitly inherit from the Object class that supports .NET class hierarchy and provides low-level services to all classes.

참고

Visual Basic는 다중 상속을 지원 하지 않습니다.Visual Basic doesn't support multiple inheritance. 즉, 파생된 클래스에 대해 하나의 기본 클래스만 지정할 수 있습니다.That is, you can specify only one base class for a derived class.

기본 클래스에서 상속하려면To inherit from a base class:

Class DerivedClass
    Inherits BaseClass
End Class

기본적으로 모든 클래스는 상속될 수 있지만By default all classes can be inherited. 클래스가 기본 클래스로 사용되지 않아야 하는지 여부를 지정하거나 기본 클래스로만 사용될 수 있는 클래스를 만들 수도 있습니다.However, you can specify whether a class must not be used as a base class, or create a class that can be used as a base class only.

클래스가 기본 클래스로 사용될 수 없도록 지정하려면To specify that a class cannot be used as a base class:

NotInheritable Class SampleClass
End Class

클래스가 기본 클래스로만 사용되고 인스턴스화되지 않도록 지정하려면To specify that a class can be used as a base class only and cannot be instantiated:

MustInherit Class BaseClass
End Class

자세한 내용은 다음을 참조하십시오.For more information, see:

멤버 재정의Overriding members

기본적으로 파생 클래스는 해당 기본 클래스에서 모든 멤버를 상속합니다.By default, a derived class inherits all members from its base class. 상속된 멤버의 동작을 변경하려면 해당 멤버를 재정의해야 합니다.If you want to change the behavior of the inherited member, you need to override it. 즉, 파생 클래스에 해당 메서드, 속성 또는 이벤트의 새로운 구현을 정의할 수 있습니다.That is, you can define a new implementation of the method, property or event in the derived class.

다음 한정자는 속성 및 메서드가 재정의되는 방식을 제어하는 데 사용됩니다.The following modifiers are used to control how properties and methods are overridden:

Visual Basic 한정자Visual Basic Modifier 정의Definition
OverridesOverridable 파생 클래스에서 클래스 멤버를 재정의할 수 있도록 합니다.Allows a class member to be overridden in a derived class.
재정의Overrides 기본 클래스에 정의된 가상(재정의 가능) 멤버를 재정의합니다.Overrides a virtual (overridable) member defined in the base class.
NotOverridableNotOverridable 멤버가 상속 클래스에서 재정의되지 않도록 합니다.Prevents a member from being overridden in an inheriting class.
NewMustOverride 파생 클래스에서 클래스 멤버가 재정의되도록 합니다.Requires that a class member to be overridden in the derived class.
OverloadsShadows 기본 클래스에서 상속된 멤버를 숨깁니다.Hides a member inherited from a base class

인터페이스Interfaces

인터페이스는 클래스와 마찬가지로 속성, 메서드 및 이벤트를 정의하지만Interfaces, like classes, define a set of properties, methods, and events. 클래스와는 달리 구현을 제공하지 않습니다.But unlike classes, interfaces do not provide implementation. 인터페이스는 클래스에 의해 구현되며 클래스와는 별개의 엔터티로 정의됩니다.They are implemented by classes, and defined as separate entities from classes. 인터페이스는 계약을 나타내므로 인터페이스를 구현하는 클래스에서는 해당 인터페이스의 모든 부분을 정의된 그대로 정확하게 구현해야 합니다.An interface represents a contract, in that a class that implements an interface must implement every aspect of that interface exactly as it is defined.

인터페이스를 정의하려면To define an interface:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

클래스에서 인터페이스를 구현하려면To implement an interface in a class:

Class SampleClass
    Implements ISampleInterface
    Sub DoSomething
        ' Method implementation.
    End Sub
End Class

자세한 내용은 다음을 참조하십시오.For more information, see:

제네릭Generics

.NET의 클래스, 구조체, 인터페이스 및 메서드는 저장 하거나 사용할 수 있는 개체 형식을 정의 하는 형식 매개 변수 를 포함할 수 있습니다.Classes, structures, interfaces and methods in .NET can include type parameters that define types of objects that they can store or use. 제네릭의 가장 일반적인 예는 컬렉션에 저장할 개체의 형식을 지정할 수 있는 컬렉션입니다.The most common example of generics is a collection, where you can specify the type of objects to be stored in a collection.

제네릭 클래스를 정의하려면To define a generic class:

Class SampleGeneric(Of T)
    Public Field As T
End Class

제네릭 클래스의 인스턴스를 만들려면To create an instance of a generic class:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"

자세한 내용은 다음을 참조하세요.For more information, see:

대리자Delegates

대리자는 메서드 시그니처를 정의하는 형식으로, 호환되는 시그니처가 있는 모든 메서드에 대한 참조를 제공할 수 있습니다.A delegate is a type that defines a method signature, and can provide a reference to any method with a compatible signature. 대리자를 통해 메서드를 호출할 수 있습니다.You can invoke (or call) the method through the delegate. 대리자는 메서드를 다른 메서드에 인수로 전달하는 데 사용됩니다.Delegates are used to pass methods as arguments to other methods.

참고

이벤트 처리기는 대리자를 통해 호출되는 메서드라고 할 수 있습니다.Event handlers are nothing more than methods that are invoked through delegates. 이벤트를 처리할 때 대리자를 사용하는 방법에 대한 자세한 내용은 이벤트를 참조하세요.For more information about using delegates in event handling, see Events.

대리자를 만들려면To create a delegate:

Delegate Sub SampleDelegate(ByVal str As String)

대리자가 지정한 시그니처와 일치하는 메서드에 대한 참조를 만들려면To create a reference to a method that matches the signature specified by the delegate:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class

자세한 내용은 다음을 참조하십시오.For more information, see:

참고 항목See also