-
[디자인패턴] Abstract Factory 패턴프로그래밍/C언어 프로그래밍 2014. 4. 22. 11:30반응형
컴파일러를 개발하기 위해 설계를 한다고 생각해보자.
컴파일러는 입력되는 원시 코드를 토큰 단위로 잘라주기 위한 스캐너(Scanner), 구문 분석을 하기 위한 파서(Parser),중간 코드 및 기계어 코드를 생성하기 위한 코드 생성기 (Code Generator),생성된 코드를 최적화시켜주기 위한 최적화 모듈등으로 구성된다. 이를 객체지향 개념을 도입해서 설계하면 Scanner, Parser, CodeGenerator, Optimizer등과 같은 클래스로 정의할 수
있을 것이다.
이처럼 컴파일러는 오랜 연구를 통해 필요로 하는 모듈과 수행해야할 작업 및 과정이 일반화되어 있다. 따라서 컴파일러 개발을 위한 설계는 다른 시스템의 개발을 위한 설계보다 좀더 수월하게 진행할 수 있다.
그러나 여러 시스템이나 운영체제에서 동일하게 실행이 가능한 컴파일러를 개발해야 할 경우에는 다음과 같이 몇가지 문제가 발생한다.
개발된 컴파일러가 실행될 시스템이 서로 다를 경우 기계어 코드를 생성하기 위한 Code Generator클래스의 구현도 각 시스템마다 달라져야 한다. 왜냐하면 각 시스템마다 사용하는 기계어 코드가 다르기 때문이다. 따라서 각 시스템에 맞추어 CodeGenerator 클래스가 별도로 구현될 가능성이 높다.
예를 들어 HP 시스템에서 실행될 컴파일러와 Sun 시스템에서 실행될 컴파일러의 Code Generator 클래스는 각 시스템마다 사용하는 기계어 코드가 다르므로, 그 구현이 서로 달라 질수 밖에 없으며, HPCodeGenerator 클래스와 SunCodeGenerator클래스로 각각 구현될 수 있을 것이다.
시스템 뿐만 아니라 컴파일러가 실행될 운영체제환경이 여러가지일 경우에도 컴파일러를 구성하는 각 클래스들은 운영체제마다 별개로 존재할 가능성이 높다. 왜냐하면 구현 시 사용하게 되는 시스템함수가 운영체제마다 다를 수 있기 때문이다.
이처럼 동일한 기능이나 역할을 수행하는 클래스들이 실행될 환경이나 기타 조건에 따라 각각 별개로 존재할 때, 같은 환경이나 조건에서 실해될 클래스들만을 모아놓은 것을 하나의 제품군(Product Family)라고 한다.
여기서 문제는 실행될 환경이나 조건이 결정되었다고 할 때, 어떻게 그 환경이나 조건에 맞는 클래스의 객체만을 생성해서 사용할 수 있을까라는 점이다. 즉, 어떻게 같은 제품군에 속한 클래스의 객체만을 생성해서 사용하도록 보장받을 수 있는가라는 점이다.
예를 들어 컴파일러의 경우 HP환경에서 동장하는 클래스로 HPScanner, HPParser,HPCodeGenerator,HPOptimizer등이 있고,
Sun 환경에서 동작하는 클래스의 객체들만 생성되어야 할것이다. 그렇다면 이런 사실을 어떻게 명확히 보장받을수 있을까?
반응형'프로그래밍 > C언어 프로그래밍' 카테고리의 다른 글
B-TREE (0) 2013.12.08 더블링크드리스트 (0) 2013.12.08 1.STL vertor (0) 2013.11.23