목차 열기

티스토리 뷰

728x90
반응형

CH1 - 오리 시뮬레이션 게임 1편 / VBA 객체지향 사용방법 예시

이 글은 Excel VBA 에서 객체지향 디자인 패턴을 사용하는 것을 학습하며 정리하기 위한 글입니다.
내용은 책 "헤드 퍼스트 디자인 패턴 : 14가지 GoF 필살 패턴! 유지 관리가 편리한 객체지향 소프트웨어를 만드는 법"을 변형하여 적용하였습니다.
모든 코드는 GitHub의 Commit History에서 변경된 내용을 볼 수 있습니다.
Excel Office 365 with RubberDuck Add-In
GitMind - UML-클래스 다이어그램
GitHub with Visual Studio Code


원문에서는 JAVA의 상속을 이용하지만, 사실 VBA에는 상속이 없습니다! 따라서 인터페이스를 대안으로 사용하고 있습니다.

오리 시뮬레이터

GitHub Commit History

귀여운 오리가 나오는 게임이 있습니다. 이 게임은 객체지향 기법을 사용하여 IDuck이라는 인터페이스를 구현하여 여러 종류의 오리를 만들었습니다.

오리 시뮬레이터 다이어그램 / 오리는 역시 귀엽습니다

Excel VBA 직접 실행창에서의 실행 결과

일단 Excel VBA에서 잘 동작하네요! Mallard와 RedHead는 각각 물오리와 붉은머리오리이고 똑같이 동작하는 것처럼 보이지만, 조금 다릅니다. 어떻게 보면 오히려 Mallard가 쓸데 없는 코드를 한 줄 더 쓴것처럼 보이기도 하네요. 그렇지만 main 모듈에서 보았을 때만 그렇습니다. 좀 더 자세히 들여다 볼게요!

인터페이스 클래스와 서브 클래스를 좀 더 자세히 볼까요?

#오리 시뮬레이션 게임의 다이어그램에서 볼 수 있듯이, 사진 왼쪽 하단의 MallardDuck 서브클래스IDuck 인터페이스 클래스를 구현(Implements)합니다. 만약 인터페이스를 구현만 하고, 그냥 선언해서 사용하려면 구현하는 인터페이스 이름 + 언더바(_) + 함수명(quack, swim)을 붙여서 사용해야합니다. 이렇게 사용했을 때 MallardDuck 클래스의 함수명(프로시저)은 이상하고, 비효율적인 것처럼 보입니다!

IDuck_quack이라뇨! 이걸 언제 다 치고 있어요!

그런데 관찰력이 좋은 분은 눈치챘을 수도 있겠네요! main 모듈에서는 IDuck_quack 같은 것을 본적이 없다는 것을요.
여기에서 차이가 발생합니다.

선언(Dim)에 따라 쓸 수 있는 프로시저(Sub)가 다르네요?

왼쪽처럼 인터페이스를 구현하였을 때, 클래스 내부의 함수가 아닌 IDuck 인터페이스 클래스의 함수 이름을 기준으로 사용할 수 있습니다.

  • 인터페이스: 모든 구현(실제 동작 코드)를 미룬 코드로, '기초 설계도'라 '명세서(specification)' 등이라 할 수 있습니다.

이번 편에서는 이렇게 오리 시뮬레이션 게임과 VBA에서의 객체지향 사용법 및 인터페이스에 대해 간단하게 알아보았습니다. 다음 편의 내용은 인터페이스의 확장입니다.

INDEX

다음편 / CH1 - 오리 시뮬레이션 게임 2편 / 인터페이스 확장

VBA / INDEX

VBA / OOP / INDEX

728x90
반응형
댓글
글 보관함
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday