김태석, 김종수 Tai Suk Kim, Jong Soo Kim 1. 서론워드프로세스 이미지저작도구와같이특정한작업에필요한데이터를메모리로읽어들여서편집하는것을주요기능으로하는소프트웨어는잘못된작업을바로취소할수있는 기능의지원이필수적이라할수있다 이러한 기능의구현은텍스트데이터를기반으로하는프로그램뿐만아니라 그래픽프로그램인경우더욱중요한기능이며 해당기능의구현이소프트웨어사용자가비생산적인실수를하더라도전체작업스케줄에지장없이안정적으로작업할수있는여건을마련해준다 와 기능이필요한어플리케이션은이와관련된기능의구현을설계초기에반영해놓지않으면 해당기능을구현하기위해많은코드를수정해야하는번거로움이생길수있다 객체지향적으로 설계되는소프트웨어의설계와구현에있어서도 와 기능의지원이필요한경우 방대한양의코드를효율적으로구현하기위해서는 와 기능이효율적으로구현될수있는설계를바탕으로필요한나머지기능을구현해나가는것이해당기능과전체어플리케이션구현에효과적인경우가많다 2. 관련연구 2.1 선행연구현재구글의앱스토어나국내의앱마켓에서는 과같은다양한스도쿠게임이있으며 해당스도쿠게임에는 기능이구현되어있는것도있으며 그렇지않은것도있다 리눅스기반의 소스스도쿠프로그램도있지만 이경우 객체
Fig. 1. Some examples of the sudoku game. 지향적으로설계되지않아서 와같이객체지향언어를사용하는경우오픈되어있는기존의소스를재사용하는데편리하지않다 기반으로구현된스도쿠앱도많지만 소스가오픈된경우가매우드물며 스도쿠게임서객체지향개념의근간이되는클래스의캡슐화를파괴하지않고 분산작업이용이한 기능의설계를참고하기는힘든경우가많다 위에그림중에서가장오른쪽에빨간색박스로감싸진스도쿠게임은소스가오픈된스도쿠게임이다 는오픈소스스도쿠에서사용하고있는 의 구현을보여준다 다이어그램에서 수행되는명령어를객체로관리하기위해 클래스를사용하여 클래스객체를생성하고있음을볼수있고 와 추상메서드를가지는 클래스를상속받는 추상클래스와 를다시상속받는 클래스가있음을볼수있다 설계에서다소비효율적인부분은추상메서드가정의되어추상클래스로정의 Fig. 2. Command Pattern implementation of the open source sudoku.
된 를상속받는 는해당클래스에서정의된추상메서드가없음에도불구하고추상클래스로정의된것을볼수있다 따라서 클래스와 클래스는통합되는것이클래스관리와구현에편리하다고할수있다 은오픈스도쿠에서게임을구현하기위한주요클래스설계를보여준다 클래스의 메서드는 패턴으로구현된임의의자식클래스를저장하기위하여부모클래스인 를아규먼트로받고있는것을볼수있다 또한 기능을구현하기위하여 그림의빨간박스에서보는바와같이 와같은메서드들이 클래스에포함되어있음을볼수있다 다이어그램에서는 기능의구현을위해관련된기능의구현을별도의클래스로분리하지않은것을볼수있는데 이와같은구현은추후지속적인기능의향상을위하여필요한메서드의개수가지속적으로늘 어날수있다는가정을하면 클래스가전체어플리케이션설계에서너무많은역할을담당하게되는데 이는여러명의개발자들이동시에진행하는소프트웨어분산작업에서일부클래스가비대해짐으로써 전체개발일정을지연시키는결과를초래할수있다 2.2 GoF 디자인패턴을이용한구현 의 패키지를활용할수없는경우에는 기능을구현하기위해서 디자인패턴을활용할수있다 그래픽을다루는것이주요기능인프로그램의 기능구현에있어서디자인패턴을이용한예는 과같은여러사이트에소개되어있다 기능구현에주로사용되는패턴으로는 그리고 패턴이있다 간단한 기능의구현에는 나 가필요없는경우도있지만 그래픽처리가주요기능인복잡한어플리케이션의 기능구현에는이들패턴들이유기적으로결합되어해당기능이구현된다 Fig. 3. related methods for implementing undo function in open sudoku.
Fig. 4. Memento pattern. 일반적으로 패턴은명령을트랜잭션형태로수행해야하는경우나 콜백기능을구현하고자할때사용할수있다 기능의구현을위해서사용자가발생시키는명령어를 나 과같은자료구조를이용하여수행될명령어의인스턴스를저장하고 기능호출시해당자료구조를이용하여관련명령어를수행하는데참고한다 에있는 패턴은 기능구현에관련된객체들에대하여해당시점의상태를기억하는역할을담당하는데 패턴이가지고있는명령어를저장하는스택을참조하여 기능을순차적으로구현할수있도록도와준다 패턴은상태변화감시가필요한다양한객체들을제어하기위한패턴으로 기능호출시어플리케이션에서전체적으로다시그려야하는컴포넌트들을관리하는역할을담당한다 3. 스도쿠게임의 Undo 기능설계 3.1 GUI 설계 설계에많은시간이들어가는게임의구현에있어서도 기능의구현이필요한경우가있다 특히기억력을소재로하는게임이나 교육용게임에서 기능의구현이필요한경우가많다 에서 기능이구현된스도쿠의 설계를볼수있다 새로설계된어플리케이션은 을가진다 한개의 클래스는입력될수있는 까지에숫자를가지며 문제가출제되어숫자가해당 에부여되거나사용자가정답으로입력하는숫자는 의중앙에숫자의색상과크기를다르게하여출력된다 의중앙영역은전체 객체를배열로관리하는 북쪽영역에는퀴즈출제 문제풀이검증 환경설정등을선택할수있는 남쪽영역에는선택된셀에숫자를입력할수있는숫자버튼과기존에입 Fig. 5. GUI Design of a sudoku game. 력된숫자를취소하거나되돌릴수있는 와 버튼이포함된 이있다 3.2 GoF 패턴적용한클래스다이어그램스도쿠게임에서 패턴을이용하여 기능을구현한설계의예는 에서볼수있다 를이용하여지정한숫자를입력하는기능을구현하기위하여 의 패턴을사용하였다 인터페이스를구현한추상클래스인 를상속받는 클래스를사용하여클릭된숫자에해당하는정답을가진인스턴스가생성된다 게임이시작되면서숫자버튼을클릭하여입력되는명령을추적하기위해 클래스의 자료구조를가지는 객체변수가사용된다 명령어가수행되는현재의상태를저장하기위하여 인터페이스를구현한 클래스가사용되며명령어가수행될때마다기존의히스토리를저장하는 객체를생성한후 클래스의 객체변수에저장한다 을전체적으로관리하는 클래스는 명령이수행될경우전체 을다시그려야되므로 인터페이스를구현하고 클래스에저장된 가어떠한단계까지 을다시그려야할것인지에대한정보를알려준다
Fig. 6. Class design of the undoable sudoku game using GoF design patterns. 3.3 시퀀스다이어그램 명령을구현하기위한첫번째절차는 의 메서드를호출하는것으로부터시작된다 의시퀀스다이어그램에서클릭된명령버튼의인스턴스를저장하고관련된처리를수행하기위한메서드수행절차를볼수있다 사용자가숫자버튼을클릭함으로써 의 명령이호출된다 다음으로 인터페이스를구현하고있는추상클래스인 를상속받는 객체의 가호출된다 다음으로 객체는 객체의 를호출한다 객체는숫자버튼이클릭되는순서와해당객체를 자료구조에저장하기위한객체인데 현재까지클릭된 객체들에대한상태를순서대로저장하기위해생성된 정보를이용하여 객체를가져온다 가 를호출하여현재까지의상태에대한정보를객체로전달받는메서드가수행이완료되면 메서드를호출하여 객체에숫자가입력된 의정보를저장하고 선택된 에사용자가입력한숫자를정답으로처
Fig. 7. Sequence diagram to save the state on clicked a number button. 리한후 정답이입력되면수행되어야할처리를추가적으로수행한다 이메서드의수행이완료되면 에서가지고있는 구조의 에현재클릭된 객체를저장하고 을초기화한다 와 가 와관련된데이터처리를끝내면 패턴의참가자인 인터페이스를구현하고있는 클래스에서관리하고있는 개의 객체를다시그린다 기능구현과관련된 다이어그램은 에서볼수있다 사용자가 버튼을클릭하면 의 명령이호출된다 클래스가가지고있는 에값이들어있지않으면바로리턴하며 값이한개라도있는경우 를호출하여제일처음에있는 를제거한후 의 를호출한다 다음으로 객체의 메서드 Fig. 8. Undo sequence diagram.
를호출한다 는현재까지의숫자버튼클릭순서를저장하고있는 형의 객체를이용하여 객체를새로생성하여이를돌려받는다 다음으로 의 메서드가돌려받은 객체를이용하여 와관련된작업을수행한다 작업이완료되면 의 에서해당 를삭제한다 클래스에있는 의 다이어그램과마찬가지로 와 가 와관련된데이터처리를끝내면 패턴을사용하는 객체에서관리하고있는 개의 을다시그린다 화를파괴하지않고 특정시점으로인스턴스를복원하기위해서는순차적으로저장된인스턴스내부의정보를자유롭게액세스할수있어야하고 이를위해 패턴을활용할수있다 기능이있는스도쿠게임을구현하기위하여 디자인패턴중에서 그리고 패턴을이용한스도쿠게임구현을 에서볼수있다 이관리하는 배열에서 의좌표번호 에차례대로 을입력한후 패널에있는 와 버튼을클릭한결과 와 기능이설계대로구현된것을볼수있다 4. 구현및평가 4.1 구현소프트웨어의 기능설계에디자인패턴을활용하는이유는객체지향개념의근간이되는캡슐화를위배하지않으면서 추후이와유사한소프트웨어구현에해당클래스를재사용할수있다는장점이있기때문이다 자바기반의어플리케이션에서 기능을구현하려면특정명령어가실행되는시점에서메모리에생성된인스턴스들이가지고있는정보를저장할필요가있다 전체어플리케이션구현에클래스의캡슐 4.2 평가객체지향적인분석과설계에서는주어진요구사항을해결하기위하여 현실세계에있는여러가지사물들에대하여클래스라는이름의프로토타입을만든다 클래스를설계하는근간이되는개념은다른사물들과구분되는속성의정의와속성을사용하는메서드의캡슐화이며 설계와소프트웨어의구현을보다효율적으로수행하기위해상속 동적할당과같은추가적인개념이포함된다 일반적으로 어떠한어플리케이션을사용하는최종사용자의입장에서는설계가어떻든간에자신이원하는기능만빠르고정확하게수행이되지만 지속 Fig. 9. Execution example of undo and redo function.
Table 1. Performance evaluation of a class design using design patterns 패턴 패턴 패턴 구현 구현 기타 앱스토어 적으로소프트웨어개발에종사해야하는개발자들의입장에서는소프트웨어의효율적인설계가추후일어날수있는작업량을줄일수있어서시간과비용의절감에아주효율적인경우가많으며 이러한이유에서기존의설계보다효율적인설계는항상있을수있다 객체지향패러다임의소프트웨어설계와구현에서가장핵심이라고할수있는클래스설계에서도일반적으로통용되는클래스설계에다음과같은지침들이있다 간결한클래스를위하여최소한의공개인터페이스제공 클래스를사용하는다른사용자에게영향을주지않기위한구현은익 속성초기화와메모리관리를위한견고한생성자설계 다른클래스와의협력관계를고려한느슨한결합 재사용을고려한설계 확장성을고려하여설계 코딩표준을위한속성과메서드의명명규칙적용 유지보수가더편리하게만들기위한코드분리이외에도다양한설계지침이있지만 본논문에서는구현된소프트웨어의성능평가를위해지침중에서몇가지를사용하여기존에구현된다른소프트웨어와의성능을평가하였고 에그결과를정리하였다 표에서 는소스가공개되지않아서파악할수없음을나타낸다 앱스토에서제공되는게임의대부분은소스가공개되지않아서 디자인패턴의적용여부를분명하게파악할수없었고 나 기능이구현되지않은앱이다수있었다 논문에서 와 기능을비교하기위해분석된오픈 소스스도쿠는 패턴이사용되었으며 기능은구현되었으나 기능은구현되지않았다 이에반하여새로설계된가칭 는클래스의분산을위해 그리고 패턴을유기적으로사용하여 기능을구현하였고 추가적으로 기능도구현한것을볼수있다 5. 결론 기능이필요한어플리케이션의경우 그와관련된설계를미리반영해놓지않으면 해당기능의구현이어려운경우가많다 본논문에서는 기능구현이필요한어플리케이션의설계와구현을위하여해당기능을구현하는몇몇사례를조사하였다 안드로이드기반으로구현된오픈소스스도쿠게임을대상으로클래스다이어그램을분석하여스도쿠게임에서 기능을구현하기위한설계에서몇몇문제점을고찰하였다 해당스도쿠는 기능의구현을위해 의 패턴을사용하였지만 필요없는클래스를추가함으로써비효율적인설계가있는부분을살펴보았고 또한 기능구현에있어서전체게임의진행을담당하는 클래스가해당기능의구현도같이담당하고있어서 해당클래스가너무비대해지는문제점을볼수있었다 안드로이드기반의어플리케이션제작에서와같이 의 패키지를사용할수없는경우에있어서 기능을구현하기위하여 패턴중에서 그리고 패턴을유기적으로사용하여효율적으로클래스를분산시키는방법을보였으며 해당설계에바탕을둔기능을구현하여 와 기능이정상적으로작동하는것을보였다 논문에서적용된 기능의구현예는바
둑이나장기와같은게임외에도그래픽에디터기능이필요한어플리케이션의설계에도움을줄수있다 REFERENCE 년경북대학교전자공학과공학사졸업 년일본 대학이공학부계산기과학전공공학석사 년일본 대학이공학부계산기과학전공 공학박사 년일본국제전신전화연구소 기술고문 년일본 대학이공학부객원연구원 년 현재동의대학교컴퓨터소프트웨어공학과교수관심분야 정보시스템 기계번역 인터넷비즈니스 년부경대학교냉동공학전공공학사졸업 년부산외국어대학교컴퓨터공학전공공학석사 년동의대학교컴퓨터소프트웨어공학전공공학박사 년동의대학교산업기술개발연구소 연구원 년 현재한국승강기대학승강기공학부교수관심분야 소프트웨어설계 게임