[Java] Java 알아보기

Yuri·2024년 12월 12일

Java

목록 보기
1/13

1. Java 란?

Java는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 PC, 모바일, 콘솔 등 수십억 개의 장치에서 실행되는 객체 지향 프로그래밍 언어 및 소프트웨어 플랫폼이다.

Java를 다른 컴파일 언어와 구분 짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다.

Java 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트코드를 실행하기 위해서는 JVM(자바 가상 머신)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다.

  • JDK(Java Development Kit, 자바 개발 도구): Java 어플리케이션 개발을 위해 반드시 필요, 사람이 작성한 소스 코드를 번역하여 컴퓨터가 이해할 수 있는 바이트 코드로 변환하는 도구인 Java 컴파일러가 포함되어 있다. 
  • JRE(Java Runtime Environment, 자바 실행 환경) , JVM (Java Virtual Machine, 자바 가상 기계)
    • Java로 컴파일 된 어플리케이션을 실행하는 역할을 합니다. 모든 Java 어플리케이션은 JVM이라고 하는 가상의 컴퓨터 공간에서 실행되며, Windows, Linux, Mac 등 어떠한 운영체제라도 JVM이 설치되어 있다면 Java 어플리케이션을 실행할 수 있습니다.

Hello.java

public class Hello { // Hello 클래스의 범위 시작
	public static void main(String[] args) { // main() 메서드의 범위 시작
		System.out.println("Hello, Sparta!");
	} // main() 메서드의 범위 끝
} // Hello 클래스의 범위 끝

실행결과

컴파일과 실행

Java 소스 코드는 [파일명].java 라는 파일 형식으로 최상위 위치인 루트 디렉토리에 패키지로 구분되어 작성됩니다. 아직 인간이 해석할 수 있는 단계의 소스 코드 상태이니 컴파일이라는 번역 작업을 통해서 컴퓨터가 알아듣는 언어, 즉 바이트 코드로 바꿔주어야 합니다. 그렇게 컴파일된 결과물이 바로 out이라는 디렉토리에 [파일명].class라는 형태로 저장됩니다.

프로그래밍 언어 순위 🔗

2. Spring 프레임워크 알아보기

Spring의 특징은 무엇인가요?

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 

  • 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • Plain Old Java Object 방식의 프레임워크이다.
  • 제어 반전(IoC: Inversion of Control)을 지원한다. 
  • 의존성 주입(DI: Dependency Injection)을 지원한다.
  • 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)을 지원한다.
  • 영속성과 관련된 다양한 서비스를 지원한다. (iBATIS, 하이버네이트 등)
  • 확장성이 높다.

POJO(Plain Old Java Object): Java로 생성하는 순수한 객체
➡️ 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트
IoC(Inversion of Control)
➡️ 컨트롤의 제어권이 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
DI(Dependency Injection)
➡️ 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
AOP(Aspect-Oriented Programming)
➡️ 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

장점

모듈화와 유연성

스프링은 매우 모듈화되어 있어 필요한 기능만 선택적으로 사용할 수 있습니다. 예를 들어, 스프링의 핵심인 Spring Core를 기반으로, 필요한 모듈인 Spring MVC, Spring Data, Spring Security, Spring Batch 등을 추가할 수 있습니다.

트랜잭션 관리

스프링은 선언적 트랜잭션 관리 기능을 제공하여 복잡한 트랜잭션 처리 로직을 간단하게 구현할 수 있습니다. 이는 다양한 트랜잭션 관리 전략을 지원하고, 데이터베이스에 대한 일관성을 유지하는 데 유용합니다.

커뮤니티와 생태계

스프링은 활발한 오픈소스 커뮤니티와 방대한 문서를 가지고 있습니다. 많은 예제와 튜토리얼이 제공되며, 다양한 플러그인과 라이브러리, 그리고 통합 솔루션들이 있습니다.

높은 성능

스프링은 경량화된 프레임워크로, 애플리케이션의 성능을 높이기 위한 다양한 최적화 기능을 제공합니다. 예를 들어, AOP를 활용하여 불필요한 연산을 줄일 수 있습니다.

단점

학습 곡선

스프링은 다양한 개념과 구성 요소를 제공하기 때문에 처음 접하는 개발자에게는 학습 곡선이 있을 수 있습니다. 의존성 주입, AOP, 트랜잭션 관리, 빈(Bean) 설정 등을 제대로 이해하는 데 시간이 걸릴 수 있습니다.

구성 파일 복잡성

스프링은 XML 설정을 통해 많은 기능을 설정할 수 있지만, 복잡한 애플리케이션에서는 설정 파일이 매우 방대해지고 관리하기 어려울 수 있습니다. 최근에는 어노테이션 기반 설정이 많이 사용되지만, 여전히 많은 설정을 필요로 할 수 있습니다.

성능 이슈

스프링은 많은 추상화 계층을 사용하기 때문에, 애플리케이션이 커질수록 성능에 영향을 줄 수 있습니다. 특히, 빈 관리와 AOP 적용 시, 일부 성능 저하가 발생할 수 있습니다.

과도한 의존성

스프링은 기능이 풍부하지만, 이를 모두 사용하는 경우 의존성 라이브러리가 많아지고, 애플리케이션 크기가 커질 수 있습니다. 이는 배포 크기나 관리 측면에서 부담이 될 수 있습니다.

Spring과 Spring boot의 차이는 무엇인가요? 🔗

Spring은 스프링 프레임워크의 핵심 모듈을 모아서 만든 프레임워크이다.

Spring에서는 개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 한다. Spring은 특정한 구성을 위해 추가적인 라이브러리와 설정이 필요하다.

반면, Spring Boot는 스프링 프레임워크를 보다 쉽게 사용할 수 있도록 만든 프레임워크다.

Spring Boot에서는 개발자가 설정 파일을 작성할 필요 없이, 프로젝트의 설정과 라이브러리 의존성을 자동으로 처리해주는 기능을 제공한다. 또한, Spring Boot는 실행 가능한 JAR 파일을 만들 수 있다.

Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에(대규모 엔터프라이즈 애플리케이션), Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용된다.

profile
안녕하세요 :)

0개의 댓글