PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net |

사용자정의(Class) 개체만들어서 LINQ..

DataGridView와 DataTable와 더불어...,
언어적 기초가 되는 부분을 좀더 챙기면서 가도록 하자
VB.Net의 활용은 어느 부분을 먼저챙겨야 할지 모든 내용이 서로,서로 물려있다
그러니, 이 페이지에서 이해가 안되도, 몇페이지 더 나가면서 다시 보면 점점 자신의 것이 된다

프로그래밍을 하면서 가장 빈도수가 높은 에러중의 하나는 정보의 타입을
잘못사용하였을 경우가 많다



흔히 만나는 에러다, 어떤 타입의 정보를 어떤 다른타입으로 사용하려고 한다는
에러인 것이다
이런 것을 만나도 당황하지 않고 적절한 타입의 정보로 바꿔서 사용할줄 알면 된다
특히 VB.Net에서는 다양한 개체타입을 사용하게 되고
이것이 또한 VB.Net의 파워다
우리는 정보를 보관도 하고 가공도 하고 새로운 정보를 결과물로 만들어야 한다
그러려면 정보를 좀더 잘 관리하는 방법을 강구해야 하는 것이고
이때 이야기를 하게 되는 것이 [사용자정의 개체]를 생각하자는 것이된다
변수를 정의하여 사용하듯이 [사용자정의 개체]를 사용하게 되는 환경이 VB.Net이다
VB.Net의 다양한 자원을(실은 .Net FrameWork의 자원) 최대한 잘 활용하여야 하는 것이고
활용을 잘하기 위하여서는 Class라는 것, 사용자정의 개체를 다루지 않으면 안된다
물론 LINQ를 사용할때도 Class의 활용을 하는 것과 하지 않는 것은 차이가 많다
예를 들어서 정보를 1,2,3,4,5 라고 하는 것을 보관하고 처리한다고 하면
배열이나 List(Of Type)을 사용하면 되겠다
하지만
어떤 정보가 [1,A,234];[ 2,B,123]; [3,C,342] 등과 같이 하나의 정보가 또 3가지의 정보를
갖고 있다면 어떻게 처리해야 할까..
좀 복잡해진다, 물론 배열이나 List(Of Type) 을 요리조리 사용하면 되겠지만
Class를 알고, 수시로 활용하면 그런 무리한 짓을 하지 않아도 되는 것
이번 페이지에서는
Class를 알고 활용하기 위한 작업을 하나,하나 LINQ와 같이 사용하면서 해보도록 하자

Object타입 개체를 우선 하나 알아두는 것이 좋다
이것은 엑셀의 Variant타입변수와 같이 융통성이 있는 개체이다
예를 들어서 VSTO로 작업을 할때 엑셀의 시트의 셀의 값을
Object타입으로 받아놓고 작업을 하는 것이 좋다
왜냐면 엑셀의 시트의 셀은 숫자일수도 있고, 문자일수도 있고, 논리값일때도 있으니
VB.Net에서 이해할때는 어떤 값인지 알 수가 없다
엑셀,VBA의 Variant타입에 해당한다고 생각하시면 편리하다
아마도 VBA를 하시다가 VB.net으로 와서 VSTO라는 좋은 도구를 만나서 코딩을 하면서
혼란스러워지는 것이 정보의 타입을 어떻게 가름하느냐는 문제일 것이다

그래서 그 Object타입 개체를 한번 사용해 보자
하나의 개체가 A,B,C라는 속성을 갖고 있고
이개체를 100개를 만든다고 할때..

Dim oList As New List(Of Object)
For iX As Integer = 1 To 100
    oList.Add(New With {.A = Int(Rnd() * 100) + 100, _
                        .B = Int(Rnd() * 1000) + 1000, _
                        .C = Int(Rnd() * 10000) + 10000})
Next

New With {...} 는 편리한 코딩방법이지만 Object타입에 있어서 
속성을 몇개 사용할때는 위의 내용을 아래와 같이 작성하면 에러..

Dim oX As Object = Nothing
For iX As Integer = 1 To 100
    oX = New Object
    oX.a = Int(Rnd() * 100) + 100
    oX.b = Int(Rnd() * 1000) + 1000
    oX.c = Int(Rnd() * 10000) + 10000
    oList.Add(oX)
Next
    

위에서 만든 Object개체를 만들어서 사용하기 보다는 사용자정의 개체를 만들어서
사용하는 것이 좋은 방법일 것이다
아래와 같이 만들어서 사용할수도 있고

Class clsMyClassBad
    Public A As Long
    Public B As Long
    Public C As Long
End Class
   

위와 같이 아주 간단한 정보의 저장을 위하여 만들어서 사용할수도 있지만
.NetFrameWork의 다양한 개체들과 잘 어울려 지내게 하려면
아래와 같은 정식 Property(속성)으로 구성하는 것이 바른 방법이다
위의 경우는 속성이라고 하지만 정식으로는 Field라고 한다
즉 정상적인 (다른 .NetFrameWork 개체들과 대화가 잘되는 )속성은 아니다

Class clsMyClass
Private A_ As String
Public Property A() As String
    Get
        Return A_
    End Get
    Set(ByVal value As String)
        A_ = value
    End Set
End Property
Private B_ As String
Public Property B() As String
    Get
        Return B_
    End Get
    Set(ByVal value As String)
        B_ = value
    End Set
End Property

Private C_ As String
Public Property C() As String
    Get
        Return C_
    End Get
    Set(ByVal value As String)
        C_ = value
    End Set
End Property

End Class

위의 내용을 모두 아래 화일에서 응용해 보았으니
비교하면서, 아하..이것은 이렇게 사용하여야겠구나...
라는 감각들을 키우시기를

***[LOG-IN]***