최근 사물인터넷(IoT), 웨어러블 등 PC이외에 휴대용 디바이스를 대상으로 OOP(Object-Oriented Programming)와 함께 GoF(Gang of Four)의 디자인 패턴 등 다양한 객체지향 방법론 설계를 기반으로 소프트웨어를 개발하고 있다. 그러나 잘못된 어플리케이션 설계는 운영체제 속도 저하, 메모리 점유율과 배터리 사용량 증가 등 문제를 발생시킬 수 있기 때문에 저 사양 디바이스에서의 프로그래밍 최적화의 중요도가 높다. 본 논문에서는 안드로이드(Android) 운영체제를 기반으로 Strategy패턴, State패턴, Observer패턴 등 최적화된 디자인 패턴 적용 방법을 제안한다. 테스트 결과 제안하는 패턴 선별 기법이 저 사양 디바이스에 최적화된 디자인 패턴을 선별할 수 있다는 것을 확인하였다.
최근 사물인터넷(IoT), 웨어러블 등 PC이외에 휴대용 디바이스를 대상으로 OOP(Object-Oriented Programming)와 함께 GoF(Gang of Four)의 디자인 패턴 등 다양한 객체지향 방법론 설계를 기반으로 소프트웨어를 개발하고 있다. 그러나 잘못된 어플리케이션 설계는 운영체제 속도 저하, 메모리 점유율과 배터리 사용량 증가 등 문제를 발생시킬 수 있기 때문에 저 사양 디바이스에서의 프로그래밍 최적화의 중요도가 높다. 본 논문에서는 안드로이드(Android) 운영체제를 기반으로 Strategy패턴, State패턴, Observer패턴 등 최적화된 디자인 패턴 적용 방법을 제안한다. 테스트 결과 제안하는 패턴 선별 기법이 저 사양 디바이스에 최적화된 디자인 패턴을 선별할 수 있다는 것을 확인하였다.
Recent Internet of Things(IoT), and in addition to wearable PC, such as software development methodologies based on a variety of object-oriented design and design patterns of GoF(Gang of Four) with OOP(Object-Oriented Programming) intended for portable devices. However, incorrect application design ...
Recent Internet of Things(IoT), and in addition to wearable PC, such as software development methodologies based on a variety of object-oriented design and design patterns of GoF(Gang of Four) with OOP(Object-Oriented Programming) intended for portable devices. However, incorrect application design specification is that the higher the importance of the optimization of the program on the device because it can cause problems such as decreased operating speed, increase the memory occupancy and battery usage. In this paper, we propose an optimized design pattern based on the method of application, such as Android (Android) OS Strategy Pattern, State Pattern, Observer pattern. Test results show that the proposed scheme selection patterns can be selected to optimize the design pattern in the device that specification.
Recent Internet of Things(IoT), and in addition to wearable PC, such as software development methodologies based on a variety of object-oriented design and design patterns of GoF(Gang of Four) with OOP(Object-Oriented Programming) intended for portable devices. However, incorrect application design specification is that the higher the importance of the optimization of the program on the device because it can cause problems such as decreased operating speed, increase the memory occupancy and battery usage. In this paper, we propose an optimized design pattern based on the method of application, such as Android (Android) OS Strategy Pattern, State Pattern, Observer pattern. Test results show that the proposed scheme selection patterns can be selected to optimize the design pattern in the device that specification.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 기존의 OOP를 이용한 설계 방법론에서 GoF의 디자인 패턴 중 Strategy, State, Observer 패턴을 선별하여 모바일 성능 효율성에 중점을 둔 디자인 패턴 적용 기법을 제안한다.
본 논문의 연구 결과는 기존의 패턴을 보던 관점과 달리 패턴을 적용할 경우 시스템의 성능변화를 연구한 것에서 의의를 찾을 수 있다. 향후 연구로는 Strategy, State, Observer 패턴 이외에 GoF의 23가지의 모든 패턴들에 대해서 테스트를 확장하고, IoT 장비 등과 같은 제한적인 환경에서 성능을 분석할 계획이다.
제안 방법
성능을 측정하는 2가지 요소는 시간과 공간이다. CPU 자원의 사용시간인 PE(Processor Equivalent)와 메모리의 사용량을 알 수 있는 OFS를 분석하여 해당 로직의 성능을 평가한다.
Strategy, State, Observer 패턴을 사용하여 성능을 측정할 수 있는 테스트 시스템을 구축하고, 패턴 별 성능을 테스트 및 평가한다. 표 1, 2는 본 논문에 사용된 시스템구현 환경과 테스트 환경을 나타낸다.
그리고 그 Code Smell을 제거하기 위해 리팩토링을 수행해야 한다고 주장하였다. 또한 Code Smell 중에서 메서드의 내부가 너무 길 경우에 발생하는 Long Method를 리팩토링 하는 기법으로 메서드 추출(Extract Method)을 제안하였다[14]. 기존 여러 메서드를 하나의 메서드로 추출하여 Code Smell를 제거한다.
패턴 (i)에 해당하는 것은 GoF의 디자인 패턴 중 선별한 Strategy, State, Observer 패턴을 의미하며 i = k, 3, 1은 각각 패턴을 1회씩 총 3회 수행하여 클래스 개수, 메서드의 개수, LOC 정보를 수집한다. 또한 구현한 코드를 실행한 후 실행 시작시간부터 실행종료 시간까지 걸린 시간을 측정하여 해당 패턴의 수행시간, 클래스의 오브젝트 크기와 실행 속도를 분석한다. 이후 분석 결과인 오브젝트 크기 측정결과와 성능 측정결과를 그래프로 비교 분석하였다.
이후 분석 결과인 오브젝트 크기 측정결과와 성능 측정결과를 그래프로 비교 분석하였다. 마지막으로 저 사양 안드로이드 환경에서 성능 최적화를 위한 디자인 패턴을 선택하는 방법을 제시하는 절차로 구성된다. 그림 13은 각 클래스 구현화면을 나타낸다.
본 논문에서는 OOP를 기반의 접근법을 위해 선정된 디자인 패턴과 최적화된 클래스 다이어그램을 재설계하였고, UML로 작성하였다.
본 논문에서는 효율적인 디자인 패턴 적용을 위해 첫째, OOP의 방식으로 클래스를 설계하며 둘째, 사용자의 관심도가 높은 디자인 패턴을 기반으로 리팩토링하여 이를 최적화 시켰다. 셋째, OOP와 디자인패턴이 적용된 클래스와 메서드 개수, LOC(Line Of Code), 런타임 시간, 오브젝트 크기와 성능을 측정하여 이를 비교 분석하였다.
성능평가를 위하여 평가지표로는 Strategy, State, Observer 미적용 클래스들과 디자인 패턴 적용 클래스간의 수행 시간을 간단히 프로파일링(profiling)하였다. 측정 방법으로 시간 복잡도(Time Complexity)를 직접 측정하였다.
성능평가에서는 두 요소인 ET와 OFS, PE를 측정하여 각각의 패턴들에 대한 성능을 비교분석 한다.
본 논문에서는 효율적인 디자인 패턴 적용을 위해 첫째, OOP의 방식으로 클래스를 설계하며 둘째, 사용자의 관심도가 높은 디자인 패턴을 기반으로 리팩토링하여 이를 최적화 시켰다. 셋째, OOP와 디자인패턴이 적용된 클래스와 메서드 개수, LOC(Line Of Code), 런타임 시간, 오브젝트 크기와 성능을 측정하여 이를 비교 분석하였다. 성능분석 결과 OOP와 디자인패턴 중 성능이 효율적이고오브젝트 크기가 낮은 패턴을 혼합하여 사용하는 것이 가장 효율적이라는 것을 확인하였다.
State 패턴은 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임한다. 이를 위해 시스템의 각 상태를 클래스로 분리해 표현하고, 각 클래스에서 수행하는 행위들을 메서드로 구현한다. 그리고 이러한 상태들을 외부로부터 캡슐화하기 위해 인터페이스를 만들어 시스템의 각 상태를 나타내는 클래스로 실체화한다.
선정된 Strategy, State, Observer 패턴은 안드로이드 환경에 적절하게 최적화되어 적용되어야 한다. 이후 적용 유무에 따른 성능변화를 분석하여 개별 평가를 진행한다.
성능평가를 위하여 평가지표로는 Strategy, State, Observer 미적용 클래스들과 디자인 패턴 적용 클래스간의 수행 시간을 간단히 프로파일링(profiling)하였다. 측정 방법으로 시간 복잡도(Time Complexity)를 직접 측정하였다. 시간 복잡도는 프로그램을 실행시켜 완료하는데 걸리는 시간을 의미한다.
패턴 (i)에 해당하는 것은 GoF의 디자인 패턴 중 선별한 Strategy, State, Observer 패턴을 의미하며 i = k, 3, 1은 각각 패턴을 1회씩 총 3회 수행하여 클래스 개수, 메서드의 개수, LOC 정보를 수집한다. 또한 구현한 코드를 실행한 후 실행 시작시간부터 실행종료 시간까지 걸린 시간을 측정하여 해당 패턴의 수행시간, 클래스의 오브젝트 크기와 실행 속도를 분석한다.
대상 데이터
총 23개 GoF 디자인 패턴에서 통계적으로 구글 검색에서 사용자의 관심도가 높은 디자인 패턴 대상을 선정하였다. 그림 4는 구글에서 디자인 패턴에 대한 트렌드를 분석한 결과이다.
데이터처리
또한 구현한 코드를 실행한 후 실행 시작시간부터 실행종료 시간까지 걸린 시간을 측정하여 해당 패턴의 수행시간, 클래스의 오브젝트 크기와 실행 속도를 분석한다. 이후 분석 결과인 오브젝트 크기 측정결과와 성능 측정결과를 그래프로 비교 분석하였다. 마지막으로 저 사양 안드로이드 환경에서 성능 최적화를 위한 디자인 패턴을 선택하는 방법을 제시하는 절차로 구성된다.
성능/효과
Strategy와 State 패턴은 디자인 패턴을 적용하면 속도가 향상되었으며 Observer 패턴은 디자인 패턴을 적용하면 속도가 더 느려짐을 알 수 있다. 따라서 성능 향상을 위해서는 Strategy와 State 패턴을 적용하는 것이 유용하며 Observer 패턴은 성능이 중요하다면 적용하지 않는 방법이 유용할 것이다.
디자인 패턴을 적용하는 것의 장점은 첫째, 요구사항의 분석과 설계를 명확하게 할 수 있고, 소스 코드에 대한 리팩토링(Refactorying)이 가능하게 하여 프로그램 코드상의 모호성과 중복을 제거하여 소프트웨어를 쉽고 유연하게 확장할 수 있다. 둘째, 객체지향 분석과 설계 시 공통된 모델링 언어로 UML이 사용되는 것과 같이 클래스를 공통된 설계 언어로써 사용될 수 있다. 셋째, 패턴을 이용한 리팩토링 방법을 통해 객체지향 언어로 이미 작성되어 있는 레거시(Legacy) 시스템을 효과적으로 재공학(Reengineering)할 수 있다[8].
디자인 패턴을 적용하는 것의 장점은 첫째, 요구사항의 분석과 설계를 명확하게 할 수 있고, 소스 코드에 대한 리팩토링(Refactorying)이 가능하게 하여 프로그램 코드상의 모호성과 중복을 제거하여 소프트웨어를 쉽고 유연하게 확장할 수 있다. 둘째, 객체지향 분석과 설계 시 공통된 모델링 언어로 UML이 사용되는 것과 같이 클래스를 공통된 설계 언어로써 사용될 수 있다.
변경 결과 성적변경에 관심이 있는 대상 객체를 관리하는 기능을 구현하는 Subject라는 클래스를 정의한 것을 확인할 수 있다. Subject 클래스는 attach와 detach메서드로 다음과 같이 성적 변경에 관심이 있는 대상 객체를 추가하거나 제거할 수 있는 유연성을 제공한다.
셋째, OOP와 디자인패턴이 적용된 클래스와 메서드 개수, LOC(Line Of Code), 런타임 시간, 오브젝트 크기와 성능을 측정하여 이를 비교 분석하였다. 성능분석 결과 OOP와 디자인패턴 중 성능이 효율적이고오브젝트 크기가 낮은 패턴을 혼합하여 사용하는 것이 가장 효율적이라는 것을 확인하였다.
표 5는 Execution Time과 Object File Size 테스트를 수행한 결과를 바탕으로 최적화된 디자인 패턴 적용 기법을 나타낸다. 성능을 중점으로 소프트웨어 설계할 경우 Strategy와 State 패턴이 적절하고, 저 사양 메모리를 중점으로 설계 할 경우 Strategy와 Observer 패턴을 사용하는 것이 가장 적절한 방법임을 알 수 있다.
둘째, 객체지향 분석과 설계 시 공통된 모델링 언어로 UML이 사용되는 것과 같이 클래스를 공통된 설계 언어로써 사용될 수 있다. 셋째, 패턴을 이용한 리팩토링 방법을 통해 객체지향 언어로 이미 작성되어 있는 레거시(Legacy) 시스템을 효과적으로 재공학(Reengineering)할 수 있다[8].
Strategy와 Observer 패턴은 디자인 패턴을 적용하면 OFS가 감소하고 State 패턴은 OFS가 증가함을 알 수 있다. 종합적인 분석 결과 Strategy 패턴을 사용하면 속도가 증가하고 OFS가 감소하여 최대한 적용하는 것이 효율적이고, State 패턴을 적용하면 속도는 증가하나 OFS도 증가하므로 저사양의 메모리는 공간적인 부분을 충분히 고려해야 할 것으로 분석되었다.
종합적인 비교 분석 결과 기존의 패턴 적용에 대한 인식과 다른 것을 확인하였다. 일반적으로 대부분의 디자인 패턴을 적용하면 유지보수성은 높아지지만 성능저하가 발생할 것이라고 생각한다.
시간 복잡도는 프로그램을 실행시켜 완료하는데 걸리는 시간을 의미한다. 테스트용 코드의 실행 전 시작시간(Start Time)과 작업이 끝난 후 종료시간(End Time)을 측정하여 종료시간에서 시작시간의 차를 구하면 해당 로직의 수행 시간이 되므로 성능측정 결과인 ET(Execution Time)을 알 수 있다. 수식 (1)은 수행 시간의 계산방법을 나타낸다.
일반적으로 대부분의 디자인 패턴을 적용하면 유지보수성은 높아지지만 성능저하가 발생할 것이라고 생각한다. 하지만 실제 테스트 결과 패턴 분류에 따라 성능이 저하되는 경우도 있고 높아지는 부분도 있음을 확인할 수 있다.
후속연구
본 논문의 연구 결과는 기존의 패턴을 보던 관점과 달리 패턴을 적용할 경우 시스템의 성능변화를 연구한 것에서 의의를 찾을 수 있다. 향후 연구로는 Strategy, State, Observer 패턴 이외에 GoF의 23가지의 모든 패턴들에 대해서 테스트를 확장하고, IoT 장비 등과 같은 제한적인 환경에서 성능을 분석할 계획이다.
질의응답
핵심어
질문
논문에서 추출한 답변
일반적으로 소프트웨어의 개발은 어떠한 단계를 거쳐 완성되는가?
IoT와 같은 디바이스 시장에서는 관련 소프트웨어를 개발할 수 있는 환경이 조성되어 관심이 증대되고 있다[1]. 일반적으로 소프트웨어의 개발은 기획단계, 개발단계, 인도단계를 거쳐서 완성이 된다. 소프트웨어를 효율적으로 개발하기 위해서는 건물을 공사할 때 설계도면을 그리는 것에 해당하는 기획단계에서의 설계 활동이 매우 중요하다.
스마트폰 소프트웨어 개발 열풍은 무엇으로 인해 더욱 가속화되고 있는가?
현재 모바일 디바이스 시장은 애플 아이폰(iPhone)과 구글 안드로이드 플랫폼을 중심으로 다양한 소프트웨어가 연구 및 개발되고 있는 실정이다. 스마트폰 소프트웨어 개발 열풍은 하드웨어의 성능향상과 생산단가 하락으로 인해 더욱더 가속화 되고 있다. IoT와 같은 디바이스 시장에서는 관련 소프트웨어를 개발할 수 있는 환경이 조성되어 관심이 증대되고 있다[1].
요구사항을 분석하여 프로그램을 객체지향 방법론으로 디자인할 때 어떠한 경우에 디자인을 다시 해야하는가?
요구사항을 분석하여 프로그램을 객체지향 방법론으로 디자인하는 것은 쉽지 않다. 특히, 재사용성이나 확장성을 고려않은 설계의 경우 변동 사항이나 추가 요구 사항을 처리할 때 다시 디자인해야 하는 최악의 경우가 발생한다. 따라서 자신이 설계하여 어느 정도 검증된 디자인 구조를 새로 개발할 솔루션에 재사용하여 적용하는 것이 일반적이다.
참고문헌 (17)
Park Minwoo, "Education of Domestic Programming and Future of The Software Industry", Digieco Report Issue&Trend, 2014.
Kim Unyong, Choe Yeonggeun, "Special Issue: Software Quality : Pattern-Oriented Software Development Process using Incremental Composition for Design Patterns", Korea Information Processing Society, Vol.10, No.5, pp.763-772, 2003.
Kang Yunsung, Lee Junhwan, Cho Hanjin, "Design and Implementation of .NET Remoting Common Framework Applied Design Pattern", Korea Contents Association, Vol.11, No.3, pp.36-47, 2011.
C.Alexander, S. Ishikawa, M. Silverstein, M. Jacobson, I.Fiksdahl-King, S. Angel, "A Pattern Language", Oxford University Press, NewYork, 1997.
Lee Jangwoo, Lee Minkyu, "Design and Implementation for Applying User-Definable Pattern with UML Modeling Tools", Korea Information Science Society Fall Conference Proceeding, Vol.31, No.2, pp.310-312, 2004.
Shin Woochang, "Study on Formal Software Design Patterns", Institute of Industrial Technology Seokyeong University, Vol.17, No.0, pp.71-83, 2006.
Kim Taeho, Cheon Hyeonjae, Lee Hongchul, "Development of Secure Entrance System using AOP and Design Pattern", Korea Academia-Industrial Cooperation Society, Vol.11, No.3, pp.943-950, 2010.
Choi Jinmyung, Rhew Sungyul, "An Effective Pattern Selection Process for Developing of Pattern Based Software", Korea Institute of Information Science and Engineering, Vol.32, No.5, pp.346-356, 2005.
Kim Moonkwon, "Methods to Apply GoF Design Patterns in Service-Oriented Computing", Korea Information Processing Society Transactions. Part D, Vol.19, No.2, pp.187-202, 2012.
E. Gamma, R.Johnson, J. Vlissides, "Design Pattern: Elements of Reusable Object-Oriented Software", Addison-Wesley, 1995
C. Zhao, J. Kong, K. Zhang, "Program Behavior Discovery and Verification: A Graph Grammar Approach", IEEE Transactions on Software Engineering, Vol.36, Issue.3, pp.431-448, 2010. DOI: https://doi.org/10.1109/TSE.2010.3
Jung Youngae, "Comparative Analysis of Determination of Method Location between Classes", Korea Contents Association, Vol.6, No.12, pp.80-88, 2006.
Son Hyunseung, Kim Wooyeol, Ahn Hongyoung, Kum Youngchul, "Applying Design Pattern & Refactoring on Implementing RTOS for the Small Educational Multi-Joint Robot", The Journal of The Institute of Internet, Broadcasting and Communication(JIIBC), Vol.9, No.3, pp.217-224, 2009.
M. Fowler, "Refactoring: Improving the Design of Existing Code", Addison Wesley, 1999.
Ivar Jacobson, "Object Oriented Software Engineering : A Use Case Driven", ACM Press, 1992.
Cho Eunsook, Kim Soodong, Rhew Sungyul, "UML-based Object-Oriented Framework Modeling Techniques", Korean Institute of Information Science and Engineering Transactions Part B Vol.26, No.4, pp.533-545, 1999.
Kung Sanghwan, "Smart Design for App", Korea Digital Policy & Management, Vol.10, No.6, pp.269-274, 2012.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.