Framework란
SW의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게하는
일련의 협업화된 형태로 클래스들을 제공하는 것
-Ralph Johnson-
Ralph Johnson의 말을 통해 유추 할 수 있는 것
재사용이 목표다. >>>> 재사용을 통해 코드를 경제성이 있게 짤 수 있다
JAVA의 꽃이라고 불리는 다형성 등 객체지향을 쉽게 사용하기 위해 만들어진 것이다.
Framework 라는 단어를 통해 유추 할 수 있는 것
Frame
뼈대 / 틀 / 구조 등의 무엇인가를 만들기 위한 가장 큰 추상적인 구조?? 와 같은 것을 의미한다.
즉 어떤 대상의 큰 틀이나 외형적인 구조를 의마한다는 것을 알 수 있다.
결론
Framework는 SW의 설계와 구현을 재사용을 가능하게 하기 위해 OOP를 지원하는 큰 틀 혹은 구조라고 생각 할 수있다.
Framework 장점
1. 효율적인 코드 작성 가능
기본적인 큰 틀이 존재하기 때문에 핵심 로직의 개발에 집중 할 수 있다.
2. 정해진 규약을 통해 앱의 효율적인 관리가 가능
규약을 통해 유지보수가 쉬워지며
다른 사람과의 협업 혹은 다른 사람의 코드를 수정하는 등의 이슈가 생기더라도
규약을 통해 코드를 빠르게 확인 및 수정이 가능하다.
Framework 단점
1. Framework를 학습해야한다.
JAVA언어 뿐만 아니라 Spring에 대한 학습이 추가적으로 필요하며 Spring을 이해하기 위해 많은 시간이 소요된다.
2. 자유롭고 유연한 개발이 어렵다.
규약의 존재 때문에
Frameworks 와 Libraries
Library : 앱의 개발을 위해 사용되는 일련의 데이터 및 프로그래밍 코드
즉 앱 개발에 필요한 기능을 미리 구현해둔 집합체
Framework 와 Library 의 차이점
Framework는 코드를 만드는 큰 뼈대를 만들 수 있고, Library 는 다양한 기능을 제공하는 부품들을 의미한다.
내가 생각하는 JAVA로 들어보는 두개의 차이점
Framework는 일종의 Interface처럼 되어있다. 큰틀은 존재 하지만 사용하기 위해서는 하나하나 구현을 할 필요가 있다.
Library는 일종의 완성된 클래스와 같다고 생각한다. 클래스들 안에 이미 여러 멤버들이 구현되어 있어 원하는 메소드 등을 바로 사용할 수 있는 것을 의미한다.
결론
앱에 대한 제어권의 차이가 있다.
한번 정해진 Framework는 교체하기 어렵지만 Library는 쉽게 교체가 가능하며 필요한 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) (2)에 대해 알아봐야한다.
(1) 라이브러리를 사용한것 (Apache Commons Lang3 Library)
(2) 프레임워크를 사용한 것
위의 코드에 대한 작동 방식은 따로 기입하지 않겠습니다.(why? 코드를 변경하려고 하기 때문)
우리가 궁금한 것은 라이브러리의 판단 유무?
개인적인 생각
일단 라이브러리에 속해있는지 확인해보지 않나 라는 생각을 합니다.
정답
개발자가 만든 코드내에서 필요한 기능이있다면 라이브러리를 호출해서 사용하는 것
(2)의 해석
위의 코드상에서 run()메서드와 애너테이션 등등이 Spring에서 지원하는 것으로 코드 상에는 보이지 않는 많은 일 진행
Spring에서 개발자가 작성한 코드를 사용해서 앱의 흐름을 만들어낸다.
해석이 이해가 가는가?
필자는 전혀 이해가 가지 않았다. 이 글을 읽고 있는 여러분도 그렇다면 IoC 컨테이너에 대해 알아볼 필요가 있다.
IoC(Inversion of Control, 제어 역전) 컨테이너
스프링의 핵심 기능 중 하나는 여러 DI들을 조립해 줘야하는 것이다.
이 때 우리는 프레임워크에 이렇게 코드를 만들어줘! 라는 명세서를 줘야한다.
위의 내용을 예시를 통해 설명해 보겠다.
내가 컴퓨터를 조립하고자 한다면
가장 먼저 주문서를 만들어야한다.
이 주문서에는 어떤 부품들을 사용하고 조립해야되는지를 명세한다.
그러며 주문서를 바탕으로 완성된 컴퓨터를 제공한다.
이를 코드에 다시 대입해 보자
주문서를 만드는 것은 어떻게 가능한가? @애노테이션 및 XML 을이용한다.
주문서에 담긴 부품들은? DI라는 의존성 주입이라는 것이다.
그럼 이를 조립할 상자들이 필요할텐데 이것은 무엇인가??
이를 IoC 컨테이너 라고한다.
즉 코드를 조립하는데 필요한 공간 정도라고 생각하면 이해하기가 쉽다.
IoC 컨테이너 이름 붙인 이유
로직을 보면 가장 작은 부품을 먼저 만들고 큰 부품에 연결하는 등 기본적으로 만들어 내는 방식과 반대의 방식으로 물건을 만들어낸다. 그렇기 때문에 제어역전 이라는 의미를 부여했다.
기존의 방식 가장 큰틀을 만들고 점점 작은 틀로 이동 시키는 방식
'이전 학습 내용' 카테고리의 다른 글
| 솟수 구하기 풀어보기 (0) | 2022.12.08 |
|---|---|
| Why Use Spring? (0) | 2022.12.06 |
| 띠용~~ 인터페이스와 오버로딩 (0) | 2022.12.04 |
| 띠용~~~ 같은 클래스의 메서드에 값을 전달 하는방법 (2) | 2022.12.04 |
| 오늘의 띠용@!@(네스트 클래스 테스트) (0) | 2022.12.02 |