연습: Visual Basic에서 개체 유지

업데이트: 2007년 11월

디자인 타임에 개체의 속성을 기본값으로 설정할 수 있지만 런타임에 입력된 값은 개체가 소멸되면 손실됩니다. Visual Basic에서 serialization을 사용하여 인스턴스 간에 개체의 데이터를 유지할 수 있습니다. 이렇게 하면 값을 저장하여 다음에 해당 개체가 인스턴스화될 때 이 값을 검색할 수 있습니다.

이름이나 숫자와 같은 간단한 데이터를 저장하려면 My.Settings 개체를 사용할 수 있습니다. 자세한 내용은 My.Settings 개체를 참조하십시오.

이 연습에서는 간단한 Loan 개체를 만들고 해당 개체의 데이터를 파일에 저장합니다. 그런 다음 개체를 다시 만들 때 파일에서 데이터를 검색합니다. 마지막으로, 코드를 수정하여 개체를 SOAP 형식으로 유지합니다.

보안 정보:

이 예제에서는 파일이 없는 경우 새 파일을 만듭니다. 응용 프로그램에서 파일을 만들어야 하는 경우 해당 응용 프로그램에는 폴더에 대해 Create 권한이 필요합니다. 사용 권한은 액세스 제어 목록을 사용하여 설정됩니다. 해당 파일이 이미 있으면 응용 프로그램에는 더 낮은 수준의 권한인 Write 권한만 있으면 됩니다. 가능하면 배포하는 동안 파일을 만들고 폴더에 대한 Create 권한 대신 파일 하나에 대한 Read 권한만 부여하는 것이 보안상 안전합니다. 또한 루트 폴더나 Program Files 폴더보다 사용자 폴더에 데이터를 쓰는 것이 더 안전합니다.

보안 정보:

이 예제는 데이터를 이진 또는 SOAP 형식의 파일에 저장합니다. 암호나 신용 카드 정보와 같은 중요한 데이터에 이러한 형식을 사용하면 안 됩니다.

참고:

실제 설정이나 버전에 따라서 화면에 나타나는 대화 상자와 메뉴 명령이 도움말의 설명과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 클릭합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

Loan 개체 만들기

첫 번째 단계는 Loan 클래스와 이 클래스를 사용하는 테스트 응용 프로그램을 만드는 것입니다.

Loan 클래스를 만들려면

  1. 새 클래스 라이브러리 프로젝트를 만들고 이름을 "LoanClass"로 지정합니다. 자세한 내용은 방법: 솔루션 및 프로젝트 만들기를 참조하십시오.

  2. 코드 편집기에서 클래스의 이름을 "Class1"에서 "Loan"으로 변경합니다.

  3. 클래스에 다음의 public 멤버를 추가합니다.

    Public LoanAmount As Double = 10000.0
    Public InterestRate As Double = 7.5
    Public Term As Integer = 36
    Public Customer As String
    

또한 Loan 클래스를 사용하는 간단한 응용 프로그램을 만들어야 합니다.

테스트 응용 프로그램을 만들려면

  1. Windows 응용 프로그램 프로젝트를 솔루션에 추가하려면 파일 메뉴를 클릭하고 추가를 가리킨 다음 새 프로젝트를 클릭합니다.

  2. 새 프로젝트 추가 대화 상자에서 프로젝트의 이름으로 LoanApp를 입력하고 확인을 클릭하여 대화 상자를 닫습니다.

  3. 솔루션 탐색기에서 LoanApp 프로젝트를 선택합니다.

  4. 프로젝트 메뉴에서 시작 프로젝트로 설정을 클릭합니다.

  5. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

  6. 참조 추가 대화 상자에서 프로젝트 탭을 클릭하고 LoanClass 프로젝트를 선택합니다.

  7. 확인을 클릭하여 대화 상자를 닫습니다.

  8. 디자이너에서 TextBox 컨트롤 네 개를 폼에 추가합니다.

  9. 코드 편집기에서 다음 코드를 추가합니다.

    Private TestLoan As New LoanClass.Loan
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

이 시점에서 응용 프로그램을 빌드하고 실행할 수 있습니다. Loan 클래스의 기본값은 텍스트 상자에 표시됩니다. 이자율 값을 7.5에서 7.1로 변경한 다음 응용 프로그램을 닫고 다시 실행합니다. 이자율이 기본값인 7.5로 되돌려집니다.

실제 상황에서 이자율은 주기적으로 변경되지만 응용 프로그램이 실행될 때마다 반드시 변경되는 것은 아닙니다. 따라서 응용 프로그램이 실행될 때마다 사용자가 직접 이자율을 업데이트하는 것보다는 응용 프로그램의 인스턴스 간에서 최신 이자율을 유지하는 것이 더 좋은 방법입니다. 다음 단계에서는 Loan 클래스에 serialization을 추가하여 이러한 작업을 수행합니다.

개체를 유지하기 위해 Serialization 사용

Loan 클래스에 대한 값을 유지하려면 먼저 Serializable 특성을 사용하여 클래스를 표시를 해두어야 합니다.

클래스를 serializable로 표시하려면

  • 다음과 같이 Loan 클래스에 대한 클래스 선언을 변경합니다.

    <Serializable()> Public Class Loan
    

Serializable 특성은 컴파일러에게 클래스 안의 모든 요소가 파일로 보관될 수 있음을 알립니다. 이 경우에 InterestRate 멤버만 유지하도록 하고 Customer, LoanAmount 또는 Period 멤버는 유지하지 않을 수 있습니다. NonSerialized 특성을 사용하면 유지하지 않을 클래스 멤버를 표시해 둘 수 있습니다. 이 예제에서는 간단히 하기 위해서 Customer 멤버를 제외한 모든 요소를 유지합니다.

멤버가 serialize되지 않도록 만들려면

  • 다음과 같이 Customer 멤버에 대한 선언을 변경합니다.

    <NonSerialized()> Public Customer As String
    

다음 단계는 LoanApp 응용 프로그램에 serialization 코드를 추가하는 것입니다. 클래스를 serialize하여 파일에 쓰려면 System.IOSystem.Xml.Serialization 네임스페이스를 사용합니다. 정규화된 이름을 입력하지 않으려면 Imports 문을 사용합니다.

네임스페이스에 대한 참조를 추가하려면

  • 다음의 Imports 문을 Form1 클래스의 맨 위에 추가합니다.

    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    

    이 경우에 사용자는 이진 포맷터를 사용하여 개체를 이진 형식으로 저장합니다. 이 연습의 뒷 부분에서는 코드를 수정하여 개체를 SOAP 형식으로 저장합니다.

다음 단계는 개체가 만들어질 때 파일의 개체를 deserialize하는 코드를 추가하는 것입니다.

개체를 deserialize하려면

  1. serialize된 데이터의 파일 이름에 대한 클래스에 상수를 추가합니다.

    Const FileName As String = "SavedLoan.bin"
    
  2. 다음과 같이 Form1_Load 이벤트 프로시저의 코드를 수정합니다.

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        If File.Exists(FileName) Then
            Dim TestFileStream As Stream = File.OpenRead(FileName)
            Dim deserializer As New BinaryFormatter
            TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)
            TestFileStream.Close()
        End If
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

    먼저 파일이 존재하는지 확인해야 합니다. 파일이 존재하면 Stream 클래스를 만들어 이진 파일을 읽고 BinaryFormatter 클래스를 만들어 파일을 변환합니다. CType 메서드를 사용하면 스트림을 Loan 개체 형식으로 변환할 수 있습니다.

그 다음에는 텍스트 상자에 입력된 데이터를 Loan 클래스에 저장하는 코드를 추가한 다음 클래스를 파일로 serialize해야 합니다.

데이터를 저장하고 클래스를 serialize하려면

  • Form1_Closing 이벤트 프로시저에 다음 코드를 추가합니다.

    Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
    System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TestLoan.LoanAmount = CType(TextBox1.Text, Double)
        TestLoan.InterestRate = CType(TextBox2.Text, Double)
        TestLoan.Term = CType(TextBox3.Text, Integer)
        TestLoan.Customer = TextBox4.Text
    
        Dim TestFileStream As Stream = File.Create(FileName)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(TestFileStream, TestLoan)
        TestFileStream.Close()
    End Sub
    

이 시점에서 응용 프로그램을 다시 빌드하고 실행할 수 있습니다. 처음에는 기본값이 텍스트 상자에 표시됩니다. 값을 변경하고 네 번째 텍스트 상자에 이름을 입력합니다. 응용 프로그램을 닫고 다시 실행합니다. 이제 NonSerialized로 표시된 고객 이름을 제외한 나머지 텍스트 상자에는 새 값이 표시됩니다.

SOAP 형식을 사용하여 개체 유지

지금까지 이 예제에서는 이진 형식을 사용하여 개체를 텍스트 파일에 저장하는 방법을 보여 주었습니다. 대부분의 Windows 응용 프로그램에는 이진 형식을 사용하는 것이 좋습니다. 웹 응용 프로그램 또는 XML Web services의 경우에는 SOAP 형식을 사용하여 개체를 XML 파일에 저장합니다. 이 경우 개체를 공유하기가 쉬워집니다.

개체를 SOAP 형식으로 유지하려면 먼저 SoapFormatter 클래스를 참조해야 합니다. SoapFormatter 클래스는 자체 네임스페이스인 System.Runtime.Serialization.Formatters.Soap에 있습니다.

SOAP 형식을 사용하여 개체를 유지하려면

  1. 솔루션 탐색기에서 LoanApp 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

  3. 참조 추가 대화 상자에서 .NET 탭을 클릭한 다음 System.Runtime.Serialization.Formatters.Soap 구성 요소를 선택합니다.

  4. 확인을 클릭하여 대화 상자를 닫습니다.

  5. 코드 편집기에서 Form1 모듈의 맨 위에 Imports 문을 추가합니다.

    Imports System.Runtime.Serialization.Formatters.Soap
    
  6. 파일 이름을 SavedLoan.bin에서 SavedLoan.xml로 변경합니다.

  7. Form1_Load 이벤트 프로시저에서 Dim 문을 Dim deserializer As New BinaryFormatter에서 다음으로 변경합니다.

    Dim deserializer As New SoapFormatter
    
  8. Form1_Closing 이벤트 프로시저에서 Dim 문을 Dim serializer As New BinaryFormatter에서 다음으로 변경합니다.

    Dim serializer As New SoapFormatter
    

이 시점에서 응용 프로그램을 빌드하고 테스트할 수 있습니다. 응용 프로그램을 처음 실행하면 SavedLoan.xml 파일이 만들어집니다. 파일을 보려면 솔루션 탐색기의 모든 파일 표시 옵션을 선택합니다. 이 파일은 Windows 응용 프로그램 프로젝트의 Bin 노드에 있습니다.

참고:

이미 모든 파일 표시 모드로 설정되어 있는 경우 파일을 보려면 보기 메뉴에서 새로 고침을 클릭하여 보기를 새로 고쳐야 합니다.

LoanClass의 세 멤버가 XML 형식으로 표시됩니다. XML 파일에서 InterestRate 값을 변경한 다음 이 값을 저장하고 응용 프로그램을 다시 실행합니다. 두 번째 텍스트 상자에 새 이자율이 표시됩니다.

참고 항목

개념

Visual Basic 6.0 사용자를 위한 PropertyBag 대응 항목

.NET Framework serialization의 기본 사항