반응형

객체(Object)가 도대체 뭐야?

개발 공부를 하면 객체라는 말을 자주 접하게 됩니다. 처음 설명을 들으면 알 것 같으면서도 애매합니다. VBA역시 객체 지향 프로그램이기 때문에 객체라는 말을 잘 이해하는 것이 VBA를 공부하는데 도움이 됩니다. 

 

사람의 언어를 바탕으로 객체를 한 번 설명해 보겠습니다. 친구와 어떤 방에 있다고 하겠습니다. 그 방에는 문과 창문이 각각 하나씩 있습니다. 아무런 맥락 없이 갑자기 친구한테 "00야 좀 닫아줘"라고 이야기를 하면 친구는 무엇을 닫아야 할지 판단하기가 어렵습니다. 이때 대상을 가르키는 문이나 창문이라는 주어가 객체라고 볼 수 있습니다. 언어에서 객체가 중요한 것처럼 VBA에서도 객체가 중요합니다. 

 

객체는 하나로 구성될 수도 있지만 어떤 것들의 집합일 수 있습니다. 도서관에 있는 동화책 한권을 생각해보겠습니다. 그 책들을 한 방에 모아서 어린이 코너를 만들었습니다. 어린이 코너처럼 주체별로 모인 여러 코너가 모여 도서관을 채워주고 있습니다. 

 

도서관은 하나의 객체입니다. 그런데 이 객체는 여러 코너들의 집합을 포함하고 있습니다. 

어린이 코너는 하나의 객체입니다. 그런에 이 객체는 여러 어린이 책들의 집합을 포함하고 있습니다. 

처음 우리가 떠올렸던 동화책도 하나의 객체입니다. 

 

 

객체(Object)를 인식하는 게 왜 중요한 거야?

객체라는 단어는 일상 생활에 자주 쓰이지 않기 때문에 여전히 아리송할지도 모르겠습니다. 하지만 여기서 분명히 기억할 것은 우리가 말을 할 때나, VBA 언어를 사용할 때는 어떤 대상이 필요하다는 것입니다. VBA를 작성할 때는 무엇에 어떤 제어를 할지 명확하게 분명하게 지정하는 것이 필요가 있습니다. 

 

그리고 그 대상을 객체라고 부르고 객체는 편의에 따라 집합일 수도 있고 그 하위의 객체일 수도 있다는 것입니다. 

 

엑셀이라는 어플리케이션은 객체입니다. 이 객체는 여러 개의 워크북들의 집합을 포함하고 있습니다. 

워크북은 하나의 객체입니다. 이 객체는 여러 개의 워크시트를 포함하고 있습니다. 

워크시트 역시 하나의 객체이고 여기에는 Range(범위)등의 하위 객체가 포함되어 있습니다. 

 

VBA로 여러 객체(Object) 혹은 대상을 제어할 수 있습니다. 필요에 따라서 원하는 객체를 지정할 수 있습니다.

Application.Workbooks("워크북 이름").Worksheets("워크시트 이름").Range("A1")

 

객체가 생략되는 경우는 없어?

대화에서는 맥락이 분명한 경우 주어가 자주 생략이 됩니다. VBA에서도 맥락을 통해서 대상 객체를 추정하기도 합니다. 

 

아래와 같이 워크북을 생략한다면 현재 활성화 되어 있는 workbook이라고 추정합니다. 

Worksheets("워크시트 이름").Range("A1")

 

아래와 같이 코드를 작성하면 현재 활성화 된 워크시트가 대상이라고 추정합니다. 

Range("A1")

아래와 같이 코드를 작성하면 현재 활성화된 워크시트에서 선택된 셀이라고 추정합니다. 

ActiveCell

 

생략을 사용하는 것이 좋아?

상황에 따라서는 코드를 매우 간단하고 명료하게 해주기 때문에 사용하는 것이 효율적일 수 있습니다.  하지만 잘못 사용하면 VBA를 작성하고 있는 환경에서만 동작하고 다른 워크북이나 시트를 열었을 때는 제대로 동작하지 않는 코드를 작성하게 될 가능성이 높기 때문에 주의가 필요합니다. 

 

따라서 생략을 해도 목적하고 있는 부분이 정확하게 구현이 된다는 확신이 있을 때만 사용하는 것이 권장됩니다. 그리고 사용을 할 때는 이후에 다시 보았을 때 쉽게 이해를 할 수 있도록 주석 등을 달아두는 것이 좋을지도 모르겠습니다(주석을 달아야 이해가 될 정도라면 처음부터 사용하지 않는 것이 좋을지도 모르겠네요).

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기