KR100673313B1 - 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법 - Google Patents

코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법 Download PDF

Info

Publication number
KR100673313B1
KR100673313B1 KR1020040116775A KR20040116775A KR100673313B1 KR 100673313 B1 KR100673313 B1 KR 100673313B1 KR 1020040116775 A KR1020040116775 A KR 1020040116775A KR 20040116775 A KR20040116775 A KR 20040116775A KR 100673313 B1 KR100673313 B1 KR 100673313B1
Authority
KR
South Korea
Prior art keywords
code
program
snippet
code snippet
snippets
Prior art date
Application number
KR1020040116775A
Other languages
English (en)
Other versions
KR20060078095A (ko
Inventor
홍성수
박지용
Original Assignee
재단법인서울대학교산학협력재단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 재단법인서울대학교산학협력재단 filed Critical 재단법인서울대학교산학협력재단
Priority to KR1020040116775A priority Critical patent/KR100673313B1/ko
Priority to US11/203,219 priority patent/US20060150141A1/en
Publication of KR20060078095A publication Critical patent/KR20060078095A/ko
Application granted granted Critical
Publication of KR100673313B1 publication Critical patent/KR100673313B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/316Aspect-oriented programming techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 서로 다른 프로그램 간의 코드를 결합하는 방법에 관한 것으로, 각 프로그램의 코드조각에 대한 번호를 정의한 상태에서 코드조각 번호를 참조하여 특정 프로그램에 다른 프로그램의 코드조각을 삽입하거나 특정 프로그램의 코드조각을 다른 프로그램의 코드조각으로 대체하는 방법을 제공한다. 본 발명에 따르면 특정 프로그램 함수 내의 임의의 위치에 다른 프로그램의 어드바이스(코드조각)을 삽입(추가)하거나 특정 프로그램 함수 내의 코드조각을 다른 프로그램의 코드조각으로 대체(수정)할 수 있는 효과, 및 삽입/대체 대상 프로그램의 소스코드를 고치지 않고서도 두 프로그램의 코드조각을 결합할 수 있기 때문에 프로그램의 구조 및 가독성을 그대로 유지할 수 있고 프로그래머의 코드 변경에 따른 번거로움을 줄일 수 있는 효과가 있다.
영역 지향 프로그래밍(AOP), 어드바이스, 포인트컷, 코드조각 번호

Description

코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법{Method for Weaving Code Fragments using Code Fragment Numbering from Programs}
도 1a 및 도 1b는 종래 방식에 따른 서로 다른 프로그램 간의 관계에 대한 일 실시예 설명도.
도 2a 및 도 2b는 본 발명에 따른 코드조각 번호에 대한 일 실시예 설명도.
도 3a 내지 도 3c는 본 발명에 따른 프로그램에 코드조각을 삽입하는 과정에 대한 일 실시예 설명도.
도 4a 내지 도 4c는 본 발명에 따른 프로그램의 코드조각을 대체하는 과정에 대한 일 실시예 설명도.
본 발명은 서로 다른 프로그램의 코드를 결합하는 방법에 관한 것으로, 더욱 상세하게는 각 프로그램의 코드조각에 대한 코드조각 번호를 각각 정의한 상태에서 코드조각 번호를 참조하여 특정 프로그램에 다른 프로그램의 코드조각을 삽입하거 나 특정 프로그램의 코드조각을 다른 프로그램의 코드조각으로 대체하는 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법에 관한 것이다.
최근에 프로그램의 개발/유지/보수 등을 용이하게 할 수 있는 영역 지향 프로그래밍(AOP; Aspect-Oriented Programming, 이하 "AOP"라 함)이 각광받고 있는데, 자금이체 프로그램을 예로 들어 AOP를 설명하면 다음과 같다.
자금이체 프로그램은 출금계좌, 입금계좌, 이체금액이 입력되면 SQL 문장을 수행시켜 해당 이체금액을 출금계좌로부터 입금계좌로 이체하는 코드로 이루어지는데, 자금이체를 위해서는 해킹방지용 프로그램이 사용자 컴퓨터에 탑재되어 있는지 검사해야 하고 정상 사용자인지 인증해야 하며 상대방 은행에서 제대로 이체내역을 처리하는지를 검사해야 하고 이체 내역 로그를 시스템에 남겨야 된다. 즉, 자금이체가 이루어지기 위해서는 구현하고자 하는 자금이체 기능뿐만 아니라 보안, 인증, 로그 등과 같은 부가 기능들도 함께 구현되어야 되며, 이들 부가 기능을 위한 코드는 자금이체 프로그램이 아닌 시스템 상에 산재된 다른 여러 프로그램에 각각 기록되어 있다. 여기서, 구현하는 기능(즉, '자금이체')을 프라이머리 컨선(Primary Concern)이라 하고, 부가 기능(즉, '보안/인증/로그')을 크로스커팅 컨선(Cross-cutting concern)이라고 한다.
일반적으로, AOP가 적용되지 않은 객체 지향 프로그래밍 기법에서는 프라이머리 컨선을 구현한 프로그램의 소스코드에 크로스커팅 컨선을 구현한 프로그램의 코드를 포함시켰다. 이러한 방식에서는 프라이머리 컨선 또는 크로스커팅 컨선을 구현한 코드의 일부를 삽입/수정/대체/삭제하기 위해서는 프로그래머가 시스템 상 에 산재된 각 프로그램의 각각의 코드를 일일이 직접 찾아서 변경시켜야만 된다. 즉, 이들 방식에서는 프라이머리 컨선과 크로스커팅 컨선이 하나의 프로그램 내에 구현되어 있기 때문에 프로그램 가독성이 떨어지고, 코드 변경이 어려우며, 그에 따라 프로그램 개발/유지/보수가 어려운 문제점이 있다.
이러한 문제점을 극복하기 위해 AOP가 대두되었으며, AOP에서는 크로스커팅 컨선을 어떻게 다룰지에 대한 프로그래밍 기법을 정의하고 있다. AOP에서는 크로스커팅 컨선을 구현한 코드["어드바이스(Advice)" 또는 "코드조각(code fragment)", 이하 "코드조각"이라 함]로 하나의 프로그램을 개발하고 프라이머리 컨선을 구현한 코드로 다른 하나의 프로그램을 개발한 상태에서 포인트컷(pointcut) 정보를 이용하여 두 프로그램을 결합(weaving)하는 것에 대한 명세를 표현하고 있다. 이하, AOP 기법이 사용된 프로그램을 "애스펙트 프로그램(aspect program)"이라 하고, 기존의 프로그래밍 기법이 사용된 프로그램을 "베이스 프로그램(base program)"이라 한다. 여기서, 포인트컷이란 애스펙트 프로그램의 특정 코드조각을 베이스 프로그램의 어느 위치에 둘 것인지에 대한 정보를 나타낸다.
도 1a 및 도 1b는 종래 방식에서 베이스 프로그램과 애스펙트 프로그램 간의 관계에 대한 일 실시예 설명도이다.
도 1a에 도시된 바와 같이, 애스펙트 프로그램에는 여러 코드조각과 각 코드조각에 대한 포인트컷 정보가 기술되어 있으며, 이러한 포인트컷 정보를 어떻게 기술하는지에 따라 프로그램의 개발/유지/보수가 용이해 짐을 알 수 있다.
종래 방식, 즉 기존에 개발된 AOP에서는 베이스 프로그램의 구성 요소 중 이름이 명명된 구성 요소에 대해서만 포인트컷 정보를 애스펙트 프로그램에 기술하고 있다. 여기서, 이름이 명명된 구성 요소로는 클래스, 함수, 변수 등을 들 수 있다. 예를 들어, 애스펙트 프로그램에 "x 함수" 및 "y 함수"가 구현되어 있고 베이스 프로그램에 a라고 명명된 함수 및 b라고 명명된 함수가 있다면 애스펙트 프로그램의 포인트컷 정보로는 "a 함수가 시작되기 전", "b 함수가 끝난 후”등이 될 수 있으며, 애스펙트 프로그램에는 "a 함수가 시작되기 전 x 함수 수행", "b 함수가 끝난 후 y 함수 수행" 등이 기술된다.
그런데, 상기와 같은 종래 기술에서는 베이스 프로그램의 구성 요소 중 이름이 명명된 구성 요소에 대해서만 포인트컷 정보를 애스펙트 프로그램에 기술할 수 있을 뿐 베이스 프로그램의 구성 요소 중 이름이 명명되지 않은 구성 요소(예; 함수(메쏘드) 내의 코드 등)에 대해서는 포인트컷 정보를 애스펙트 프로그램에 기술하지 못하는 문제점이 있다. 즉, 상기와 같은 종래 기술에서는 함수 내의 코드를 포인트컷 정보로 지칭할 수 없기 때문에 베이스 프로그램의 코드 중간에 애스펙트 프로그램의 코드조각을 삽입시켜 해당 코드조각에 상응하는 기능이 수행되도록 할 수 없다.
도 1b에 도시된 바와 같이, 종래 기술에서는 애스펙트 프로그램의 코드조각을 베이스 프로그램의 함수 중간에 삽입하는 것이 불가능하며, 단지 함수의 시작 부분 또는 함수의 끝 부분에 삽입하는 것만 가능하다.
한편, 상기와 같은 종래 기술에서 애스펙트 프로그램의 코드조각을 베이스 프로그램의 함수 중간 부분에 삽입할 수는 있다. 즉, 베이스 프로그램의 삽입 위치에 빈 함수(dummy function)를 호출하는 코드를 추가하거나 기 존재하고 있던 함수를 삽입 위치에서 두 개의 함수로 분할하여 새로운 함수의 시작 부분 또는 끝 부분에 코드조각을 삽입하면 된다. 그러나, 이러한 방식에서는 베이스 프로그램을 변경해야 하므로 프로그래밍 효율을 떨어뜨릴 뿐만 아니라 베이스 프로그램의 구조가 흐트러져서 프로그램의 가독성을 떨어뜨리는 문제점이 있다. 즉, 이러한 방식도 기존의 객체 지향 프로그래밍 기법과 마찬가지로 프로그래머가 일일이 코드를 직접 찾아서 수작업을 통해 변경시켜야만 된다.
본 발명은, 상기와 같은 문제점을 해결하고 상기와 같은 요구에 부응하기 위하여 제안된 것으로, 각 프로그램의 코드조각에 대한 코드조각 번호를 각각 정의한 상태에서 코드조각 번호를 참조하여 특정 프로그램에 다른 프로그램의 코드조각을 삽입하거나 특정 프로그램의 코드조각을 다른 프로그램의 코드조각으로 대체하는 방법을 제공하는데 그 목적이 있다.
이하 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명한다. 하기에서 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 2a 및 도 2b는 본 발명에 따른 코드조각 번호에 대한 일 실시예 설명도이다. 도 2a에는 베이스 프로그램의 코드조각에 대한 코드조각 번호가 XML 파일 A에 기록되어 있으며, 도 2b에는 애스펙트 프로그램의 코드조각에 대한 코드조각 번호가 XML 파일 B에 기록되어 있다.
도 2a에 도시된 바와 같이, 본 발명에서는 베이스 프로그램의 코드, 특히 함수 내의 코드조각에 이름을 부여하기 위해서 별도의 파일(예; XML 파일 등, 이하 "XML 파일"을 예로 들어 설명함)에 각 코드조각에 대한 코드조각 번호(즉 이름)를 정의한다. 여기서, XML 파일에는 베이스 프로그램의 소스코드(source code) 상에서 각 코드조각의 위치가 코드조각 번호(줄번호, 열번호)로 기록된다. 이처럼 베이스 프로그램의 코드조각에 대한 코드조각 번호를 XML 파일에 정의한 상태에서 베이스 프로그램의 특정 코드조각 사이에 애스펙트 프로그램의 코드조각을 삽입하고자 하면 베이스 프로그램의 소스코드를 고치지 않고서도 XML 파일의 일부만을 수정, 즉 XML 파일에 기록된 삽입 위치에 대응되는 코드조각 번호를 수정하고 이 수정된 코드조각 번호에 따라 새로운 코드조각을 삽입하면 된다.
도 2b에 도시된 바와 같이, 애스펙트 프로그램 역시 일종의 프로그램이므로, 본 발명에서는 애스펙트 프로그램의 함수 내의 코드조각에 대해서도 별도의 XML 파일에 각 코드조각에 대한 코드조각 번호를 정의한다. 여기서, XML 파일에는 애스펙트 프로그램의 소스코드(source code) 상에서 각 코드조각의 위치가 코드조각 번호(줄번호, 열번호)로 기록된다.
전술한 바와 같이, 본 발명에서는 XML 파일에 기술된 코드조각 번호를 참조하여, 베이스 프로그램의 코드조각 사이에 애스펙트 프로그램의 코드조각을 삽입하거나 베이스 프로그램의 코드조각 사이에 다른 베이스 프로그램의 코드조각을 삽입하거나 애스펙트 프로그램의 코드조각 사이에 베이스 프로그램의 코드조각을 삽입하거나 애스펙트 프로그램의 코드조각 사이에 다른 애스펙트 프로그램의 코드조각을 삽입할 수 있다.
따라서, 본 발명에서는 베이스 프로그램과 애스펙트 프로그램간의 관계가 동등하며, 이하 베이스 프로그램과 애스펙트 프로그램을 피쳐 프로그램(feature program)이라고 통칭하기로 한다.
이하, 본 발명의 이해를 돕고자 도 3a 내지 도 3c를 참조하여 피쳐 프로그램 A의 코드조각 사이에 피쳐 프로그램 B의 코드조각을 삽입하는 과정을 설명하고, 도 4a 내지 도 4c를 참조하여 피쳐 프로그램 A의 코드조각을 피쳐 프로그램 B의 코드조각으로 대체하는 과정을 설명하기로 한다.
도 3a 내지 도 3c는 본 발명에 따른 프로그램에 코드조각을 삽입하는 과정에 대한 일 실시예 설명도이며, 도 4a 내지 도 4c는 본 발명에 따른 프로그램의 코드 조각을 대체하는 과정에 대한 일 실시예 설명도이다. 이하, 코드조각 삽입 대상(target) 및 코드조각 대체 대상 프로그램이 피쳐 프로그램 A인 경우를 예를 들어 설명하기로 한다.
앞서 언급한 바와 같이, 본 발명에서는 피쳐 프로그램 A의 코드조각 사이에 피쳐 프로그램 B의 코드조각을 삽입하는 것이 가능하고 피쳐 프로그램 A의 코드조각을 피쳐 프로그램 B의 코드조각으로 대체하는 것이 가능하다. 이를 위하여, 본 발명에서는 코드조각 번호를 메이저넘버(major number) 및 마이너넘버(minor number)로 정의한다. 메이저넘버는 피쳐 프로그램 A의 코드조각 사이에 피쳐 프로그램 B의 코드조각을 삽입하는데 사용되며, 마이너넘버는 피쳐 프로그램 A의 코드조각을 피쳐 프로그램 B의 코드조각으로 대체하는데 사용된다. 예를 들어, "3.4"라는 코드조각 번호 중 정수 부분인 "3"을 메이저넘버라 명명하고 소수점 아래 부분인 "4"를 마이너넘버라 명명한다.
도 3a에 도시된 바와 같이, 사용자가 본 발명이 적용된 프로그래밍 도구(이하 "프로그래밍 도구"라 함)를 사용하여 피쳐 프로그램 A에 관한 코드를 작성하면 프로그래밍 도구는 소스코드 파일 A를 생성하고 이 소스코드 파일 A의 코드조각에 대한 코드조각 번호를 1.0으로 XML 파일 A에 기록한다. 이 상태에서 사용자는 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 특정 코드조각 사이에 새로운(다른) 코드조각을 삽입시킬 수 있다.
도 3b에 도시된 바와 같이, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 특정 코드조각 사이에 새로운 코드조각을 추가적으로 작성(삽입)하면 프 로그래밍 도구는 사용자가 작성한 코드조각에 상응하는 피쳐 프로그램 B를 생성한다. 여기서, 피쳐 프로그램 B는 사용자가 추가적으로 작성한 코드조각에 상응하는 소스코드 파일 B 및 이 소스코드 파일 B의 코드조각에 대한 코드조각 번호가 기록되는 XML 파일 B로 이루어진다. 이 때, 프로그래밍 도구는 XML 파일 A와 XML 파일 B를 수정하여 새로운 코드조각이 삽입된 상태를 표현한다.
즉, 프로그래밍 도구는 사용자에 의해 작성된 피쳐 프로그램 A의 소스코드 상의 특정 코드조각 사이에 소스코드 파일 B의 코드조각이 삽입됨을 알리는 의미로 피쳐 프로그램 B의 코드조각 번호를 2.0으로 설정하여 XML 파일 B에 기록한다(상대적 코드조각 번호). 그리고 XML 파일 A의 코드조각을 피쳐 프로그램 B의 코드조각이 삽입된 위치를 기준으로 두 개의 코드조각으로 나누고서 윗 부분에 해당되는 부분의 코드조각 번호를 1.0으로 변경하고 코드조각 삽입 위치의 아랫 부분에 해당되는 부분의 코드조각 번호를 3.0으로 변경하여 XML 파일 A에 기록한다.
여기서, 피쳐 프로그램 A의 소스코드 파일 A에 기록된 코드는 전혀 변경되지 않고서(즉, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 소스코드에 새로운 코드를 추가하였더라도) 단지 이 소스코드 파일 A의 코드조각에 대한 코드조각 번호만이 XML 파일 A에서 변경되는 것이다. 이 상태에서 사용자는 프로그래밍 도구를 사용하여 피쳐 프로그램 A와 피쳐 프로그램 B를 결합시킬 수 있는 것이다.
도 3c에 도시된 바와 같이, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A와 피쳐 프로그램 B를 결합시키면 프로그래밍 도구는 XML 파일 A 및 XML 파일 B를 참조하여 코드조각 번호의 순서대로 구조화시킨 피쳐 프로그램 C를 생성한 다. 여기서, 새로이 생성된 피쳐 프로그램 C의 소스코드는 각 XML 파일 상에서 메이저넘버가 가장 작은 코드조각 번호에 대응되는 코드조각부터 메이저넘버가 가장 큰 코드조각 번호에 대응되는 코드조각 순서대로 정렬, 즉 피쳐 프로그램 A의 소스코드 중 코드조각 삽입 위치의 윗 부분인 코드조각, 이어서 피쳐 프로그램 B의 코드조각, 이어서 피쳐 프로그램 A의 소스코드 중 코드조각 삽입 위치의 아랫 부분인 코드조각으로 정렬된다.
한편, 마이너넘버를 사용하여 피쳐 프로그램 A의 특정 코드조각을 피쳐 프로그램 B의 코드조각으로 대체하는 과정을 설명하면 다음과 같다.
도 4a에 도시된 바와 같이, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A에 관한 코드를 작성하면 프로그래밍 도구는 소스코드 파일 A를 생성하고 이 소스코드 파일 A의 코드조각에 대한 코드조각 번호를 1.0으로 XML 파일 A에 기록한다. 이 상태에서 사용자는 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 특정 코드조각을 새로운(다른) 코드조각으로 대체시킬 수 있는 것이다.
도 4b에 도시된 바와 같이, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 특정 코드조각을 삭제하고서 새로운 코드조각을 작성(대체)하면 프로그래밍 도구는 사용자가 작성한 코드조각에 상응하는 피쳐 프로그램 B를 생성한다. 여기서, 피쳐 프로그램 B는 사용자가 새로이 작성한 코드조각에 상응하는 소스코드 파일 B 및 이 소스코드 파일 B의 코드조각에 대한 코드조각 번호가 기록되는 XML 파일 B로 이루어진다. 이 때, 프로그래밍 도구는 피쳐 프로그램 A의 대체 대상 코 드조각이 피쳐 프로그램 B의 코드조각으로 대체된 후에 피쳐 프로그램 A에서 보여질(구조화될) 순서대로 피쳐 프로그램 A의 코드조각(즉 대체 대상 코드조각 및 그 외 코드조각)에 대한 메이저넘버를 설정하고, 피쳐 프로그램 B의 코드조각에 대한 메이저넘버를 상기 대체 대상 코드조각에 대한 메이저넘버로 일치시킨 후에 피쳐 프로그램 B의 코드조각에 대한 마이너넘버를 피쳐 프로그램 A의 대체 대상 코드조각에 대한 마이너넘버보다 크게 피쳐 프로그램 A의 대체 대상 코드조각에 대한 마이너넘버 및 피쳐 프로그램 B의 코드조각에 대한 마이너넘버를 각각 설정한다.
즉, 프로그래밍 도구는 사용자에 의해 작성된 피쳐 프로그램 A의 소스코드 중 대체 대상 부분에 해당되는 코드조각이 소스코드 파일 B의 코드조각으로 대체됨을 알리는 의미로 피쳐 프로그램 A의 코드조각을 두 개의 코드조각으로 나눈다. 여기서, 하나의 코드조각은 대체가 이루어지기 전의 원래대로 남아 있는 코드조각이고 다른 코드조각은 피쳐 프로그램 B의 코드조각으로 대체되는 코드조각이다. 그런후, 원래대로 남아 있는 코드조각에 대한 코드 조각 번호를 1.0으로 설정하고(그대로 유지하고), 대체될 코드조각에 대한 메이저넘버를 2.0으로 설정하고 나서, 피쳐 프로그램 B의 코드조각에 대한 메이저넘버를 상기 대체 대상 코드조각에 대한 메이저넘버인 2.0으로 일치킨 후에, 피쳐 프로그램 B의 코드조각에 대한 마이너넘버를 피쳐 프로그램 A의 대체 대상 코드조각에 대한 마이너넘버보다 크게 설정한다. 즉, 피쳐 프로그램 A의 대체 대상 코드조각에 대한 마이너넘버를 2.1로 설정하여 XML 파일 A에 기록하고 피쳐 프로그램 B의 코드조각에 대한 마이너넘버를 2.2로 설정하여 XML 파일 A에 기록한다.
여기서, 피쳐 프로그램 A의 소스코드 파일 A에 기록된 코드는 전혀 변경되지 않고서(즉, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A의 소스코드 중 일부를 삭제하고서 새로운 코드를 추가하였더라도) 단지 이 소스코드 파일 A의 코드조각에 대한 코드조각 번호만이 XML 파일 A에서 변경되는 것이다. 이 상태에서 사용자는 프로그래밍 도구를 사용하여 피쳐 프로그램 A와 피쳐 프로그램 B를 결합시킬 수 있는 것이다.
도 4c에 도시된 바와 같이, 사용자가 프로그래밍 도구를 사용하여 피쳐 프로그램 A와 피쳐 프로그램 B를 결합시키면 프로그래밍 도구는 XML 파일 A 및 XML 파일 B를 참조하여 동일한 메이저넘버를 갖는 코드조각 중 마이너넘버가 작은 코드조각을 마이너넘버가 큰 코드조각으로 대체하면서 메이저넘버의 순서대로 구조화시킨 피쳐 프로그램 C를 생성한다.
여기서, 새로이 생성된 피쳐 프로그램 C의 소스코드에는 각 XML 파일 상에서 동일한 메이저넘버를 갖는 코드조각 중 마이너넘버가 큰 코드조각이 남겨져 있고 메이저넘버가 가장 작은 코드조각 번호에 대응되는 코드조각부터 메이저넘버가 가장 큰 코드조각 번호에 대응되는 코드조각 순서대로 정렬, 즉 피쳐 프로그램 A의 대체 대상 코드조각의 윗 부분인 코드조각, 이어서 피쳐 프로그램 B의 코드조각 순서대로 정렬된다.
한편, 본 발명에서는 피쳐 프로그램 A의 하나의 코드조각 사이에 피쳐 프로그램 B의 하나의 코드조각을 삽입하거나 피쳐 프로그램 A의 하나의 코드조각을 피 쳐 프로그램 B의 하나의 코드조각으로 대체하는 것을 예로 들어 설명하였으나, 피쳐 프로그램 A의 여러 코드조각 사이에 피쳐 프로그램 B의 여러 코드조각을 각각 삽입하거나 피쳐 프로그램 A의 여러 코드조각을 피쳐 프로그램 B의 여러 코드조각으로 각각 대체할 수 있다는 것을 당업자라면 쉽게 이해할 수 있을 것이다. 또한, 피쳐 프로그램 A 및 피쳐 프로그램 B로 이루어진 두 개의 프로그램을 결합하는 것을 예로 들어 설명하였으나, 다수의 피쳐 프로그램들을 선택적으로 조합하여 결합할 수 있다는 것을 당업자라면 쉽게 이해할 수 있을 것이다.
이상 본 발명의 내용이 실시예를 들어 설명되었으나, 본 발명의 실시예는 본 발명의 예시에 불과하며 본 발명의 범위를 제한하는 것으로 해석되어서는 안 된다. 본 발명이 속하는 분야의 기술자는 본원의 특허청구범위에 기재된 원리 및 범위 내에서 본 발명을 여러 가지 형태로 변형 또는 변경할 수 있다.
상기와 같은 본 발명은 코드조각에 대한 코드조각 번호를 정의하고 이 코드조각 번호를 참조하여 두 프로그램의 코드조각을 결합함으로써, 특정 프로그램 함수 내의 임의의 위치에 다른 프로그램의 어드바이스(코드조각)을 삽입(추가)하거나 특정 프로그램 함수 내의 코드조각을 다른 프로그램의 코드조각으로 대체(수정)할 수 있는 효과가 있다.
또한, 본 발명은 삽입/대체 대상 프로그램의 소스코드를 고치지 않고서도 두 프로그램의 코드조각을 결합할 수 있기 때문에 프로그램의 구조 및 가독성을 그대로 유지할 수 있고, 프로그래머의 코드 변경에 따른 번거로움을 줄일 수 있도록 하는 효과가 있다.

Claims (5)

  1. 제1 프로그램의 코드조각에 대해 코드조각 번호가 정의된 상태에서 상기 제1 프로그램의 특정 코드조각 사이에 신규 코드조각이 삽입되면 상기 신규 코드조각에 상응하는 제2 프로그램을 생성하는 제 1 단계;
    상기 제1 프로그램의 코드조각 삽입 위치의 윗 부분에 상응하는 코드조각 번호를 제1 코드조각 번호로 재정의하고, 상기 제2 프로그램의 코드조각 번호를 제2 코드조각 번호로 정의하고, 상기 제1 프로그램의 코드조각 삽입 위치의 아랫 부분에 상응하는 코드조각 번호를 제3 코드조각 번호로 재정의하는 제 2 단계; 및
    상기 각각 재정의된 제1 프로그램 및 제2 프로그램의 각 코드조각 번호를 참조하여 번호가 가장 작은 코드조각 번호에 대응되는 코드조각부터 번호가 가장 큰 코드조각 번호에 대응되는 코드조각 순서대로 구조화하는 제 3 단계를 포함하는 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법.
  2. 제1 프로그램의 코드조각에 대해 메이저넘버 및 마이너넘버로 이루어진 코드조각 번호가 정의된 상태에서 상기 제1 프로그램의 특정 코드조각이 신규 코드조각으로 대체되면 상기 신규 코드조각에 상응하는 제2 프로그램을 생성하는 제 1 단계;
    상기 제1 프로그램의 코드조각 대체 대상의 윗 부분에 상응하는 코드조각 번 호를 제1 코드조각 번호로 재정의하고, 상기 제1 프로그램의 코드조각 대체 대상에 상응하는 코드조각 번호를 제2 코드조각 번호로 재정의하고, 상기 제1 프로그램의 코드조각 대체 대상의 아랫 부분에 상응하는 코드조각 번호를 제3 코드조각 번호로 재정의하고, 상기 제2 프로그램 코드조각 번호의 메이저넘버를 상기 제1 프로그램 대체 대상 코드조각 번호의 메이저넘버로 정의하고, 상기 메이저넘버가 변경된 제2 프로그램 코드조각 번호의 마이너넘버를 상기 제1 프로그램 대체 대상 코드조각 번호의 마이너넘버보다 크도록 각 코드조각 번호의 마이너넘버를 재정의하는 제 2 단계; 및
    상기 각각 재정의된 제1 프로그램 및 제2 프로그램의 각 코드조각 번호를 참조하여 동일한 메이저넘버를 갖는 코드조각 중 마이너넘버가 큰 코드조각을 남기고, 메이저넘버가 가장 작은 코드조각 번호에 대응되는 코드조각부터 메이저넘버가 가장 큰 코드조각 번호에 대응되는 코드조각 순서대로 구조화하는 제 3 단계를 포함하는 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 제1 프로그램의 코드조각 번호 및 상기 제2 프로그램의 코드조각 번호는 각 프로그램 코드 상에서의 줄번호 및 열번호를 각각 포함하는 것을 특징으로 하는 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법.
  4. 제 3 항에 있어서,
    상기 제1 프로그램의 코드조각 번호 및 상기 제2 프로그램의 코드조각 번호는 외부 파일에 각각 기록되고, 상기 외부 파일에 기록된 코드조각 번호를 변경하여 프로그램의 코드조각에 대한 코드조각 번호를 재정의하는 것을 특징으로 하는 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법.
  5. 제 1 항 또는 제 2 항에 따른 코드조각 번호 매김을 이용한 프로그램 간의 코드조각 결합방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020040116775A 2004-12-30 2004-12-30 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법 KR100673313B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020040116775A KR100673313B1 (ko) 2004-12-30 2004-12-30 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법
US11/203,219 US20060150141A1 (en) 2004-12-30 2005-08-15 Method of weaving code fragments between programs using code fragment numbering

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020040116775A KR100673313B1 (ko) 2004-12-30 2004-12-30 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법

Publications (2)

Publication Number Publication Date
KR20060078095A KR20060078095A (ko) 2006-07-05
KR100673313B1 true KR100673313B1 (ko) 2007-01-24

Family

ID=36642157

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040116775A KR100673313B1 (ko) 2004-12-30 2004-12-30 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법

Country Status (2)

Country Link
US (1) US20060150141A1 (ko)
KR (1) KR100673313B1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070157073A1 (en) * 2005-12-29 2007-07-05 International Business Machines Corporation Software weaving and merging
US20090249021A1 (en) * 2008-03-26 2009-10-01 Morris Robert P Method And Systems For Invoking An Advice Operation Associated With A Joinpoint
DE102008061480A1 (de) * 2008-10-06 2010-04-08 Siemens Aktiengesellschaft Verfahren und Vorrichtung zum Austauschen einer Komponente eines Computersystems
US8635588B2 (en) * 2008-11-12 2014-01-21 International Business Machines Corporation System and method for reconciling software source code
WO2011064001A1 (en) * 2009-11-25 2011-06-03 Telefonaktiebolaget L M Ericsson (Publ) Application server and method for managing a service
KR101462062B1 (ko) * 2013-05-03 2014-11-17 에스케이 텔레콤주식회사 컨텐츠 취합 장치와 그를 위한 컴퓨터로 읽을 수 있는 기록매체
EP3249530A4 (en) * 2015-01-22 2018-01-24 Fujitsu Limited Application function expansion method, application function expansion program, and application function expansion device
JP2018005551A (ja) * 2016-07-01 2018-01-11 富士通株式会社 編集支援プログラム、装置および方法
CN110928551A (zh) * 2019-11-29 2020-03-27 山东省国土测绘院 一种快速输入程序代码的方法
CN112364580A (zh) * 2020-11-13 2021-02-12 上海兆芯集成电路有限公司 自动在寄存器传输级设计文件中插入特定代码的方法及装置
US11481194B1 (en) * 2022-04-13 2022-10-25 Browserstack Limited Replacing remote device functions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980080502A (ko) * 1997-04-28 1998-11-25 제프리엘.포맨 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법
KR20030056295A (ko) * 2001-12-28 2003-07-04 한국전자통신연구원 레가시 시스템으로부터 설계 패턴 추출을 통한 컴포넌트의생성 장치 및 방법
US20030236794A1 (en) * 2002-06-21 2003-12-25 Curl Corporation Views for software atomization
US20040261059A1 (en) * 2003-06-18 2004-12-23 Sam Spencer System and method for creating, managing and using code segments

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2317432A1 (en) * 2000-10-26 2011-05-04 Microsoft Development Center Copenhagen ApS A system and method supporting configurable object definitions
EP1342157B1 (en) * 2000-11-09 2008-10-15 Navision A/S An auto-generated task sequence
US7487494B2 (en) * 2004-08-02 2009-02-03 International Business Machines Corporation Approach to monitor application states for self-managing systems
US20060053116A1 (en) * 2004-08-31 2006-03-09 Rits Maarten E Dynamic software updating using mobile agent AOP
US7810082B2 (en) * 2005-07-22 2010-10-05 Telefonaktiebolaget L M Ericsson (Publ) System and method for transforming generic software code into operator specific code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980080502A (ko) * 1997-04-28 1998-11-25 제프리엘.포맨 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법
KR20030056295A (ko) * 2001-12-28 2003-07-04 한국전자통신연구원 레가시 시스템으로부터 설계 패턴 추출을 통한 컴포넌트의생성 장치 및 방법
US20030236794A1 (en) * 2002-06-21 2003-12-25 Curl Corporation Views for software atomization
US20040261059A1 (en) * 2003-06-18 2004-12-23 Sam Spencer System and method for creating, managing and using code segments

Also Published As

Publication number Publication date
KR20060078095A (ko) 2006-07-05
US20060150141A1 (en) 2006-07-06

Similar Documents

Publication Publication Date Title
US20060150141A1 (en) Method of weaving code fragments between programs using code fragment numbering
US7162709B2 (en) System and method for common code generation
US8387014B2 (en) Synchronization of concurrently modified interdependent semi-derived artifacts
CN105511873B (zh) 用户界面控件展示方法及装置
US20080270463A1 (en) Document processing system and method therefor
CN116185209A (zh) 手写输入字符的处理、数据拆分和合并及编解码处理方法
US8645344B2 (en) Document processing system and method therefor
JP2006235840A (ja) データベース・アクセス・システム、データベース・アクセス方法
US20060173901A1 (en) Methods for merging files and related systems
US6405368B1 (en) Method for separate compilation of templates
CN108132925A (zh) 一种报表文件生成方法及装置
CN1862493B (zh) 用于创建可执行代码的副本的唯一标识及其管理的方法
US8196093B2 (en) Apparatus and method for componentizing legacy system
AU2023270294A1 (en) Systems and methods for dataflow graph optimization
JP4724387B2 (ja) プログラム変換プログラム、プログラム変換装置およびプログラム変換方法
US20060173884A1 (en) Methods for merging files and related systems
US10482165B2 (en) Declarative cascade reordering for styles
US20070236369A1 (en) Configurable importers and resource writers
JP4557516B2 (ja) 暗号化プログラム生成装置および暗号化プログラム生成方法
CN102043821B (zh) 一种显示文档的方法
Maston et al. Tying It All Together
CN112947936A (zh) 视图数据处理方法及装置
Wildman et al. Composing grammar transformations to construct a specification of a parser
WO2002103553A2 (en) Tool for web authoring assistance

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee
R401 Registration of restoration
FPAY Annual fee payment

Payment date: 20140102

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150106

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160115

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180116

Year of fee payment: 12