아래 내용은 다음 article들의 내용을 간단히 정리해 본 것이다.
http://www.programcreek.com/2011/09/how-to-design-a-java-framework/
http://www.programcreek.com/2011/09/what-is-the-difference-between-a-java-library-and-a-framework/
1. Framework?
Library와 Framework의 차이를 살펴보면 다음과 같다.
특징 |
Library |
Framework |
Inversion of Control |
사용자의 코드가 Library를 호출한다. 사용자가 Control 한다. |
Framework가 사용자의 코드를 호출한다. |
Reusability |
Library의 코드(Code)를 재사용 하게 된다. | Framework의 흐름(Flow)를 재사용 하게 된다. |
Framework의 목적은 프로그램의 전반적인 뼈대를 제공하여 이를 사용하는 개발자로 하여금 각각의 요구사항에 맞는 특정 함수를 구현하는 것 만으로 빠른 개발을 가능하도록 한다.
2. 간단한 Framework 예제
public class Main { public static void main(String[] args) { Human h = new Human(new Walk()); h.doMove(); } } public abstract class Move { public abstract void action(); } public class Human { private Move move; public Human(Move m){ this.move = m; } public void doMove(){ this.move.action(); } } public class Walk extends Move { @Override public void action(){ System.out.println("walk"); } }
- Main.java는 Framework의 진입점이다.
- Move.java는 개발자가 정의 / 확장할수 있는 함수이다.(이를 Hook이라고 한다.)
- Human.java는 탬플릿이다.
- Walk.java는 Move.java를 구현한 구현체이다. 다른 형태의 움직임이 필요할 경우 이와 같이 Move를 상속받아 action()을 요구사항에 맞게 구현하면 된다.
3. 결론
위 예제는 Framework의 가장 간단한 형태로, Hook과 Template에 대해 간단히 보여주고 있다. 당연하겠지만, 실제 Framework들은 이보다 훨씬 더 복잡하다. 실제 Framework는 Template간 관계, 성능 및 사용성 향상과 관련된 부분들도 있기 때문이다.
'Java' 카테고리의 다른 글
Fluent Interface - Setter에 대한 고찰 (0) | 2014.07.19 |
---|