프레임워크(Framework) : 뼈대, 기반구조
프레임워크는 제어의 역전 개념이 적용된 대표적인 기술이다.
애플리케이션 개발 시 필수적인 코드, 알고리즘, DB연동과 같은 기능들에 대한 구조를 제공하고, 이러한 뼈대들을 바탕으로 사용자가 애플리케이션을 개발한다.
앱/서버 등의 구동, 메모리관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하고 사용자는 프레임워크가 정해준대로 클래스, 메소드를 구현한다.
소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합'이라고 한다.
특징
특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어있음
컴포넌트들은 재사용이 가능함
기능을 모듈화하여 독립적인 컴포넌트로 나눌 수 있게 함
높은 수준에서 패턴들을 조작화하여 작업을 자동화하고 생산성을 높일 수 있음
일관된 코드구조를 유지하여 유지보수성 향상
* 컴포넌트는 독립된 모듈을 뜻한다. 클래스같은 개념과는 다르다.
컴포넌트를 잘 적용한 소프트웨어는 부품(인터페이스를 구현받은 클래스)만 바꿔주면 오류없이 잘 작동하는 것을 의미함.
자바 프레임워크의 종류
Spring Framework : 의존성 주입, 관점지향 프로그래밍, MVC패턴 등 지원하는 가장 자주쓰는 자바 웹 프레임워크
Apache Structs : MVC패턴을 기반으로 하는 자바 웹 프레임워크. 얘도 인기있음
Hibernate : ORM(Object-Relational Mapping) 프레임워크로, 객체지향 프로그래밍 방식으로 DB에 접근할 수 있음
JavaServer Faces(JSF) : 웹 애플리케이션 UI 개발을 위한 프레임워크
기타등등..
라이브러리(Library) : 도구들의 집합
개발자가 만든 클래스에서 호출하여 사용하며 미리 작성된 코드, 변수, 함수, 클래스들을 필요할 때 불러서 사용할 수 있다.
특징
특정 작업을 처리하는 코드의 재사용 촉진
복잡한 작업을 함수 호출만으로 추상화함
기능별로 모듈화되어 필요에 따라 가져다 쓸 수 있음
필요에 따라 라이브러리를 선택해서 사용할 수 있음
자바 라이브러리의 종류
자바 라이브러리는 표준 라이브러리와 외부 라이브러리로 나뉜다. 표준 라이브러리는 JDK에 포함되어 기본적으로 제공되는 클래스와 인터페이스들이며 외부 라이브러리는 개발자들이 별도로 추가하여 사용하는 라이브러리이다.
표준 자바 라이브러리
- java. 패키지 : 입출력, 네트워크, 유틸리티, 문자열 처리, 컬렉션, 날짜/시간 처리 등을 위한 클래스들을 포함함
- javax. 패키지 : GUI, XML 처리, JMX, JDBC 등 고급 기능들을 위한 클래스들을 포함함
ex) Object, String, StringBuffer, Math, System / Date, List, Set, Map / java.io.* 등..
외부 자바 라이브러리
데이터 처리, 웹 개발, XML 파싱, 로깅, 테스트 등을 위해 사용됨
ex) 로깅 : Log4j, SLF4J / 데이터 처리 : Apache POI, Gson, Jackson / 테스트 : JUnit, Mockito / CSV처리 : Super CSV /
롬복(Lombok) : 개발 재생산성을 높여주는 자동 코드 생성 라이브러리
프레임워크와 라이브러리의 차이점
제어 흐름에 대한 주도권이 누구에게 있는가(애플리케이션의 흐름을 누가 주도하는가)에 달려있음
프레임워크는 애플리케이션의 흐름을 스스로 주도할 수 있으며 사용자는 그에 필요한 비즈니스 코드만 구성하면 된다.
따라서 프레임워크에는 제어의 역전 개념이 적용되어야만하며 코드들은 프레임워크가 짜놓은 틀에서 수동적으로 동작해야함
라이브러리는 사용자가 전체적인 흐름을 만들며 필요에 따라 라이브러리를 가져다 쓸 수 있다.
'Spring Boot' 카테고리의 다른 글
| Spring 핵심 개념 - IoC(Inversion of Control) (0) | 2025.06.19 |
|---|---|
| 테스트 주도 개발(TDD) (1) | 2025.06.19 |
| 객체지향 설계 원칙(DRY, SRP, SoC) (1) | 2025.06.18 |
| POJO(Plain Old Java Object) (1) | 2025.06.18 |
| Spring Framework가 탄생하게 된 배경 및 목적 (0) | 2025.06.16 |