[Framework]
Framework란?
: 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것
: 애플리케이션을 만들기 위한 틀 혹은 구조를 제공하는 것
추가설명)
java에서 Framework의 의미를 보았을 때 Collections Framework를 말할 수 있음
Java 클래스 중 기본적인 뼈대로만 구성이 되어있는 것 = 추상메서드로만 정의된 인터페이스(interface)
Collection은 Map/Set/List 같은 인터페이스와 그 인터페이스를 구현한 구현체들의 집합
결론적으로 Framework는 프로그래밍 상에서 프로그래밍을 하기 위한 틀이나 구조를 제공한다고 말할 수 있음
장점
1. 효율적으로 코드를 작성할 수 있음
: Framework를 라이브러리 형태로 제공하기 때문에 기본 틀을 제공받아 핵심 로직 개발에 집중이 가능함
2. 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있음
: 정해진 규약이 존재하기 때문에 유지보수가 필요할 경우 더 빠르고 쉽게 문제점을 파악해 수정이 가능하며, 재사용이 용이하고 기능 확장 또한 가능함
단점
1. 내가 사용하고자 하는 Framework에 대한 학습이 필요함(=러닝커브 존재)
: 규약에 대한 학습이 필요
2. 자유롭고 유연한 개발이 어려움
: 정해진 규약을 벗어나기 위해서는 이미 만들어진것을 모두 허물고 새롭게 구조를 새우는 과정이 필요한데 해당 과정이 매우 어려운것 처럼 Framework를 변경하거나 Framework를 사용하지 않게 변경할 경우 많은 시간과 노력이 필요
[Library]
Library란?
: 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드
: 애플리케이션을 개발할 때 필요한 기능을 미리 구현해놓은 집합체
[Framewokr와 Library 차이]
예시)
Framework : 자동차의 뼈대인 Frame을 의미 >> 교체가 어려움
Library : 자동차에서 다양한 기능을 제공하는 부품을 의미 >> 쉽게 교체가 가능하며 필요한 부붐을 선택적으로 사용 가능
소프트웨어 관점에서 보았을 때 애플리케이션에 대한 제어권 차이가 존재함
@SpringBootApplication
@RestController
@RequestMapping(path = "/v1/message")
public class SampleApplication {
@GetMapping
public String getMessage() { // (2)
String message = "hello world";
return StringUtils.upperCase(message); // (1)
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
(1) Library 사용 (StringUtils.upperCase(message))
: StringUtils클래스의 upperCase() 메서드의 파라미터로 전달하는 문자열(message)을 대문자로 변환(코드상에 보임)
라이브러리 판단 근거
: 개발자가 짜 놓은 코드 내에서 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용하는 것이 Library를 의미하며 애플리케이션 흐름의 주도권이 개발자에게 존재하는 것을 말함
(2) Framework (애너테이션이나 main() 메서드 내의 SpringApplication.run() 메서드)
: 코드 상에는 보이지 않는 많은 일들을 진행
: getMessage() 메서드 내부 코드처럼 개발자가 메서드내에 코드를 작성하면 Framework에서 개발자가 작성한 코드를 사용해 애플리케이션 흐름을 생성하여 흐름의 주도권이 개발자가 아닌 Framework에 존재함
'공부 자료 > Spring' 카테고리의 다른 글
[Spring Core] DI (Dependency Injection) (0) | 2022.10.11 |
---|---|
[Spring Core] PSA (Portable Service Abstraction) (0) | 2022.10.11 |
[Spring Core] POJO(Plain Old Java Object) (0) | 2022.10.11 |
[Spring Core] Spring Framework 소개 (0) | 2022.10.11 |
[Spring Core] IoC (Inversion of Control) (0) | 2022.10.10 |