PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net |

VB.Net은...
VB.Net은 Visual Basic 이라는 개발언어를 MS의 차세대 윈도우환경인 .NetFrameWork의
자원을 활용하기 위한 확장된 언어이다
그래서 이름도 VB+.NetFrameWork에서 VB.Net이라고 보시면 된다
VB라는 언어는 VBA의 원래의 모습이니 같은 줄기의 언어이다
하지만 VB.Net에서의 언어의 발전은 눈부시다
VBA의 능력은 엑셀이나, 워드나 주어진 개체들과 대화를 나누지만
VB.Net은 여러분이 사용하는 운영체제환경의 모든 개체에 접근한다
이 운영체제에 해당하는 것은 .NetFrameWork로 보시면 된다
컴퓨터의 운영환경이 DOS에서 Window로 Window에서 .NetFrameWork로 환경이
확장되어 현재는 기존의 Window와 .NetFrameWork라이브러리가 추가 장착된 것이다
그러니 VB.Net으로 개발한 소루션이 .NetFrameWork가 설치되지않은 환경에서는
당연히 실행되지 않는다
하지만 지금은 모든 컴퓨터에 .NetFrameWork가 설치되거나
VB.Net으로 개발한 소루션을 설치하면 소루션의 프로젝트속성의 설치옵션에 따라서
설치되니 걱정할 필요는 없다

이 코너에서 사용하는 개발환경은...
MS에서 무료로 배포하는 Visual Studio Express 버전(2010이상)을 다운 받으시면 된다
나중에 VSTO로 엑셀추가기능화일을 만들기 위하여서는 Visual Studio정품을 설치하셔야 하지만
Express 버전으로 우선 시작하도록 하자
웹에서 Visual Studio Express DownLoad를 치시면 MS의 배포사이트로 갈수 있을 것이다
아마도 지금은 2015버전을 다운 받을수 있을 것이다
이곳에서 사용하는 것은 2010버전이니 2010을 찾아서 다운 받는 것이 메뉴등이
달라보이지 않고 좋을 것이다

Console Application 만들어보기..
여러 이야기 보다는 하나씩 만들어 보는 것이 최선이다
여러분의 컴퓨터메뉴에서 맨아래 [프로그램및 화일검색] 텍스트상자에
Command라고 입력하고 엔터를 치면 도스창이 나타난다
이것은 최초의 컴퓨터에서 실행되는 프로그램이였다고 보시면 될 것이다
이창에서 Dos명령을 실행하면 명령대로 줄줄줄 나타날 것이다
지금은 이런 프로그램을 사용하는 사람은 없겠지만...
VB.Net언어를 제공하는 Visual Studio에는 프로젝트 템프릿에 포함되어 있으니
한번 해보고 가는 것이 좋을 것이다

새프로젝트에서 아래의 그림과 같이 Console Application으로 선택한다



그러면 달랑 나타나는 것이 모듈시트가 열리고 내용은 아래와 같다..

Module Module1

Sub Main()

End Sub

End Module

지금은 모두 개체지향 프로그래밍이였지만, 아주 태고적에는 이렇게 달랑
모듈시트에 하고 싶은 작업을 줄줄이 작성하여 사용했던 것 같다
Main 프로시져가 전체 소루션을 끌고 나간다..
그래서 Sub 프로시져라는 말이 만들어진 것이다
Main Procedure 에서 호출하는 다양한 Sub Procedure들이 아주 많이 만들어져서 하나의 프로그램이 되는 것

이곳에 아래와 같이 작성하고

    Sub Main()
        Dim iQ As Integer = 0
        Dim iInput As Integer = 0
        Dim iInput1 As Integer = 0

        While True
            iQ += 1
            Console.WriteLine("{0}) 숫자입력: 첫째숫자", iQ)
            Console.WriteLine()
            Try
                iInput = Console.ReadLine()
            Catch ex As Exception
                iInput = 0
            End Try

            Console.WriteLine("{0}) 숫자입력: 두번째숫자", iQ)
            Try
                iInput1 = Console.ReadLine()
            Catch ex As Exception
                iInput1 = 0
            End Try
            Console.WriteLine("두숫자를 곱하면[ {0} ]입니다", iInput * iInput1)
            Console.WriteLine()

        End While
    End Sub
    

Console개체의 WritLine 메소드에 문자열을 주면 도스창에 내용이 작성되고
Console개체의 ReadLine 메소드는 사용자가 입력한 값을 받아 오는 것..
이것을 읽어서 변수에 담아서 곱하여 결과값을 다시 써주는
싱거운 짓을 해 본것이다
Console.WriteLine("{0}) 숫자입력: 첫째숫자", iQ) 는
Console.WriteLine(iQ & ") 숫자입력: 첫째숫자") 와 같은 결과이다
하지만 첫째방식이 편리할 것이다...문자속에 변수값을 넣는 것을 좀더 편리하게 할수없을까?
라는 생각에서 나온 것이니까..
아래의 것은 ..

Dim iInput As Integer=0
이라고 한것도 특이하다..
VB.Net에서는 변수를 선언하고 초기화까지 같이 해도 된다

        Try
            iInput = Console.ReadLine()
        Catch ex As Exception
            iInput = 0
        End Try

    

아래의 VBA에서 대화상자로 위와 같은 내용을 해보면..

Sub useInput()
Dim iQ As Integer
Dim iInput As Integer
Dim iInput1 As Integer
On Error Resume Next
Do While True
    iQ = iQ + 1
    iInput = InputBox(iQ & ") 숫자입력: 첫째숫자")
    If Err.Number <> 0 Then
        iInput = 0
        Err.Clear
    End If

    iInput1 = InputBox(iQ & ") 숫자입력: 둘째숫자")
    If Err.Number <> 0 Then
          iInput1 = 0
          Err.Clear
    End If
    MsgBox "두숫자를 곱하면[ " & iInput * iInput1 & " ]입니다"
    If iQ > 10 Then Exit Sub
Loop
End Sub

    

Try ~ Catch 문대신에 On Error Resume Next를 VBA에서는 사용했다
물론 VB.Net에서도 On Error Resume Next를 사용할수 있지만
Try ~ Catch문이 훨씬 편리하다..
명령을 실행해보고 즉 Try해 보고 해보니까..에러가 났다!! 그러면
Catch문에서 에러정보를 갖고 있는 e 개체를 잡아낸다..
이렇게 Catch문내에서 적절히 처리하면 되니까.. 훨씬 단순하고 그래서 편리하다
On Error Resume Next문을 사용할수 있지만 같은 프로시져내에서 Try문과 같이
사용할수는 없다

VBA에서 VB.Net를 시작하게 되면
VBA에서 사용하던 문법(Usage)을 그대로 사용하면서 조금씩 VB.Net에서 좀더
쎄련확장된 문법을 익혀가시면 무리없이 진행할수 있게 된다

배포하기
위와 같이 싱거운 콘솔 프로그램도 하나의 프로그램이다
그러니 배포하여 사용자들이 설치 할수 있는 것
배포방법은 전통적인 윈도우프로그램의
MSI 확장자의 설치프로그램으로 하는 것과
.NetFrameWork에서 새로 설치기술로 사용되는 ClickOnce방법이 있다
물론 MIS 설치프로그램을 대신하는 것이 아니고,
이것을 좀더 편리하게 사용하게 하는 콤포넨트로 보는 것이 좋을 것이다
여기에서는 앞으로 ClickOnce 방법으로 하도록 하자
이방법은 개발자가 개발내용을 업그레이드 하면 자동으로 사용자의 것도 업그레이드되는
장점이 있고 또한 아주 간단하니까..
예를 들면 .NetFrameWork를 기반으로 개발한 UNO_Weekly도 기능을 추가하여
갱신하면 사용하시는 분들의 것도 자동 써버(써버에 게시하여 놓은 경우)에 접근하여 갱신하게 된다
상세한 디테일은 다음에 별도의 페이지로 꾸미기로 하고
우선 위의 콘솔프로그램을 배포설치하는 것을 실제로 해보는 것이 좋을 것이다



위와 같이 한후 게시버튼(Publish 버튼)을 크릭하면 아래의 그림과 같이



프로젝트폴더내에 Publish 폴더가 만들어지고
(써버나 혹은 개발자하드의 배포위치를 별도로 지정하지 않으면)
폴더내의 Setup화일이나 ConsoleApplication1.application(ClickOnce 배포실행화일)을 실행하면
설치가 되고 윈도우프로그램메뉴상에 메뉴가 하나 생기고 이것을 크릭하면 프로그램이
실행되는 것..
콘솔프로그램이던, 윈도우프로그램이던 , VSTO 추가기능화일을 설치하던 배포방법,
설치방법은 모두 같다..

***[LOG-IN]***

Console Application을 다시 Windows Form Application으로
Console Application은 별로 흥미롭지 않다
그래픽은 하나도 없고 먹통같은 Dos창만 나타난다..
이것은 별로 유용한 가치가 없는 것이지만 Visiual Studio의 개발템프릿으로 들어 있으니까..
한번 해볼 가치가 있어서 해본 것이고
Console Application으로 만든 것을 다시 Windows Form Application으로 만들수 있을까?
당연하다.. 아주 융통성이 있다
당초에 Console Application으로 시작했지만
실행하면 윈도우폼이 뜨게 하는 것으로 바꾸고 싶을수 있을 것이다
그림과 같이 위의 Console Application 프로젝트에 아이템추가하기에서 Form을 하나 삽입한다



환경을 설정하기에 따라서 Solution창이 되기도 하고 Project창이 되기도 한다
VB.Net프로그램은 하나의 소루션에
여러개의 프로젝트가 들어 갈수 있어서 Solution창으로 유지하는 것이 좋다
물론 하나의 소루션에 하나의 대표 프로젝트만 실행된다
여기에서는 하나의 소루션에 하나의 프로젝트만 있는 상태다
아무튼 Windows Form을 하나 삽입하고
My Project화일에서 프로젝트속성을 아래의 그림과 같이 바꿔준다



ApplicationType 속성에는 기본적으로 Console Applicaiton, Window Application, Class Libray 세가지외에
프로젝트펨프릿을 선택하는데 따라서 다양한 형식이 나타나게 된다
Visual Studion 정품을 사용할때는 이런 것이 다양하게 제공된다
당초 프로젝트를 시작할때 Console 을 하였으나 Window 로 바꾸면 Window프로그램이 되는 것..
그리고 StartUp Object속성에는 즉 프로그램이 시작될때 최초 호출하는 개체를
Sub Main에서 Form1으로 바꿔준다

그러면 실행하면 Form1이 나타나게 된다
이렇게 매우 융통성이 있다는 것을 아시고
다음 페이지에서 부터는 Windows form과 엑셀을 비교하면서
진행하도록 하여, VBA에서 VB.Net으로 확장 발전해보시기 바란다

Automatic Update...
.NetFrameWork는 실은 인터넷의 발달에 따라서 NetWorking에 중점을 둔 새로운 환경이라고 볼수 있다
인터넷이라던가, 사내의 인트라넷이라던가 독립적인 PC가 아닌 연결된 PC사이에서의
새로운 시대적환경의 변화에 따른 발전된 기술인 것이다
기존의 윈도우시스템+네트워크환경을 감안한 환경인 것
그래서..회사내의 중앙써버에 새로운 버전의 소루션을 올려 놓으면
자동으로 이것을 다운 받은 사용자들의 소루션이 동시 업데이팅이 자동으로 되게 하는 것이
필요하게 되는 셈
앞페이지에서 배포관련(Publish)와 설치(Installation)은 화일을 전달받아서 각자의
PC에서 설치하는 이야기고..
만약 써버에 설치하고 많은 사용자가 사용하게 하시려면 속성몇개를 추가 설정하시면 된다
아래는 uno_weekly를 웹서버에 배포하고 같은 위치에서 설치다운로드가 되게 한 경우



자동갱신옵션은 개발자가 써버에 새로운 버전을 배포할때 마다 갱신 혹은
일주일단위, 혹은 하루 단위등등 다양한 선택을 할수 있는 것
그리고 사용자가 설치한 프로그램은 실은 어디에 있는지 찾을수 없다
시스템에서 시스템만이 알수 있는 깊은 곳에 숨어 있다
네트환경에서의 보안에 중점을 둔 전략인 셈이다
그러니 VBA로 엑셀을 뭔가 열심히 만들어서 배포를 하면 죄다 코드를 수단과 방법을
가리지 않고 열어서 개발자가 공들인 코드를 공유하는 것이 걱정이 되는 경우에
최선의 대안이 되는 배포전략이 될 수 있는 것이고
그래서..이 코너에서의 .NetFrameWork를 기반으로 하는 VB.Net의 최종 목표는
MS에서 Office 제폼을 VB.NET으로 프로그래밍하기위한 VSTO라는 템프릿을 활용하여
여러분의 VBA의 내용을 확장하여 사내에서 배포하게 하는 능력을 갖게 하기 위함이다

물론 갱신이 필요하지 않고 한번 올려놓으면 계속사용할 성격의 소루션이라면
위의 설정을 할 필요가 없다
쓸데 없이 사용자가 소루션을 열때마다 확인하느라고 시간을 소비하게 되니까..