SpringBoot

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

코카멍멍 2023. 7. 19. 15:20
반응형

라이브러리란?

  • 재사용이 가능한 코드의 집합

실행 함수

public static void main(String[] args) {  

double library_time = System.nanoTime();  
double library = round(20.555d, 2);  
double library_endTime = System.nanoTime();  

double custom_time = System.nanoTime();  
double custom = notUseLibrary(20.555d, 2);  
double custom_endtime = System.nanoTime();  

System.out.println("라이브러리: " + library + " 걸린시간: " + (library_endTime-library_time));  
System.out.println("커스텀: " + custom + " 걸린시간: " + (custom_endtime - custom_time));  
}

직접 구현 코드

//구현 시간 10분

public static <T> double notUseLibrary(T value, int decimalPoint){ // 15줄  
    double dValue = Double.valueOf(String.valueOf(value));  
    // Math.pow() 와 같은 행위  
    double pow = 1;  
    for(int i = 0; i <= decimalPoint; i++) {  
        pow *= 10;  
    }  
    dValue *= pow;  
    // Math.round() 와 같은 행위  
    double mod = dValue % 10;  
    if( mod >= 5) {  
        return (dValue+-mod+10) / pow ;  
    }  
    return (dValue-mod)/pow;  
}

라이브러리 이용한 코드

//구현 시간 3분

public static <T> double round(T value, int decimalPoint) { // 5줄  
    Float aFloat = Float.valueOf(String.valueOf(value));  
    double pow = Math.pow(10, decimalPoint);  
    return Math.round(pow * aFloat) / pow;  
}

직접 반올림 기능을 구현한것과 라이브러리를 비교해봤습니다.
우선 구현시간만 봐도 많은 차이가 존재하죠?? 아무리 쉬운 코드라도 계속해서 기능을 작성해야 한다면 생산성이 많이 떨어질 것입니다.
생산성 뿐만 아니라 라이브러리는 수많은 검증절차를 끝내고 나온것이기 때문에 안정성면에서도 우수합니다. 마지막으로 성능이 중요한 기능들은 저수준의 프로그래밍을 통해 성능 최적화까지 합니다. 그렇기때문에 라이브러리를 사용하는것이 좋을것 같아요!!

장점

  1. 가독성이 좋다
  2. 안정성도 좋다(검증됨)
  3. 생산성 향상

프레임워크란?

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미합니다.

프레임워크가 나오게 된 계기

  1. 자주 사용되는 기능 (라이브러리 모음집)
  2. 매번 설정해줘야 하는 설정들
  3. 사람마다 개발하는 방식이 다름(협업하기 위한 규칙)

3. 프레임워크규칙!!

public interface FrameworkInterface {
    //2. 의존성 주입
    default void 시작(){
        System.out.println("프레임워크 시작!!");
        System.out.println("세팅을 시작합니다!!");
    };
    void 서비스로직();
    default void 끝(){
        System.out.println("자원을 반납합니다.");
        System.out.println("프로그램 종료!!");
    };
    default void run () {
        시작();
        서비스로직();
        끝();
    }
}

프레임워크에서 우리가 구현해야할 부분!!

class FrameWork implements FrameworkInterface{  
    private final 객체 객체1;  
    private final 객체2 객체2;  

    public FrameWork(객체 객체1, 객체2 객체2) {  
        this.객체1 = 객체1;  
        this.객체2 = 객체2;  
    }  

    @Override  
    public void 서비스로직() {  
        System.out.println("내가 조종할 수 있는 부분 -> 비즈니스 로직 작성"); //작성가능  
    }  

    @Override  
    public void run() {  
        시작();  
        서비스로직();  
        끝();  
    }  
}

프레임워크의 장점

  1. 객체의 생명주기 관리
  2. 의존성 주입
  3. 컴포넌트 재사용성 (필요할 때마다 기존에 생성한 객체 불러옴)
  4. 성능 최적화 (프레임워크가 관리)
  5. 안정성 증가 (검증됨)
  6. 생산성 증가

제어권 역전예시

  1. 프레임워크가 웹 요청 처리 흐름을 주도하고, 개발자는 특정 URL에 대한 핸들러를 작성하여 처리 작업을 수행한다.
  2. 프레임워크가 객체의 생명주기를 관리하고, 개발자는 프레임워크의 확장 포인트를 이용하여 객체의 초기화와 소멸에 필요한 작업을 수행한다.
  3. 프레임워크가 테스트 실행 흐름을 관리하고, 개발자는 테스트 케이스를 작성하여 테스트를 수행하고 결과를 확인한다.
  4. 프레임워크가 이벤트 핸들링 흐름을 주도하고, 개발자는 이벤트 핸들러를 등록하여 특정 이벤트가 발생했을 때 작업을 수행한다.
  5. 프레임워크가 의존성 주입(Dependency Injection)을 통해 객체의 의존성을 해결하고, 개발자는 의존성을 선언하고 프레임워크가 주입한 객체를 활용한다.
  6. 프레임워크가 스레드 관리를 수행하고, 개발자는 프레임워크가 제공하는 스레드 풀을 활용하여 비동기 작업을 처리한다.
반응형