PROGRAMMING WORKSHOP

VB.Net | 크래스라이브러리 만들기

[COM Add-In 화일 만들기]라는 제목으로 시작을 하려고
몇시간을 투자하면서 다시 살펴보니..
기초 없이 너무 건너 뛰는 것 같아서
싹 지워버리고
순서를 바꾸어 다시 한다

Class Library라는 말을 자주 들을 것이다
Class 라이브러리..!!
간단하게 하나 만들어 보는 것이 좋을 것이다

아래와 같이 Visual Studio..버전관계없이 비슷한 인터페이스일 것이니
어름잡아서 메뉴찾으시면 된다..
프로젝트이름을 myFirstCom이라고 지으시고

.Net FrameWork버전은 아무것이나 상관없다
visual studio는 종합개발도구이다.
이곳에서 C#으로 작업을 하던,C++로 작업을 하던,VB로 작업을 하던..
WindowPhone7을 개발하던, WPF소루션을 개발하던
Office관련(엑셀,워드,아웃룩,프로젝트등등)을 VSTO라는 추가기능으로
개발을 하던..데이타베이스를 개발을 하던
웹소루션을 개발을 하던,Windows프로그램을 개발하던
SharePont써버를 개발을 하던,Clouding 시스템을 개발을 하던
Web Service(SOAP, WCF등)를 개발을 하던
SilverLight를 개발하던 모두 visual studio 속에서 추가기능적으로
이런 저런 도구를 조합(Add-in 혹은 Add-on이라고 하기도 하고, Template)하여
개발을 하는 것이다
엑셀에 좀더 날개를 달고 좀더 프로다운 개발환경을 갖추려면
Visual Studio를 하나 준비하시면 더욱 바람직한 프로그래머가 될 것이다
Excel의 VBA에서 내공을 쌓았다면
개발환경의 어수선한 낯섫음은 있을지라도 별로 어려움 없이
각자의 능력을 확장해 나갈수 있다

아무튼 위의 것을 선택확인하면 아래와 같이 황당한 화면이 하나 나온다



앞으로 전개할 VB.net은 죄다(C#이나 다른 언어는 물론!!!)
Class모듈 판이다..

이곳에 무언가 작성하여야 하는 것이다
엑셀프로그래밍에서 시시때때로 Class모듈을 활용하세요..
제발 좋은 것이니 활용하세요!!하고 노래를 부른 것이 바로
요렇게 황당하게 나타나는 크래스모듈시트를 낯섫지 않게 하기
위함이였는데..!@#

아무튼 Class1이라는 기본으로 제공되는 이름을
myFirstClass라고 이름을 바꿔주고
함수를 몇개 작성해 보자
.Net FrameWork의 자원을 하나도 쓰지말고 VB자체 언어만 사용해보자

Public Class myFirstClass Public Sub sayHello(ByVal sName As String) MsgBox(sName & "님 안녕하세요!!") End Sub Public Function plus(ByVal lX As Long, ByVal lY As Long) Return lX + lY End Function Public Function minus(ByVal lX As Long, ByVal lY As Long) Return lX = lY End Function Public Function multiply(ByVal lX As Long, ByVal lY As Long) Return lX * lY End Function Public Function divide(ByVal lX As Long, ByVal lY As Long) Try Return lX / lY Catch ex As Exception MsgBox(ex.Message) Return 0 End Try End Function End Class

아주 싱거운 프로시져하나와 함수몇개인데..
실은 이것은 모두 크래스, 즉 개체의 메소드들인 셈이다

위와 같이 작성후 Save All하여 프로젝트화일을 모두 저장하고
Debug를 할 것도 없이 그냥..
Build메뉴를 크릭하여 빌드 한다
그리고 저장된 폴더로 가서 bin폴더를 열면
debug폴더와 release폴더가 있다..
debug를 하였다면 debug폴더에도 화일이 있겠으나
debug를 하지 않았으니 debug폴더는 빈탕이고
release폴더에 아래와 같이 dll화일이 하나 만들어 졌을 것이다
이것이 크래스라이브러리 화일이 되는 셈이다

아니 이것을 어디에 써먹는다지???!!!
한마디로 여기저기서 써먹는다..
window시스템에 가서 열어보면 모두 dll화일 천지다..
이것도 결국은 지금 만든 화일과 같은 것들이 들어있는 것이다
이것을 이곳 저곳에서 참조하여 응용프로그램을 만들게 되는 것이다
그래서 라이브러리화일이라고 할 수 있게 되는 것이다
이제 이 라이브러리 화일을 활용하자
새로 프로젝트화일을 만들어도 되지만..
같은 소루션내에 프로젝트를 하나 추가한다
하나의 소루션내에는 여러개의 프로젝트가 들어갈수 있다
프로젝트는 각각 독립적인 것이지만 하나의 소루션에 모여서
하나의 프로그램을 만들수도 있는 것이다



위와 같이 프로젝트를 추가한후
아래의 그림과 같이
추가한 프로젝트 window프로젝트를 시작프로그램으로 지정해주고
(여러개의 프로젝트가 있으면 어떤 넘을 시작할때 실행되게 할지
지정해주어야겠지!!!)
그리고 위에서 만든 라이브러리화일을 사용하려고 하는 것이니
참조를 시켜야 한다..add reference !!하면
대화상자가 하나 나타나고 이곳에는 탭이
Net, Com, Projects, Browser, Recents가 있다
Net은 .Net FrameWork에서 참조하여 사용할 라이브러리
Com은 win32시스템상의 라이브러리
Projects는 현재 소루션내의 다른 프로젝트하에 있는 라이브러리
Browser는 현재 만들어져있는 다른 dll 화일을 폴더에서 찾기
Recents는 최근에 접근 참조하였던 라이브러리



엑셀프로그래밍에서는 가뭄에 콩나듯이 가끔 참조를 하지만
VB.Net에서는 참조가 생명이다..
조합하여 물건을 만들어 나가는 것이다
여기에서는 Projects의 것을 선택하고 확인 버튼을 크릭하면
참조되었으니..Window 프로젝트에서 활용하면 되는 것이다
이런 것을 하면서 엑셀프로그래밍이 어떤 것인지 좀더 확실해지는
기회가 되는 것이다
엑셀프로그래밍이 얼마나 파워풀하고 개발이 간략한지 알수 있는
좋은 기회가 되는 셈이다
엑셀프로그래밍은 자체내의 개체만 참조하여 사용하면
업무자동화의 모든 것을 할수 있으니 얼마나 좋은가..
단지 부족한 것이라면 네트워킹이라던가..웹과의 연동이라던가
를 좀더 파워풀하게 하기 위하여 .Net FrameWork, VB.Net을
기웃거리게 되는 셈이다

Window프로젝트의 Window폼에 콘트롤들을 달고
(엑셀의 UserForm을 하던 가락이면 별것이 아닌것..)
버튼의 Click이벤트프로시져에
아래와 같이 작성한다

Public Class Form1
Private Sub btnGetResult_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetResult.Click
	Dim oMyClass As New myFirstCom.myFirstClass
	Dim lNum1 As Long = CLng(txtNum1.Text)
	Dim lNum2 As Long = CLng(txtNum2.Text)
	Dim sOper As String = "+"
	Dim sResult As String = oMyClass.plus(lNum1, lNum2)
	Me.lblResult.Text = String.Format("숫자1의 값:{0}{1} 숫자2의 값:{2}={3} 입니다", lNum1, sOper, lNum2, sResult)
oMyClass.sayHello(txtName.Text.ToString)
End Sub
End Class

위와 같이 위에서 만든 크래스라이브러리를 참조하는(빨강색)
구문을 작성하고 버튼을 크릭하면 아래와 같은 결과..



싱거운 계산이지만 핵심은 모든 계산이나 연산은 크래스라이브러리에
시키고 윈도우폼에서는 사용자가 입출력만 하게 하는 업무의 분담이
이루어진 셈이다

또한 핵심은 만들어진 크래스라이브러리는 독립적이라서
다른 프로그램에도 붙여서 활용을 할수 있는 왔다,갔다 자신의
일을 멋지게 해주는 크래스라이브러리가 되는 셈이다

예를 들면 하나의 라이브러리를 파워포인트에서 불러서 사용하기도 하고
엑셀에서 불러서 사용하기도 하고 워드에서 불러서 사용하기도 하는
COM 라이브러리와 같은 역활인 셈이다
위에서 만든 것은 Win32프렛폼에서 만든 COM이나 ActiveX가 아니고
.Net FrameWork를 프렛폼으로 하여 만든 크래스라이브러리 Assembly화일인 것이다
.Net FrameWork를 프렛폼으로 하는 모든 Application에서 참조하여
사용할 수 있는 셈이다
만약 .Net FrameWork에서 만든 것을 COM같이 사용하려면..
.Net FrameWork와 COM 과 중간역할을 하는 중계자가 하나 있어야 한다
그 것은 다음 페이지에서 해보도록 하자

***[LOG-IN]***