## 0.1 객체 지향형 다형성 확립을 위한 Node 기본 클래스 상속 패턴
현대적인 ROS2 클라이언트 프로그래밍 패러다임은 글로벌 변수와 절차적(Procedural) 스크립팅을 지양하고, 시스템 상태의 캡슐화(Encapsulation)를 극대화하기 위해 객체 지향 프로그래밍(OOP, Object-Oriented Programming) 기반의 상속(Inheritance) 패턴을 표준으로 채택한다. 개발자는 rclcpp::Node (C++) 또는 rclpy.node.Node (Python)라는 프레임워크가 제공하는 강력한 기본 클래스(Base Class)를 상속받아 사용자 정의 컴포넌트 클래스를 선언함으로써, ROS2 시스템의 다형성(Polymorphism)을 확립하고 런타임 제어의 추상화를 달성한다.
0.1.1 상태 캡슐화와 슈퍼 클래스 초기화(Superclass Initialization) 메커니즘
Node 클래스 상속 패턴의 가장 큰 학술적 이점은 하나의 독립적인 소프트웨어 로직(예: 비전 기반 객체 인식기, 혹은 비행 제어기)이 필요로 하는 모든 통신 엔티티(Publisher, Subscriber, Timer, Service Server)를 단일 클래스 내의 멤버 변수(Member Variable)로 강하게 결합시킬 수 있다는 점이다.
사용자 정의 클래스가 인스턴스화될 때, 해당 클래스의 생성자(Constructor)는 반드시 초기화 리스트(Initialization List, C++의 경우) 또는 super().__init__('node_name') (Python의 경우) 구문을 통해 부모 클래스인 기저 Node의 생성자를 호출해야 한다. 이 단계에서 내부적으로 RCL 계층의 rcl_node_t 구조체가 동적으로 메모리에 할당되고 프레임워크 전역 그래프(Global Graph)에 노드의 고유한 이름표(식별자)가 등재된다. 멤버 변수로 선언된 각종 타이머나 퍼블리셔 객체들은 기저 노드의 생성 주기에 종속되므로, 메모리 생성과 파괴가 일체화되는 RAII(Resource Acquisition Is Initialization) 원칙을 자연스럽게 준수하게 된다.
0.1.2 다형성을 통한 이그제큐터(Executor) 주입 패턴
상속을 활용한 객체 지향적 설계는 ROS2의 실행 모델인 이그제큐터(Executor)와의 연동에서 다형성(Polymorphism)의 진면목을 발휘한다. 이그제큐터의 add_node() 인터페이스는 구현체가 무엇이든 불문하고 오로지 rclcpp::Node (혹은 스마트 포인터 기반 std::shared_ptr<rclcpp::Node>) 인터페이스 형식만을 요구한다.
개발자가 상속을 통해 구현한 다양한 로보틱스 모듈 인스턴스들은 모두 암시적인 업캐스팅(Upcasting)을 거쳐 단일 스레드 이그제큐터(Single-threaded Executor)나 다중 스레드 이그제큐터(Multi-threaded Executor)의 관리 풀(Pool)에 자유롭게 배치될 수 있다. 이는 서브시스템의 통신 주기를 제어하는 이벤트 루프 엔진(이그제큐터)과, 실제 비즈니스 로직(센서 처리, 모터 제어 등)이 담긴 노드 클래스를 완전히 분리하는 의존성 역전(Dependency Inversion) 원칙을 시스템 레벨에서 구현한 것이다.
0.1.3 컴포넌트(Component) 기반 아키텍처로의 확장성
Node 객체 상속 패턴은 향후 지연 시간 최적화를 위한 플러그인(Plugin) 기반 로드 시스템인 컴포넌트(Component) 아키텍처로의 전환을 위한 선행 필수 조건이다. 단순히 main 함수 내부에서 rclcpp::Node::make_shared()를 직접 호출하여 절차적으로 구현한 코드는 프로세스 간 통신 최적화(Intra-process Communication)를 위한 동적 라이브러리(.so 빌드)로 승격될 수 없다. 반면, rclcpp::Node를 클래스로 상속받아 명시적으로 캡슐화한 코드는 RCLCPP_COMPONENTS_REGISTER_NODE 매크로를 통해 런타임에 동적으로 주소 공간에 로드 및 언로드(Load and Unload)할 수 있는 재사용 가능 모듈로 진화한다. 이는 군집 로봇이나 다기능 드론의 시스템 자원을 런타임에 동적으로 재배치할 수 있게 돕는 실용적이고도 핵심적인 아키텍처 설계 규약이다.