[ VBA 강좌 ]
제 2강
VBA 입문 Ⅱ
애플리케이션, 오브젝트, 프로퍼티, 그리고 메서드
1.어플리케이션(Application)
우리가 지금 배우고 있는 것이 Visual Basic for Application, 즉 특정한 응용 프로그램(Application)을 위한 VB입니다. 위에서 Application은 Excel이 되는 것입니다. 그런데 VBA 엔진은 엑셀에만 있는 것이 아니고 모든 MS-Office 제품군에 장착이 되어 있습니다. 만약 워드에서 VBA를 사용한다면 Application은 워드가 되고 억세스에서 VBA를 사용한다면 Application은 당연히 억세스가 된다는 얘기입니다. VBA를 잘 모르는 사람들은, 웬 파일들이 이렇게나 많고 용랑이 커? 비싸기만 하고… 하겠지요? VBA라는 아주 똘똘한 부하가 언제든 주인이 명령을 내려주기만 기다리고 있다는 사실은 모르고 말입니다.
이런 걸 모르고 하드디스크 자리나 차지하게 방치해 두는 것도 낭비 중의 낭비일 것입니다. 이제 애플리케이션이 무엇인지 감이 좀 오십니까? 당연히(?) 안 오신다구요? 그러시리라 짐작 했습니다. ^^ 쉽게 "엑셀 그 자체가 애플리케이션이다"라고 생각하시면 되겠습니다. 물론 워드라면 "워드 그 자체가 애플리케이션이다" 가 되겠지요.
2.오브젝트(Object, 개체)
컴퓨터를 가만히 살펴보세요. 우선 모니터가 있고 본체가 있고 키보드가 있고... 옆에 마우스도 보이는군요.
본체를 사알~짝 뜯어 보면 메인보드가 있고 CPU가 있고 RAM이 있고 비디오 카드 등이 있습니다.
이처럼 컴퓨터는 여러 가지 부품들의 조합으로 이루어져 있습니다. 이 때 컴퓨터라는 총합체가 Application이고
각각의 부품들(모니터, 키보드, CPU 등...)이 오브젝트라고 생각하시면 되겠습니다.
아이들이 가지고 노는 장난감 중에 레고(Lego)라는 것이 있지요? 여러 가지 형태의 조그만 부속품을 이리 맞추고
저리 끼우고 하여 집도 만들고 성도 만들고 배나 비행기도 만듭니다. 이 때 각각의 장난감 조각이 오브젝트이고
조각이 만들어 낸 집이나 비행기가 Application인 것입니다. 그러고 보니 우리 주변에 보이는 모든 것이 무언가의
조합에 의해 이루어진 것이란 생각이 듭니다. 모든 것이 부품화 되어 있고 부속품을 조립하여 다른 완성품을
만들듯이 프로그래밍에 있어서도 이러한 개념이 도입되었는데 이것을 컴포넌트(Component) 프로그래밍이라고
부릅니다.
엑셀도 마찬가지 입니다. 엑셀도 수많은 부속품(위의 계보에서 Workbooks, Worksheets, Charts, Windows 등이
모두 여기에 해당됩니다)들이 모여서 만들어 진 것입니다. 엑셀에는 이런 오브젝트가 47개가 있습니다
(엑셀 2000 기준. 아직 XP는 몇 개인지 세어보지 않았습니다. 누구 세어 보신 분 계시면 좀 알려주세요).
그런데... 모든 것을 부품화 해 놓으면 도대체 어떤 장점이 있는 것일까요? 예를 들어 자동차를 조립하는 회사에서
타이어를 하청 업체로부터 공급받지 않고 직접 제조한다면, 유리창도 하도급 업체에서 받아 오는 것이 아니라
자신들이 직접 생산한다면 얼마나 많은 중복되는 생산라인이 필요할 것이며, 얼마나 많은 기술력과 전문가들을
보유하고 있어야 하겠습니까? 아마도 불가능 할 것입니다. 돈만 가지고 있으면 하청업체들로부터 부속품들을
구매해서 조립하고 핵심 역량만 지속적으로 개발해 나가는 것이 훨씬 효율적이겠지요.
Microsoft에서 엑셀을 개발하는 프로그래머들이 Excel의 신 버전을 만들 때에도 모든 것을 만들어 내거나
맨 처음부터 다시 시작하는 것은 아닙니다. 업그레이드 한다는 것은 엑셀의 수많은 부품 중 일부를 보다 나은
부품으로 바꿔 끼우거나 기존에 없던 부품을 새로 꽂는 것을 의미합니다.
이런 방법을 취함으로써 지속적인 개선이 가능한 것입니다.
오브젝트에는 두 가지 종류가 있습니다.
하나는 그냥 오브젝트이고 다른 하나는 컬렉션(Collection) 오브젝트 입니다. 아파트를 가만히 보면, A 아파트,
B 아파트, C 아파트 등은 모두 아파트라는 보다 큰 카테고리에 속해 있습니다. 즉 각각의 아파트는 서로 다른
것이지만 아파트들 이라는 집합체(Collection) 속에 포함되는 것입니다. 자동차 타이어를 다시 예로 들어보면,
자동차에는 4개의 타이어가 있습니다. 각각의 타이어는 모두 오브젝트가 되겠고, 4개의 타이어를 합쳐서 타이어들
이라는 컬렉션(집합체)으로 취급한다는 이야기 입니다.
즉, 타이어는 오브젝트인 동시에 컬렉션의 한 구성요소라고 할 수 있습니다.
컬렉션이라는 것은 A group of objects of the same class, 즉 같은 클래스의 집합체 라고 할 수 있습니다.
이제, 슬슬… 짜증이 나시죠? ^^ (클래스는 또 뭐야? 학급이란 뜻인가?) 많이 헷갈리시리라 생각됩니다.
오브젝트 뒤에 s가 붙은 것(예를 들면, Workbooks, Worksheets, Names, Windows,...)은 모두
컬렉션 오브젝트라고 보시면 됩니다.
여러 개가 모여서 하나의 큰 덩어리를 이루고 있는 집합체라고만 알아 두시면 되겠습니다.
앞으로 자주 나오게 될 테니까…^^
3.프로퍼티(Property, 속성)
프로퍼티를 다른 말... 이라기 보다 우리 말로 속성이라고 합니다. 책을 오브젝트라고 가정한다면 프로퍼티는
그 책의 두께나 크기, 저자, 무게, 가격, 표지 색깔 등 오브젝트가 가진 성질머리라고 할 수 있습니다.
책.두께 = 566 페이지 |
위와 같이 표현할 수 있을 것입니다. 이제, 실제로 코딩은 어떻게 하는지 살펴 보도록 하겠습니다.
먼저, 프로젝트 탐색기창에서 마우스의 오른 쪽으로 이 곳(ThisWorkbook)을 클릭하신 다음, 아래의 그림과 같이
[삽입]-[모듈] 탭을 차례로 선택하여 모듈시트 한 장을 삽입합니다.
다음은, 아래의 AboutProperty라는 코드를 모듈시트에 [복사]-[붙여넣기]하신 다음
그상태(VB Editor창 상태)에서 코드창 내에 마우스 포인터를 위치시키고, 키보드의
F5 키를 눌러 실행시켜 보세요.
Sub AboutProperty() |
위 코드 중에서 Application.UserName은 엑셀을 설치할 때 입력한 사용자의 이름을, Application.Version은
엑셀의 버전 정보를 알 려주는 프로퍼티입니다.
여러분이 사용하고 계신 엑셀의 버전이나 사용자 이름 등에 대한 정보를 누가 갖고 있느냐 하면, 바로
Application 오브젝트가 가지고 있습니다.
우리네 실생활에서도 사정은 크게 다르지 않습니다.
창고에 TV가 몇 대 남았는지, 냉장고 재고 상태가 어떤지를 알려면 창고의 재고 담당자에게 물어야지 공장의
생산설비 담당이나 연구소 직원에게 물어서는 곤란하겠지요? 그런 의미에서 VBA로 프로그래밍을 한다는 것은
누가(즉 어느 오브젝트가) 어떤 정보를 가지고 있는 지를 파악해서 일을 시키는 것이라 할 수 있을 것입니다.
그러기 위해서 오브젝트들과 우선 친해져야 하고, 그런 다음 각 오브젝트의 성질머리(프로퍼티)와 행위(메서드)를
파악해 나가는 것입니다.
4.메서드(Method, 방법)
메서드를 한 마디로 표현하자면... 동사(Verb)라고 할 수 있습니다.
갑돌이가 잠을 잔다 |
여기서 갑돌이, 영식이, 만득이 등은 오브젝트입니다. 반면 잠을 잔다, 달려 간다, 눈을 깜빡거린다 처럼
오브젝트에 대한 동작 명령은 메서드(방법)라고 합니다. 메서드는 오브젝트를 움직이도록 만드는 수단이며
우리말로 방법이라고 번역합니다.
모든 오브젝트는 적어도 한 개 이상의 프로퍼티나 메서드를 가지고 있습니다. 그리고 오브젝트에 명령을 내릴 때,
프로퍼티를 이용할 수도 있고 메서드를 사용할 수도 있습니다.
갑돌이.잠 = True |
이렇게 갑돌이의 상태를 프로퍼티로 표현할 수도 있고(오브젝트명.속성명 = 속성값)
갑돌이.잠을잔다 |
와 같이 메서드로 나타낼 수도 있습니다(오브젝트명.메서드). 두 가지의 방법 중 어떤 것을 택할 것인가는
프로그래머가 그때그때 상황에 맞게 선택하여 사용합니다.
자! 이번에는 위에서와 같은 방법으로 아래의 코드를 모듈시트에 붙여 넣고 실행시켜 보세요.
Sub ValueProperty() |
어떤 일이 일어났습니까? ValueProperty를 실행시키니까 A1:A20 영역의 셀에 "안녕하세요!" 라는 문자열이
한꺼번에 좌~악! 입력되지요? 이것은 Range 오브젝트의 Value 프로퍼티를 이용한 것입니다.
Range 오브젝트에 대해서는, 다음 기회에 아주 자세히 다룰 예정입니다.
이번에는, 아래의 ClearContentsMethod 프로시저를 실행시켜 보세요. A1:A20 영역에 입력되어 있던 값들이
순식간에 어디론가 사라졌습니다. 이것은 역시 Range 오브젝트의 ClearContents 메서드를 사용한 것입니다.
Sub ClearContentsMethod() |
아마, 이쯤 되면 무~지 헷갈리실 것입니다.
위에서는 프로퍼티와 메서드는 분명히 다르다고 하니까, 그런가 보다 하고 넘어왔는데 어떻게 다른 것인지,
그리고 어떨 때 프로퍼티를 쓰고 또 다른 경우에는 메서드를 사용하는지…
프로퍼티와 메서드는 공히 오브젝트를 움직이게 하는 수단입니다. 차이점이 있다면, 달리게 한다거나 잠을 자게
한다거나 눈을 깜빡이게 한다거나 하는 등… 동사적 변화를 주는 것은 메서드, 머리 색깔이나 눈동자 색깔을
묘사하는 것과 같이 형용사적 변화를 주는 것은 프로퍼티라고 생각하시면 되겠습니다.
프로퍼티: 오브젝트가 가진 성질머리, 즉 오브젝트의 특징이나 성격
메서드: 오브젝트에 대한 동작 명령
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.