티스토리 뷰
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에는
상속
이 없습니다! 따라서 인터페이스를 대안으로 사용하고 있습니다.
오리 시뮬레이터
귀여운 오리가 나오는 게임이 있습니다. 이 게임은 객체지향 기법을 사용하여 IDuck이라는 인터페이스를 구현하여 여러 종류의 오리를 만들었습니다.
Excel VBA 직접 실행창에서의 실행 결과
일단 Excel VBA에서 잘 동작하네요! Mallard와 RedHead는 각각 물오리와 붉은머리오리이고 똑같이 동작하는 것처럼 보이지만, 조금 다릅니다. 어떻게 보면 오히려 Mallard가 쓸데 없는 코드를 한 줄 더 쓴것처럼 보이기도 하네요. 그렇지만 main 모듈
에서 보았을 때만 그렇습니다. 좀 더 자세히 들여다 볼게요!
인터페이스 클래스와 서브 클래스를 좀 더 자세히 볼까요?
#오리 시뮬레이션 게임의 다이어그램에서 볼 수 있듯이, 사진 왼쪽 하단의 MallardDuck 서브클래스
는 IDuck 인터페이스 클래스
를 구현(Implements)합니다. 만약 인터페이스를 구현만 하고, 그냥 선언해서 사용하려면 구현하는 인터페이스 이름 + 언더바(_) + 함수명(quack, swim)을 붙여서 사용해야합니다. 이렇게 사용했을 때 MallardDuck 클래스의 함수명(프로시저)
은 이상하고, 비효율적인 것처럼 보입니다!
IDuck_quack이라뇨!
이걸 언제 다 치고 있어요!
그런데 관찰력이 좋은 분은 눈치챘을 수도 있겠네요! main 모듈
에서는 IDuck_quack 같은 것을 본적이 없다는 것을요.
여기에서 차이가 발생합니다.
왼쪽처럼 인터페이스를 구현하였을 때, 클래스 내부의 함수가 아닌 IDuck 인터페이스 클래스의 함수 이름
을 기준으로 사용할 수 있습니다.
인터페이스
: 모든 구현(실제 동작 코드)를 미룬 코드로, '기초 설계도'라 '명세서(specification)' 등이라 할 수 있습니다.
이번 편에서는 이렇게 오리 시뮬레이션 게임과 VBA에서의 객체지향 사용법 및 인터페이스에 대해 간단하게 알아보았습니다. 다음 편의 내용은 인터페이스의 확장
입니다.
INDEX
'VBA > OOP' 카테고리의 다른 글
VBA OOP / INDEX (0) | 2022.09.22 |
---|---|
CH2 - 기상 모니터링 3편 / 옵저버 패턴 방식 변경 (1) | 2022.09.22 |
CH2 - 기상 모니터링 2편 / 시스템 설계 및 구현 (0) | 2022.09.22 |
CH2 - 기상 모니터링 1편 / 옵저버 패턴의 이해 및 구조 파악 (1) | 2022.09.22 |
CH1 - 오리 시뮬레이션 게임 3편 / 인터페이스 동적 활용 및 정리 (0) | 2022.09.14 |
CH1 - 오리 시뮬레이션 게임 2편 / 인터페이스 확장 (0) | 2022.09.13 |