배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
엑셀 2000, 황기성님의 엑셀VBA 7일, Excel 2000


7일. 고양이는 멍멍 짖지 않는다

 

▶ 오늘 배울 내용

클래스(Class), 인스턴스(Instance), 컬렉션(Collection), 객체(Object개체), 속성(Property), 방법(Method)

 

고양이는 멍멍 짖지 않는다

너무 당연한 말이지요? 고양이는 멍멍 짖지 않는답니다. 만약 어떤 것이든 멍멍 짖는다면 우리는 그것이 적어도 고양이가 아니라고 단정할 수 있을 것입니다.

엑셀 초보 사용자를 괴롭히는 IF함수를 이용해 표현한다면

=IF(A1="짖다","고양이 아님")이라고 할 수 있겠습니다^^

프로그래밍이란 이처럼 너무 당연한 말만 하는 것이니, 누구든 쉽게 배워 할 수 있는 것이랍니다. 그런데, 모순 투성이이기 마련인 우리네 인생에 비겨 본다면, 프로그래밍이란 너무 단순하고 간단한 것이어서 자칫 당혹스럽고 오히려 어렵게 느껴지는 대목도 있나 봅니다. 그러나, 고양이는 멍멍 짖지 않는다는 것, 이 단순한 사실이 프로그래밍의 ABC, 즉 기초가 된다는 것을 늘 염두에 두시면, 프로그래밍이란 낯선 세계에 대해 여러분이 혹 가지고 계실 지도 모르는 막연한 두려움 따위란 어느새 사라지게 될 것입니다. 진리란 언제나 단순한 법이니까요^^

이 강좌를 접하시는 분들 가운데에는, 비록 많지는 않지만 중.고등학교 학생 여러분들도 있다고 들었습니다. 제가 명색이 고등학교 국어 선생인 탓에 가끔 그런 학생들이 질문을 주면 더욱 반갑게 느껴집니다. 이제는 그런 학창시절과는 아득히 멀어지신 분들이더라도 그 시절 국어시간에 체언이나 용언이라는 말들을 듣고 사용했던 기억은 뚜렷할 것입니다. 더불어, "고양이가 짖다"라는 문장에서 '고양이'란 체언(體言)이며 '짖다'란 용언(用言)임을 모르시는 분은 거의 드물 것입니다.

체(體)나 용(用)이란 말이 원래 동양 전래의 우주관에서 비롯한 철학적 용어이긴 합니다만 그 쓰임을 이해하기란 그리 어렵지 않습니다. 하늘의 해는 하나의 체(體)입니다. 존재하고 있는 그 무엇이지요. 그런데, 이 해란 그것이 가지고 있는 여러 성질들, 즉 붉다, 둥글다 등의 성질과, 그것의 움직임, 즉 뜨다, 지다라는 동작을 통해 우리에게 드러나 보여집니다. 세상의 그 어떤 것-體-이든, 어떤 쓰임-用-을 통해 드러나 알 수 있게 되는 것과 마찬가지랄 수 있습니다.

그런데, "고양이는 짖지 않는다"라는 말 대신 누군가 "고양이는 멍멍 짖는다"고 말했다고 합시다. 우리는  즉시 이 말이 이상하다고 느끼게되거나, 틀린 것이라고 생각하게 됩니다. 우리가 이 진술이 틀린 것이라고 생각하는 이유는, 고양이의 본성(본디 바탕)이 '짖다'라는 움직임으로 드러나지 못하기 때문입니다. 프로그래밍에서는 이런 것을 흔히 오류라고 부르게 됩니다. 사람들 사이의 오해가 큰 문제를 가끔 일으키는 일을 우리는 목격할 수 있거니와, 융통성이 없기로 유명한 컴퓨터라는 물건은 한 치의 오류도 그냥 넘어가는 법이 없습니다. 엑셀 VBA에 대하여 말씀 드리는 자리인데, 혹 엉뚱한 이야기만 늘어 놓는 것이 아니냐는 오해를 받을 수 있을 것 같아, 말을 돌려 보도록 하겠습니다^^ 아래의 그림은 엑셀의 도움말의 Microsoft Excel 개체라는 항목에서 가져온 것입니다.

객체(客體 Object) : 여러분이 앞으로 흔히 듣게 될 용어 가운데 하나입니다. Object란 용어는 최근 컴퓨터 관련 번역서, 마이크로소프트의 도움말에도 개체란 말로 흔히 옮겨집니다만, 실은 객체란 말로 옮기는 것이 더 적당할 지도 모르겠습니다. 사실은 저도 개체란 말을 더 자주 사용합니다만^^ 객체란 철학적 용어로는, 인식·지식에서 자아(自我)의 대상. 주관(subject)에 대응되는 말이라고 합니다. 프로그래밍에서 그것은 사용자가 일을 시키려고 하는 대상이 되는 것이라고 생각하십시오. 즉, 우리가 프로그래밍한다는 것은 컴퓨터의 어떤 객체의 속성을 조작하고, 그 객체에 어떤 일을 하도록 지시하는 것이라 할 때 객체에 대한 이해는 필수적인 것이랄 수 있습니다. 앞으로 이 강좌에서는 그러나 일반화된 용어인 개체를 주로 사용하게 될 것입니다. 혹 무지불식 간에 객체와 개체 이 두 용어가 함께 사용되더라도 너른 이해를 바랍니다*^_^* 

무엇인가 알 수 없는 것들도 그득하지요^^ 저 역시 위의 그림 모두를 이해하거나, 잘 알고 있는 것은 결코 아니랍니다. (안과 의사가 심장 수술을 할 수는 없는 것이라고, 국어 선생님이 공룡의 세계를 설명하는 일엔 늘 서툰 법이라고 이해하시고 넘어가십시오^^*) 그러나 위의 그림은 여러분이 앞으로 엑셀 VBA를 익히며, 자주 만나게 될 그런 물건(개체)들을 한곳에 모아 놓은 것이라고 생각하십시오. 자 그럼 아래 그림을 통해 오늘의 여러분에게 드릴 이야기를 요약해 보도록 하겠습니다

클래스와 인스턴스(Class & Instance) 클래스와 인스턴스는 흔히 붕어빵 기계와 붕어빵의 관계로 비유합니다. 붕어빵 기계에 밀가루와 팥을 넣고 적당히 익히면 똑같은 모양의 붕어빵들이 생겨나게 됩니다. 이때 붕어빵을 만들어내는 붕어빵 기계를 클래스라고, 만들어진 먹음직스러운 붕어빵을 인스턴스라고 부릅니다. 아래의 그림을 보십시오. 도구 모음에서 새로 만들기 단축 아이콘을 누르면 새 통합문서가 만들어 지게 됩니다. 엑셀에는 통합문서를 만들어낼 수 있는 붕어빵 기계가 이미 설치되어 있으므로, 그것을 찍어내기만 하면 하나의 통합문서라는 붕어빵이 금방 만들어지게 되는 것입니다. 그리고 이렇게 만들어진 붕어빵은 우리가 직접 사용할 수 있는 개체가 되는 것입니다. 자식은 어머니와 아버지를 닮게 되어 있듯이, 클래스라는 붕어빵 기계에서 나온 붕어빵은 모두 같은 성질을 가지게 되면 할 수 있는 능력도 동등하게 됩니다. 엑셀 VBA로 프로그래밍한다는 것은 엑셀이라는 붕어빵 기계를 빌려다 붕어빵을 찍어내는 일로부터 흔히 시작하게 되는 것입니다^^

컬렉션과 개체(Collection & Object) 컬렉션이란 간단히 같은 종류의 개체의 집합이라고 생각하십시오. 이 컬렉션 개체는 흔히 영어의 복수형을 뜻하는 's'를 달고 다닙니다. 아래의 그림을 보십시오. 하나의 엑셀에는 여러 개의 통합 문서를 삽입할 수 있습니다. 이때 각각의 통합 문서는 Workbooks라는 통합 문서 컬렉션 집합의 하나의 원소(VBA에서는 이를 항목item이란 속성이라 부릅니다)를 이루게 되는 것입니다. 그에 반해 개체는 그 집합을 이루는 하나의 고유한 항목들이랄 수 있습니다. 비유해 말하면, 학교는 여러 학년으로 이루어지고, 각기 그 학년에는 여러 반들로 다시 나뉘며, 각 반에는 여러 명의 학생들로 이루어져 있는 것과 같습니다. 그러나 반의 학생 한명 한명은 모두 고유한 개인이고, 한 학급 역시 각기 고유한 반인 것과 마찬가지랄 수 있습니다.

개체와 속성(Object & Property) 하나의 개체들은 일반적으로 여러 가지 성질들의 집합체라고 할 수 있습니다. 태양은 둥글 뿐만 아니라 붉게 빛나기도 합니다. 이때 '둥글다', '빛나다'란 태양이란 개체가 가진 속성이라고 할 수 있습니다. 컴퓨터가 만들어 낸 여러 가지 개체들도 태어나면서부터 고유한 여러 가지 성질을 가지게 됩니다. 즉, 개체의 여러 가지 성질을 결정하는 것을 속성이라 부릅니다. 간단한 비유를 들어 말하면, 부모가 자식이 태어난 것을 기뻐하며 가장 먼저 자식의 이름을 붙여주게 됩니다. 영특하기로 이름난 엑셀(*^_^*)이라고 해서 예외는 아닙니다. 엑셀은 새로운 통합문서를 만들어내면서 그것에 고유한 이름을 붙여줍니다.(한 집안에는 같은 이름의 자식이 없는 법입니다. 컴퓨터의 세계라고 해서 예외는 아닙니다.) 바로 이 이름은 그 통합문서의 속성이 되는 것이며, 우리는 이 속성을 이용해 그 개체에 접근할 수 있는 것입니다. 엑셀 VBA에서 이 속성은 흔히 읽다, 쓰다라는 표현과 더불어 사용하게 됩니다.(다르게는 '읽다'를 참조하다, '쓰다'를 설정 하다란 표현으로 대신하기도 합니다)  '읽다'란 표현은, 어떤 개체의 성질이 어떠한가를 알아보기 위할 때, '쓰다'란 표현은 개체의 성질을 변경하려 할 때 사용하게 됩니다. 그런데, 어떤 속성들은 단지 읽을 수만 있을 뿐이지, 쓸 수 없는 경우가 있습니다. 예컨대, count라는 속성은 컬렉션에 있는 개체의 수를 헤아리는 데 사용됩니다.

i =  Workbooks.Count

라고 하면, i라는 변수에 통합문서의 수를 헤아려(count) 담아 줍니다. 즉, 통합문서의 count속성을 i라는 변수에 '읽어옵니다' (주의! i =  Workbooks.Count 와 같이 = 라는 등호가 사용된 구문을 흔히 '대입문'이라고 부릅니다. 이러한 대입문은 a = b(a와 b는 서로 같다)라는 수학적인 표현의 경우와 달리, 왼편에 오른편의 값을 대입한다라는 의미를 갖습니다. 즉, 이 경우에는 오른편에 있는 Workbooks.Count라는 속성의 값을 왼편에 있는 i라는 값에 대입(代入)한다는 뜻이 됩니다) 하지만, 이를 거꾸로 해서 Workbooks.Count = i라고 할(쓸) 수 없습니다. 왜냐하면, Count라는 속성을 이용해 통합문서의 수를 헤아릴 수는 있지만, 통합문서의 수를 바꿀 수는 없기 때문입니다. 군대에서 군인들을 세워놓고 '번호!'라고 했을 때...병사들이 차례로 자기의 차례를 외쳐 몇 명인가를 알아낼 수는 있겠지만, 현재 5명밖에 없는 병사의 숫자를 가지고, 병사의 숫자는 100이라고 아무리 해야 소용 없는 것과 마찬가지일 것입니다. 일상의 경우, 우리는 그런 것을 헛소리(거짓이^^)라 부르고, 프로그래밍에서는 오류라고 부른다고 앞서 말한 바 있습니다. 물론 아래의 그림과 같이 시트의 이름을 바꾸는 것을 쓴다고 말하며 이것은 곧 속성을 변경하는 것이랄 수 있습니다. VBA에서는 이것을 아래와 같이 표현하게 됩니다.

Worksheets("Sheet1").Name = "첫째"

개체와 방법 혹은 메서드(Object & Method) 방법 혹은 메서드란 개체를 조작하는 일을 가리킵니다. 간단히, 개체가 어떤 동작을 하게 되는 것을 메서드라 부릅니다. 부모들은 자식을 나아 처음으로 그 아이가 걷거나 뛰거나, 말하거나 하면 몹시 신기해 한다고 합니다. 걷고 뛰고 말하고 하는 모든 것을 프로그래밍에서는 메서드라고 부릅니다. 우리가 직접 일하는 것이 아니고, 컴퓨터에게 일을 시키는 것임으로, 일을 시킬 대상인 개체의 방법이라고 부르는 것입니다. 예를 들어,우리가 컴퓨터로 작업하면서 가장 많이 사용하게 되는 복사하기나 붙여넣기란 무엇이겠습니다. 바로 우리가 엑셀이란 개체를 가지고 작업하면서 사용하게 되는 방법들 아니겠습니까? 엑셀의 일정 범위를 복사해 클립보드로 넘기는 일을 복사라고 부르며, 일정한 셀 범위에 클립보드에 들어 있는 데이터를 가져다 붙여 넣는 것을 붙여넣기라 부릅니다. 셀 범위라는 개체를 조작해 어떤 일을 하게 되는 것 바로 이것을 메서드, 즉 방법이라 부르는 것입니다. VBA로 이를 표현하면 아래와 같습니다.

Ragne("B2:D7").Copy
Range("F1").PasteSpecial xlPasteAll

 

어떤 개체의 속성과 방법을 구분하는 일은 그러나 가끔 곤란해 보일 경우도 있습니다.

가장 쉬운 구분법은 물론 엑셀이 제공해주는 것을 그대로 따르는 것입니다.  지난 강좌에서 말씀 드렸던 '속성/메서드 목록 창'에 보면 엑셀은 위와 같이 속성과 메서드를 구분해 보여줍니다. 끝으로 한가지 덧붙이면, 어떤 개체의 속성은 개체의 자격을 가질 수 있다는 것입니다(방법은 그러나 그럴 수 없습니다^^). 예컨대, 자동차는 바퀴가 달려 있습니다. 바퀴는 곧 자동차의 한 속성입니다. 그러나, 그 바퀴는 떼어 내어도 잘 굴러다닐 수 있는 속성을 지닌 개체가 될 수 있는 것과 마찬가지입니다. 앞으로 여러분은 이 VBA강좌에서 속성이나 방법 그리고 개체란 말을 수 없이 듣게 될 것입니다. 그러나, 고양이는 멍멍 짖지 않는다는 간단한 것에서부터 모든 것이 출발한다는 것을 잊지 않으신다면...쉽게 엑셀에 VBA라는 날개를 달 수 있게 될 것입니다.

목차 | 이전 | 다음