sagecode 57

[Spring] Maven vs Gradle

Maven과 Gradle은 Java 애플리케이션의 빌드와 의존성 관리를 위해 널리 사용되는 도구이다. 이 두 도구는 소프트웨어를 컴파일, 테스트, 패키징, 배포하는 데 필요한 프로세스를 자동화하여 개발 생산성을 높이는데 기여한다. Maven은 XML기반의 선언적 방식으로 설정을 정의하며, 전통적인 빌드 도구로 널리 사용되어 왔다. 그에 반해 Gradle은 선언적 방식과 프로그래밍적 방식을 혼합한 DSL(Domain-Specific Language)을 활용하며, 현대적인 빌드 요구사항에 맞춘 유연성과 속도를 제공한다.1. Maven과 Gradle의 주요 차이점기본 철학과 빌드 스크립트항목MavenGradle철학선언적 빌드. XML파일을 사용하여 의존성 선언선언적 + 프로그래밍적 빌드. Groovy 또는 K..

SPRING 2024.12.24

[Spring] Spring Boot AutoConfiguration(자동 설정)

Spring Boot AutoConfiguration은 개발자가 복잡한 설정을 간소화 하고 애플리케이션을 빠르게 구성할 수 있도록 설계된 기능이다. AutoConfiguration은 애플리케이션 실행 시 필요한 설정을 자동으로 적용해주며, 개발자가 비즈니스 로직에만 집중할 수 있게 해준다. 예를 들어, spring-boot-starter-data-jpa 의존성을 추가하면 DataSource 및 JPA 설정이 자동으로 구성된다. 웹 서버는 spring-boot-starter-web 의존성을 추가하면 내장 Tomcat과 Spring MVC가 자동으로 설정된다. 이는 Spring Framework에서 수작업으로 설정해야 했던 작업들을 간소화 해준다. 1. AutoConfiguration 동작 원리@Enable..

SPRING 2024.12.23

[Spring] Spring Boot 2 vs Spring Boot 3 차이가 무엇일까?

Spring Boot 2와 Spring Boot 3의 차이점을 알아보자. JDK VersionSpring Boot 3에서는 JDK 17미만의 버전을 지원하지 않습니다. JavaEE -> JakartaEESpring Boot 3는 모든 종속성을 위해 Java EE에서 Jakarta EE API로 마이그레이션 되었습니다. Jakarta EE는 엔터프라이즈 급 Java 기반 서버 사이드 애플리케이션을 개발하기 위한 표준을 의미합니다.javax.servlet.* -> jakarta.servlet.*javax.annotation.* -> jakarta.annotation.*javax.transaction.* -> jakarta.transaction.* - Java EE는 엔터프라이즈 애플리케이션 개발을 위한 Ja..

SPRING 2024.12.23

[Spring Boot] 스프링(Spring) vs 스프링 부트(Spring Boot)

1. Spring FrameworkSpring은 Java 애플리케이션 개발을 위한 오픈소스 프레임워크로, 좀 더 가벼운 애플리케이션 개발을 목적으로 설계되었다. Spring 프레임워크를 사용했을 때, 장점은 다음과 같다.유연성 : Spring은 여러 기술과 잘 통합되며, 다양한 아키텍처 패턴을 선택할 수 있다. XML, Java Config, 애노테이션 기반 설정을 모두 지원하여 개발자의 선호에 따라서 유연하게 선택가능하다.DI(Dependency Injection) : 객체 간의 의존성을 외부에서 관리하여 유연하고 테스트 가능한 코드를 작성할 수 있다.AOP(Aspect-Oriented Programming) : 로깅, 트랜잭션 관리 등 공통 관심사를 분리하여 코드의 가독성과 유지보수성을 높인다.다양한..

SPRING 2024.12.23

[JAVA] 예외클래스와 예외처리

1. 예외(Exception)와 예외 클래스예외란? 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점과 에러와 비슷하다. 하지만 예외 처리(Exception Handling)을 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다. 예외에는 두 가지 종류가 있다.일반 예외와 실행 예외일반 예외는 프로그램 실행시 발생할 가능성이 높기 때문에 컴파일 하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다. 실행 예외는 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.  자바에서는 예외를 클..

JAVA 2024.12.08

[JAVA] Heap 메모리 구조와 Garbage Collection

자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리하한다. JVM의 메모리 공간은 크게 Static 영역, Stack영역, Heap 영역으로 구분되는데 Heap영역에 대해서 자세히 알아보도록 하자.1. Heap 영역JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다.참조형 데이터 타입을 갖는다 : 값이 저장되어 있는 곳의 주소값을 저장하는 공간이다.클래스인터페이스배열열거Heap 영역은 Stack 영역과 다르게 보관되는 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.stack은 스레드 갯수마다 각각 생성되지만, heap은 몇개의 스레드가 존재하든 상관없이 단 하나의 Heap 영역만 존재..

JAVA 2024.12.08

[JAVA] 중첩클래스, 중첩인터페이스

1. 중첩 클래스(Nested Class)중첩 클래스는 한 클래스 내부에서 정의한 클래스를 말한다. 중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.인스턴스 멤버 클래스(inner class)static 키워드 없이 중첩 선언된 클래스를 말한다. 인스턴스 멤버 클래스는 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언할 수 없다.class OuterClass { // 인스턴스 멤버 클래스 class InnerClass { InnerClass {} // 생성자 int field1; // 인스턴스 필드 void method1() { // 인스턴스 메소..

JAVA 2024.12.03

[JAVA] 디자인패턴 - 데코레이터 패턴(Decorator Pattern)을 알아보자

1. 데코레이터 패턴(Decorator Pattern)데코레이션 패턴은 구조 패턴 중 하나로, 객체의 동작을 확장할 수 있도록 해주는 패턴이다. 기본 기능을 구현한 후 추가할 수 있는 기능의 종류가 많은 경우, Decorator 클래스로 정의 한 뒤 Decorator 객체를 조합함으로써 추가 기능을 덧붙인다.  데코레이터 패턴을 왜 사용하는가?데코레이터 패턴을 사용하면 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다. 상속보다는 구성(Composition)을 활용하여 객체의 유연성과 재사용성을 높인다.구성(Composition)이란? 객체의 재사용과 확장을 위해 사용하는 설계 기법 중 하나로 클래스간의 "포함(has a ~)" 관계를 표현한다. 객체를 상속하는게 아닌 다른 객체를 멤버 변수로 포..

JAVA 2024.12.03

[JAVA] 디자인패턴 - 전략 패턴(Strategy Pattern)을 알아보자

1. 전략 패턴(Strategy Pattern)전략 패턴은 행위패턴에 속하는 패턴이다. 기능은 같지만 다른 전략을 가진 클래스들을 캡슐화하여 서로 교환이 가능하도록 하는 패턴이다. 어떤 목적을 달성하기 위하여 일을 수행하는 방식인 알고리즘을 여기서 전략이라고 한다.전략 패턴을 왜 사용하는가?전략 패턴을 사용하면 유지보수가 용이하다. 객체들이 공통으로 할 수 있는 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 각각의 클래스에서 행위를 수정하는 것이 아닌 전략을 바꿔주기만 함으로써 행위를 유연하게 확장할 수 있다.public interface Moveable { public void move();}public class Train implements { ..

JAVA 2024.12.02

[JAVA] 오버라이딩 & 오버로딩 (Overriding & Overloading)

1. 오버로딩(Overloading)오버로딩의 정의오버로딩은 사전적으로는 '과적하다'라는 뜻이다. 하나의 메소드 이름으로 여러 기능을 구현하기 때문이다.자바에서의 정의는 한 클래스 내에서 같은 이름의 메서드나 연산자를 서로 다른 매개변수 목록(파라미터 개수, 타입 등)을 사용하여 정의하는 것을 의미한다.오버로딩의 조건메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. '리턴 값만' 다른 것은 오버로딩 할 수 없다. 만약 매개변수의 타입과 개수가 같고 리턴타입이 같은 경우 Java에서 기능에 관련된 영역까지 개입을 하게되므로 컴파일러가 코드를 구분하는데 문제가 생길 수 있기 때문이다.class OverLoading { public void print() { System.out.pri..

JAVA 2024.12.01