라이브러리와 프레임워크

ExiNni·2023년 9월 10일
0

JAVA

목록 보기
1/20

라이브러리(영어: library)는 현실세계에서의 라이브러리(도서관)란 필요할 때마다 꺼내볼 수 있는 책(지식)들이 모여있는 곳이다. 프로그래밍에서의 라이브러리란 필요한 기능들이 모여있는 코드의 묶음이라고 생각할 수 있다. 자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다.

프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다.
단, '프레임워크가 원하는 방식'대로 다양한 기능을 제공한다. 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 알아서 관리하며, 개발자는 서비스별로 다른 부분만 "프레임워크가 정해준 방식대로" 클래스, 메서드 등에 구현해두면 된다.

출처: https://curryyou.tistory.com/363

라이브러리와 프레임워크의 차이

프레임워크와 라이브러리의 차이점은 "제어 흐름"의 권한이 어디에 있는가이다.

라이브러리를 사용할 때 사용자는 애플리케이션 코드의 흐름을 직접 제어해야 한다.
개발 시 필요한 기능이 있을 경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수나 코드를 가져다 써야 한다.

반면 프레임워크는 애플리케이션의 코드가 프레임워크에 의해 사용된다.
애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 된다.

여기서 제어의 역전(IoC, Inversion of Control)이란,
어떠한 일을 하도록 만들어진 Framework에 Control 권한을 위임하는 것을 의미하는데,
간단히 말해 프로그램의 제어 흐름 구조가 뒤바뀐 것을 뜻한다.

라이브러리의 경우 애플리케이션의 흐름을 사용자가 직접 제어해야 하지만 프레임워크의 경우 코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있다.

출처: https://cocoon1787.tistory.com/745

라이브러리와 프레임워크 코드 예시

-라이브러리-
Java에서 문자열을 다루기 위한 라이브러리인 java.lang.String을 사용하여 문자열을 연결.

public class LibraryExample {
	public static void main(String[] args) {
		String str1 = "Hello, ";
     String str2 = "world!";
     String result = str1 + str2; // 문자열 연결
     System.out.println(result);

     }
 }




> -프레임워크-
Spring 프레임워크는 Java 기반의 웹 애플리케이션을 개발하기 위한 프레임워크로, 개발자는 Spring의 규칙과 구조를 따라 코드를 작성.

```java

 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;

 @SpringBootApplication
 public class FrameworkExample {

     public static void main(String[] args) {
         SpringApplication.run(FrameworkExample.class, args);
     }
 }

 @RestController
 class HelloWorldController {
     @GetMapping("/hello")
     public String hello() {
         return "Hello, world!";
     }
 }

profile
Software Developer

0개의 댓글