Skip to main content
QUICK REVIEW

[논문 리뷰] On the Interaction of Object-Oriented Design Patterns and Programming Languages

Gerald Baumgartner, Konstantin Läufer|arXiv (Cornell University)|2019. 05. 31.
Software Engineering Research참고 문헌 29인용 수 27
한 줄 요약

이 논문은 주류 객체 지향 언어의 결함으로 인해 일반적인 설계 패턴의 구현이 복잡해지는 문제점을 규명하고, 상속과 분리된 다형성, 어휘적 스코프를 가진 클로처, 다형 메서드 디스패치와 같은 상호 보완적이고 일반적인 언어 구조를 제안하여 패턴의 구현을 단순화한다. 핵심 기여는 이러한 구조를 기반으로 설계 패턴을 기술하는 프레임워크를 제공함으로써, 다양한 언어 생태계에서 더 명확하고 이식 가능하며 광범위하게 적용 가능한 패턴 기술의 가능성을 높이는 것이다.

ABSTRACT

Design patterns are distilled from many real systems to catalog common programming practice. However, some object-oriented design patterns are distorted or overly complicated because of the lack of supporting programming language constructs or mechanisms. For this paper, we have analyzed several published design patterns looking for idiomatic ways of working around constraints of the implementation language. From this analysis, we lay a groundwork of general-purpose language constructs and mechanisms that, if provided by a statically typed, object-oriented language, would better support the implementation of design patterns and, transitively, benefit the construction of many real systems. In particular, our catalog of language constructs includes subtyping separate from inheritance, lexically scoped closure objects independent of classes, and multimethod dispatch. The proposed constructs and mechanisms are not radically new, but rather are adopted from a variety of languages and programming language research and combined in a new, orthogonal manner. We argue that by describing design patterns in terms of the proposed constructs and mechanisms, pattern descriptions become simpler and, therefore, accessible to a larger number of language communities. Constructs and mechanisms lacking in a particular language can be implemented using paradigmatic idioms.

연구 동기 및 목표

  • 기존 객체 지향 프로그래밍 언어의 한계가 널리 사용되는 설계 패턴의 구현 방식을 왜곡하거나 복잡하게 만드는 방식을 규명하는 것.
  • 실제 사례의 설계 패턴을 분석하여, 언어 기능의 부재로 인해 나타나는 공통적인 관용 표현을 추출하는 것.
  • 설계 패턴의 구현을 보다 잘 지원하기 위해 최소한이면서 상호 보완적인 언어 구조와 메커니즘의 집합을 제안하는 것.
  • 이러한 일반화된 구조를 기반으로 설계 패턴을 기술함으로써, 다양한 언어 생태계 간의 접근성과 재사용성을 향상시키는 것.
  • 다양한 언어 생태계에서의 설계 패턴 기술을 향상시키기 위해, 구조적 다형성, 클로처, 다형 메서드 디스패치와 같은 핵심 기능이 대부분의 정적 타입의 객체 지향 언어에 부족한 점을 규명함으로써 향후 언어 설계를 이끄는 것.

제안 방법

  • 언어 한계로 인해 반복되는 관용 표현이 나타나는 설계 패턴(예: 싱글턴, 핸들-바디)을 분석하여 문제를 규명하는 것.
  • 가비지 컬렉션 부재, 일급 클로처 부재, 다형성 및 인터페이스 지원 부족 등 반복적인 언어적 결함를 식별하는 것.
  • 서로 보완적인 언어 구조의 집합을 제안: 상속과 분리된 다형성, 어휘적 스코프를 가진 클로저 객체, 다형 메서드 디스패치.
  • 이러한 구조가 현재 언어 관용 표현보다 설계 패턴을 더 단순하게 표현할 수 있음을 입증하는 것.
  • 결함이 있는 구조는 대상 언어에서 범용적인 관용 표현을 통해 모방 가능하므로, 패턴의 이식 가능성을 확보할 수 있음을 주장하는 것.
  • 기존 언어(예: C++, Java, ML, Modula-3)를 평가하여 핵심 패턴 요구사항을 충족하지 못하는 점을 보여주는 것.

실험 결과

연구 질문

  • RQ1주류 객체 지향 언어의 언어 한계가 일반적인 설계 패턴의 구현 방식을 왜곡하거나 복잡하게 만드는 방식은 무엇인가?
  • RQ2현재 정적 타입의 객체 지향 언어에서 설계 패턴의 깔끔하고 관용적인 구현을 방해하는 데 있어 부족한 언어 구조와 메커니즘은 무엇인가?
  • RQ3다양한 프로그래밍 언어에서 설계 패턴의 표현을 단순화하기 위해 최소한이면서 상호 보완적인 언어 구조 집합을 정의할 수 있는가?
  • RQ4일반화된 구조 집합을 사용하면 설계 패턴을 특정 언어 기능에서 독립적으로 얼마나 잘 기술할 수 있는가?
  • RQ5특정 언어 기능의 부재를 실무에서 어떻게 기존의 확립된 프로그래밍 관용 표현을 통해 보완할 수 있으며, 그 과정에서 명확성이나 정확성이 손상되지 않는가?

주요 결과

  • C++의 가비지 컬렉션 부재로 인해 핸들-바디 패턴이나 엔VELOPE-LETTER 패턴 같은 패턴의 복잡한 관용 표현이 필수적이며, 가비지 컬렉션을 지원하는 언어에서는 훨씬 더 단순하게 표현될 수 있다.
  • 모듈 구조나 일급 객체를 지원하는 언어에서는 싱글턴 패턴이 거의 불필요하다는 점을 고려하면, 일부 패턴은 언어 기능의 부재를 보완하기 위한 일시적인 해법일 뿐이라는 점을 시사한다.
  • 다형성은 상속과 명확히 분리될 수 있으며, 이를 통해 둘 다 타입 안정성과 코드 재사용성을 향상시킬 수 있다.
  • 어휘적 스코프를 가진 클로저 객체는 기능적 프로그래밍 스타일과 추상 데이터 타입 프로그래밍 스타일을 가능하게 하며, 클래스 기반 캡슐화의 더 유연한 대안을 제공한다.
  • 다형 메서드 디스패치는 단일 디스패치를 확장하여 다중 인자에 대한 다형적 행동을 더 자연스럽게 표현할 수 있게 하여 표현력을 향상시킨다.
  • 기존 언어 중 어느 것도 제안된 모든 구조를 지원하지 못하며, 특히 구조적 다형성, 클로저, 인터페이스, 다형 메서드의 조합을 지원하지 않아, 이러한 언어는 언어 설계 분야에서 중요한 도약이 될 수 있다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.