본문 바로가기
Spring

Library와 Framework, API

by 융디's 2024. 6. 2.
728x90
Library와 Framework, API

Library와 Framework, API

패키지(Package)

서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스(.class) 파일들을 하나의 디렉터리에 모아 놓은 것
  • 자바에서 클래스를 분류하고 관리하기 위한 단위

< 패키지 사용 방법 >

  • 코드 첫 줄에 package 패키지 명; 적기
  • 같은 패키지에 속한 클래스를 사용할 때는 패키지 경로를 생략할 수 있다.
  • 다른 패키지에 속한 클래스를 사용할 때는 import 패키지 이름.클래스 이름;
// 패키지명이 exam일시 
package exam;
// exam 하위에 a 패키지를 생성
package exam.a;

< 주의해야 할 점 (계층구조) >

  • 패키지는 보통 계층 구조를 이룬다.
  • a와 a.b, a.c와 같이 3개의 패키지가 있다고 가정하다
    • a 패키지 하위에 a.b 패키지와 a.c 패키지가 있는 것이다.
    • 하지만 a 패키지와 a.b와 a.c 는 완전 서로 다른 패키지!
    • 따라서 a 패키지의 클래스에서 a.b와 a.c 패키지의 클래스가 필요하면 반드시 import 해서 사용해야 한다.
  • 패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지이다!

라이브러리(Library)

프로그램 개발 시 활용될 수 있는 클래스와 인터페이스들을 모아 놓은 것
  • 일반적으로 JAR 압축 파일로(.jar) 형태로 존재
  • JAR 파일에는 클래스와 인터페이스의 바이트코드 파일(.class) 들이 압축되어 존재
  • ClassPath에 사용하려는 라이브러리 JAR 파일을 추가하면 사용 가능
  • 해당 라이브러리는 다른 라이브러리에 의존하지 않는다. → 독립성
  • 응용 프로그램이 능동적으로 라이브러리를 사용한다
    • 능동적 : 내가 필요할 때 라이브러리를 호출해서 사용 가능하다!

모듈(Module)

라이브러리 + 패키지 관리 기능까지 포함된 것
  • 일반 라이브러리
    • 내부에 포함된 모든 패키지에 외부 프로그램에서의 접근이 가능
  • 모듈
    • 일부 패키지를 은닉하여 접근할 수 없게끔 할 수 있다.
    • 자신이 실행할 때 필요로 하는 의존 모듈을 모듈 기술자(module-info)에 기술할 수 있다.
      → 모듈 간의 의존 관계 쉽게 파악 가능
    • 보통 JAR 파일 형태로 배포
    • 응용 프로그램을 개발할 때 원하는 기능의 모듈 파일을 다운로드해서 이용
    • 대규모 응용 프로그램은 기능별로 모듈화해서 개발
      • 모듈별로 개발하고 조립하는 방식을 사용하면 재사용성 및 유지 보수에 유리

패키지 은닉

모듈 기술자(module-info)에서 exports 키워드를 사용해 내부 패키지 중 외부에서 사용할 패키지를 지정한다.
module-info.java

module name{
      exports package1; // 외부에서 사용 가능 
 }
  • exports 되지 않은 패키지는 자동적으로 은닉

< 패키지를 은닉을 하는 이유 >

  • 모듈 사용 방법 통일
    • 모듈 외부에서 패키지 2와 3을 사용 못 하도록 막고, 패키지 1로 사용 방법을 통일
  • 쉬운 수정
    • 모듈 성능 향상을 위해 패키지2와 패키지3을 수정하더라도, 모듈 사용 방법(패키지1)은 달라지지 않기 때문에 외부에 영향을 주지 않는다.

프레임워크(Framework)

소프트웨어 개발을 위한 구조와 규칙을 제공하는 도구로, 일종의 뼈대나 틀로 애플리케이션의 전체적인 구조를 정의하고, 개발자가 코드를 작성할 때 지켜야 할 규칙을 제시
  • 응용 프로그램이 수동적으로 프레임 워크에 의해 사용된다.
    • 수동적 : 응용프로그램이 수동적으로 프레임워크에 의해 사용된다.
      (
      프레임워크가 개발자 코드를 호출)

< 주요 특징 >

  • 구조화된 환경 제공
    • 개발 환경을 구조화하여 프로젝트의 기본적인 틀을 제공
    • 개발자는 애플리케이션의 구조를 쉽게 이해하고 유지 보수할 수 있다.
  • 재사용 가능한 코드
    • 일반적으로 많은 기능을 포함하고 있으며, 이런 기능은 재사용 가능한 형태로 제공한다.
  • 확장성
    • 확장 가능한 구조를 가지고 있어, 개발자가 필요에 따라 기능을 추가하거나 변경 가능
    • 프로젝트의 요구사항이 변할 때 유연하게 대응 가능

< 구성요소 >

  • 프레임워크 코어(Cold Spot)
    • 변경되지 않고 반복적으로 재사용되는 부분
    • 프레임워크에서 제공하는 라이브러리를 의미
    • 사용하는 자원 관리나 처리 흐름을 제어
  • 확장 포인트(Hook Point)
    • 애플리케이션 구축할 때 사용할 확장 포인트를 제공
    • 일반적으로 추상 클래스나 인터페이스 형태로 제공
  • 확장 모듈(Hot Spot)
    • 각 애플리케이션이 확장 포인트를 상속해서 애플리케이션만의 비지니스를 구현하는 것
    • 프레임워크 코어와 확장 포인트를 상속해서 구현한 것
  • 메타데이터
    • 확장 모듈을 유기적으로 결합하여 동작하도록 하는 환경 설정 파일
    • 일반적으로 XML, java Config Class 형태로 작성

라이브러리 VS 프레임워크

  • 라이브러리는 손질된 재료이다!
    • 내가 요리할 때 필요한 손질된 재료를 가지고 음식을 만들면 된다.
    • 정해진 순서 없이 내 느낌대로 만들기 때문에 맛이 좋을지, 안 좋을지 장담할 수 없다.
  • 프레임워크는 밀키트다!
    • 재료와 요리 순서는 이미 정해져있다!
    • 나는 요리 순서(규칙)에 맞게 손질된 재료(라이브러리)를 넣고 음식을 완성하면 되기 때문에 맛이 어느 정도 보장된다.
    • 기호에 맞게 다른 재료(라이브러리)를 추가해서 음식의 맛을 높일 수 있다.

API(Application Progamming Interface)

응용프로그램에서 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 ⇒ 프로그램 간 사이를 연결시켜주는 다리
  • 구현과는 독립적으로 사용법만 정의되어 있다. ⇒ 인터페이스
  • 복잡한 작업을 간단한 명령으로 추상화하여 개발자가 더 쉽게 사용할 수 있게 한다.
  • 동일한 API를 여러 애플리케이션에서 재사용 가능
  • 표준화된 방식으로 기능을 제공하므로, 일관된 방법으로 접근하고 사용 가능
  • 예시
    • 맛집 프로그램을 만들었는데 지도 서비스가 필요하다!
    • 네이버의 지도 서비스를 이용할 예정이다
    • 네이버 : 우리의 프로그램을 사용하려면 URL을 “map/위도&경도”형식으로 요청을 보내!
      그럼 너가 원하는 지도에 관련된 정보를 줄게!
    • “map/위도&경도”형식을 통해 지도 서비스를 이용할 수 있다 = 다리 역할

728x90

'Spring' 카테고리의 다른 글

Spring Boot 실행 클래스 분석하기  (0) 2024.06.06
Spring Boot Project 생성하기(Gradle)  (0) 2024.06.05
WEB Server와 WAS  (0) 2024.06.04
Spring Framework과 Spring Boot  (0) 2024.06.03