본문 바로가기

JAVA

JAVA와 Spring 특징

자바 개발 도구와 실행 환경

  • JDK : 자바 개발 도구
  • JRE : 자바 실행 환경
  • JVM : 자바의 플랫폼 독립성을 보장해줌 -> 이를 통해 어떤 플랫폼에서든지 실행 가능

자바 소스 코드의 실행과정

  • .java소스 파일 → .class 바이트코드파일 → JVM이 정적영역에 메모리 할당

Spring의 특징

1. 제어의 역전 (Inversion of Control) : 객체를 직접생성하지 않고, 객체의 생명주기 관리를 외부(스프링 컨테이너)에 위임하는 

- 이를 통해 DI, AOP가 가능해짐

- Spring은 xml파일 또는 어노테이션 방식으로 스프링 컨테이너에 Bean(객체)를 등록하기만 하면, 스프링 컨테이너에서 Bean의 생명주기를 전부 관리

- 객체 간 의존 관계를 쉽게 변경하고 재사용성과 유지보수성을 높임

 

 

2. 의존성 주입(Dependency Injection) : 스프링 컨테이너가 어떤 객체에게 다른 객체에 의존성을 맺어주는 것

 - 의존성을 주입하지 않고, 스스로 만든 경우

public class Soldier {
    private Gun gun;

    public Soldier() {
        gun = new Gun();
    }
}

 

- 스프링 컨테이너에 의해서 의존성을 주입한 경우

public class Soldier {
    @Autowired 
    private Gun gun;
}

-> 의존성 주입을 통해서 코드의 재사용성, 유연성, 확장성, 유지보수성이 높아짐

 

3. 관점 지향 프로그래밍 AOP(AspectOriented Programming) : 관점을 기준으로 묶어서 개발하는 방식

- 어떤 기능을 구현할 때, 그 기능을 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것

- 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화 해 삽입하는 방식 ex) 로그 찍기

-> 모듈화 해서 재사용 가능한 구성을 만들어, 개발자가 비즈니스 로직 구현에만 집중할 있도록 도와줌

 

Spring의 장점

  • POJO 기반: 개발자는 JAVA코드를 이용해서 객체를 구현하는 방식 그대로 스프링에서 사용할 수 있음, 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않음
  • 의존성 주입으로 객체 간 결합도를 낮춰 유지보수성과 테스트 용이성, 확장성 높음

Spring의 단점

  • Thread Fool이 한정되어있기 때문에 Thread Fool에 있는 Thread를 모두 가져다 쓰면 CPU, 메모리 리소스 임계점 초과로 서버가 다운되어 버림 -> 그렇기에 최대 Thread 수를 잘 설정해 줘야 함

Spring과 Spring boot의 차이

  • Spring을 사용하기 위해서 해줘야 할 설정들을 boot에서 자동으로 해줌 -> 개발 생산성 증가
  • ex) 톰켓 서버 내장 등

'JAVA' 카테고리의 다른 글

보너스 문제: 가위 바위 보  (0) 2024.12.17
Lv3. 단어 맞추기 게임  (2) 2024.12.16
Lv2. 스파르타 자판기  (3) 2024.12.14
Lv1. 랜덤 닉네임 생성기  (0) 2024.12.14
반복문 연습하기  (0) 2024.12.11