Framework이란?

Java 2014. 8. 30. 23:17

아래 내용은 다음 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
(IoC)

사용자의 코드가 Library를 호출한다.

사용자가 Control 한다.

Framework가 사용자의 코드를 호출한다.
Framework가 Control한다. (IoC)

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
Posted by 제리곰
,