Early Binding...Late Binding
일찍 묶을래??..나중에 묶을래..??
이것이 뭔소린가??
묶다니..뭘 묶어??
프로그래밍은 이미 만들어진 놈들이 이리 저리 묶어서 사용한다!!
라는 개념을 이해하여야 엑셀프로그래밍을 잘한다
우선 VB편집기의 도구/옵션메뉴에서 아래의 대화상자에서
그림과 같이 체크를 확인하고 이야기를 계속하자
대개가 이렇게 되어있지만 간혹 이것을 체크하지 않은 상태에서
코딩을 하시는 분들이 많다
일을 잘하는 사람들이 일상의 프로그래밍도 잘하고
컴퓨터프로그래밍도 잘한다
어느 회사에서 어떤 프로젝트를 계획하는데
다양한 협력업체(Out Sourcing)들이 필요하게 된다
프로젝트가 현장에서 시작되면서 협력업체를 구하게 되기도 하고
계획단계에서 정해지는 경우도 있다
바로 일찍 묶을때??
아니면 늦게 묶을래??
가 이소리다..
협력업체를 계획단계에서 정할래??
아니면 집행하고 시행하면서 상황에 따라서 정할래?
와 같은 소리다
계획단계에 정한다면 협력업체의 관련정보를 계획단계에서
모두 알게 되지만
진행하면서 정하게 되면 계획단계에서는 협력업체의 특정한
정보들을 알수가 없다
엑셀프로그래밍도 마찬가지 하나의 프로젝트다
어떤 목적을 위한 소루션을 만들때
다양한 협력업체가 필요해지고 이 협력업체는 바로
엑셀에서 제공하는 오브젝트들이고 아니면 외부 라이브러리에서
제공받는 오브젝트들인것이다
위의 그림과 같이 목록을 볼수 있게 체크한 상태에서
아래와 같이 코딩을 해보시기 바란다
Sub earlyOrLate()
Dim objX As Object'(혹은 Variant,혹은 아무타입도 없이)
Set objX = ActiveSheet
objx.
End Sub
objX라고 입력후 쩜(.)..Dot Operator 을 찍어도 아무것도 나타나지 않는다
이번에는 아래와 같이 작성해보시기 바란다
Sub earlyOrLate()
Dim objX As WorkSheet
Set objX = ActiveSheet
objx.
End Sub
아래의 그림과 같이 해당 오브젝트의 목록이
줄줄이 나타나서 해당오브젝트가 제공하는 속성이나 메소드를
미련하게 외우는 일이 없을것이다
위의 구문에서는 Dim objX As Object (혹은 Variant,혹은 타입없이)
이렇게 선언한것은 아직 타입을 모르겠다는것이다
실행하면서(Run-Time) 그때 묶어들이라는 이야기인것이다
이것이 나중에 묶는다(Late Binding)이고
두번째것은 계획할때..즉 Design-Time에 미리
확실한 타입(Specific Type)을 정해준다는 이야기다
그러니 계획단계(코딩할때)에 해당 오브젝트가 제공하는 메소드나
속성을 목록상자에서 줄줄이 볼수 있게 되는것이다
다른 오브젝트도 역시 마찬가지다
특히나 외부 라이브러리를 불러서 사용할때는
Early Binding을 하고 코딩을 해야 손쉽게 해당 오브젝트의 자원을
볼수 있다
실은 엑셀의 내부적으로 제공하는 오브젝트들의 자원은
대강머리속에 집어 놓고 있으니까 별 어려움이 없겠으나
외부의 라이브러리에서 제공하는 오브젝트들을 사용하고 싶을때
이 개념이 아주 유용한것이다
아래의 그림과 같이 외부라이브러리를 참조하고 싶으면
도구/참조메뉴를 크릭하면 된다
이 참조 대화상자에 줄줄이 나타나는 라이브러리들은
여러분의 컴퓨터에 등록되어 있는 협력업체리스트라고 보아도 된다
협력업체에 대한 정보를 많이 알면 알수록
소루션은 엑셀이 갖고 있지 못하는 기능까지 불러서 사용할수 있는 것이다
예를 들어서 워드에는 영어사전이 빵빵한것이 들어있다
엑셀에서 단어장을 만들면서 동의어나 반대어등의 리스트를 얻고 싶다면
Word의 오브젝트라이브러리를 참조시키면 된다
위와 같이 한후 아래 프로시져를 그대로 작성하면서
각각의 오브젝트의 자원의 목록이 자동으로 펼쳐지는것을
보시기 바란다
그리고 실행시켜보시고 objWord.SynonymInfo("exercise")에서
"exercise"단어 대신 다른 단어의 변수를 전달하여 보시기도 하고..
Sub searchWords()
Dim objWord As New Word.Application
Dim iCount As Integer, iX As Integer
Dim objSynonyminfo As SynonymInfo, arrX As Variant
Dim oX As Variant
Set objSynonyminfo = objWord.SynonymInfo("exercise")
iCount = objSynonyminfo.MeaningCount
If iCount > 0 Then
For iX = 1 To iCount
MsgBox iX & "번째 그룹"
arrX = objSynonyminfo.SynonymList(iX)
For Each oX In arrX
MsgBox oX
Next
Next
Else
MsgBox "관련단어없습니다"
End If
End Sub
위의 구문에서
Dim objWord As New Word.Application
와 같이 한것이나 아래의 것이나 마찬가지이다
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
objWord.SynonymInfo("찾고 싶은 단어를 매개변수로")
를 하면 워드의 objSynonyminfo오브젝트를 얻어내고
이 오브젝트가 갖고 있는 속성을 이용하여 Exercise라는 영어단어에
대한 관련정보를 줄줄이 볼수 있는것이다
영어사전을 하나의 오브젝트로 만들어서 Word프로그램의 하위오브젝트로
갖고 있는것이다
엑셀의 오브젝트와 다른 라이브러리의 오브젝트를 적절히 조합하여
다양한 소루션을 만들수 있는것이다
VB편집기내에서 F2키를 눌러 개체찾아보기 창을 띄워보시면
아래의 그림과 같이 Word가 라이브러리 리스트에 나타나있음을 알수 있다
참조된 라이브러리는 모두 이곳에서 해당 라이브러리의 자원을
엑셀의 오브젝트를 보듯이 볼수 있는것이다
위의 Word오브젝트를 접근할때와 같이
라이브러리를 참조시키고,변수를 구체적(Specific)인 명칭을 사용하는
Early Binding을 하고 Coding알것인지
아니면 참조하지 않고 Late Binding으로
Dim objWord As Object
Set objWord=CreateObject("Word.Application")
와 같이 할것인지는 각자의 마음대로 하면 된다
Early Binding의 단점은 다른 사람에게 소루션을 배포했을때
만약 사용자의 컴퓨터에 해당 라이브러리 화일이 없다면
Dim objWord As Word.Application
에서 에러가 나게 된다
해당 워드프로그램이 없다면
도대체 Word.Application이 뭔말인지를 알아 먹지 못하게 된다
상황에 따라서 활용하면 된다
고참이 되는것은 이런것들이 감각적으로 자기화 되어 가는 과정이다
다양한 개성강한 각각의 오브젝트들을 적절히 조화시키는
여러분은 오케스트라의 컨닥터와 같다