| 구분 | 프레임워크 | 라이브러리 |
|---|---|---|
| 제어 흐름 | 프레임워크가 흐름을 제어 (Inversion of Control) | 개발자가 흐름을 제어 |
| 개발자 역할 | 프레임워크가 제공하는 구조에 맞춰 개발 | 필요할 때 개발자가 직접 호출하여 사용 |
| 대표 원칙 | IoC (제어의 역전) | 직접 호출 방식 (Direct Control) |
| 구분 | 프레임워크 사용 방식 | 라이브러리 사용 방식 |
|---|---|---|
| 설계 구조 | 프레임워크가 전체 구조를 미리 정의 | 개발자가 필요에 따라 부분적으로 사용 |
| 의존성 | 애플리케이션이 프레임워크에 의존 | 라이브러리를 애플리케이션에서 의존적 사용 |
| 사용 흐름 | "프레임워크가 개발자 코드를 호출" | "개발자가 라이브러리 코드를 직접 호출" |
| 구분 | 프레임워크 예시: Spring Framework | 라이브러리 예시: Apache Commons Lang, Gson 등 |
|---|---|---|
| 제어 흐름 | Spring이 전체 애플리케이션의 흐름(IoC, DI, AOP 등)을 제어 | 개발자가 필요할 때 직접 메서드를 호출하여 사용 |
| 예시 설명 | @Controller, @Service, @Autowired 등을 선언하면 | StringUtils.isBlank(str) 또는 Gson.toJson(obj)처럼 |
| Spring이 알아서 객체 생성, 주입, 실행 흐름을 제어함 | 개발자가 명시적으로 호출해야 동작함 | |
| 사용 구조 | 애플리케이션이 Spring이 요구하는 방식으로 설계되어야 함 | 애플리케이션의 구조와 무관하게 특정 기능만 선택적으로 사용 가능 |