[Backend] Lombok @RequiredArgsConstructor의 동작 원리와 치명적인 리스크
·
Backend
오늘은 자바 백엔드 개발의 생산성을 높여주는 필수 도구, Lombok의 @RequiredArgsConstructor에 대해 깊이 있게 살펴보겠습니다.단순히 코드를 줄여주는 역할을 넘어, 내부적으로 어떻게 동작하며 실무에서 어떤 구조적 결함을 야기할 수 있는지 전문가의 시각에서 정리해 보았습니다.1. 내부 동작 원리와 컴파일 타임의 마법Lombok은 런타임이 아닌 컴파일 시점에 개입합니다. @RequiredArgsConstructor가 선언된 클래스를 발견하면, final이 붙은 필드를 식별하여 실제 바이트코드에 생성자를 직접 주입합니다.💡 빌드 후의 변화• 소스 코드(.java)에는 생성자가 없지만,• 컴파일된 파일(.class)에는 물리적인 생성자 코드가 존재하게 됩니다.2. 전문가 토론: 편리함 v..
[Spring Boot] JPA의 ddl-auto 옵션들
·
Backend
1. ddl-auto란? ddl-auto는 Data Definition Language(DDL)의 자동 처리를 의미합니다. 이는 Spring Boot에서 JPA(Java Persistence API) 구현체인 Hibernate를 사용할 때 데이터베이스 스키마(테이블, 컬럼, 제약 조건 등)를 애플리케이션 시작 시점에 자동으로 관리하도록 지시하는 설정 옵션입니다.간단히 말해, 우리가 정의한 JPA 엔티티(Java 클래스)와 실제 데이터베이스의 스키마를 동기화하는 방식을 결정하는 핵심 설정입니다.이 옵션을 통해 개발자는 매번 수동으로 SQL DDL 문을 작성할 필요 없이 편리하게 스키마를 관리할 수 있지만, 운영 환경에서는 매우 신중하게 사용해야 합니다.(가능한 none 또는 validate 추천)2. 설정..
[Java] Record 클래스 란?
·
Backend/Java
Intro자바를 배울 당시 대부분 강의들이 Java 8, 11 버전으로 되어 있어서 데이터를 이동시킬 때 RequestDto와 ResponseDto 클래스를 만들어 사용하는 방법들을 배웠었는데, 2년 사이에 자바 버전 점유율이 많이 바껴서 알아가며 작업할 겸 Java 17로 하던 중 Record 클래스를 알고 난 뒤 부터 굳이 DTO 클래스를 만들어서 @Getter, @Setter, @Allargument 등 을 추가할 필요없이 Record 클래스로 만들어서 관리를 하게 되었는데 'Record의 기능이 이게 끝인가?' 라는 생각에 알아볼려고 한다.Record 클래스란?등장 배경Java 14에서 preview 기능으로 시작하여 Java 16때 정식으로 도입된 Record는 데이터 운반 클래스를 보다 명확하..
[Java] Scanner와 BufferedReader
·
Backend/Java
1. Scanner 클래스:Scanner 클래스는 간단한 텍스트 스캐닝을 위한 메소드를 제공이 클래스는 공백을 기본 구분자로 사용하여 입력된 토큰을 분리Scanner 클래스는 다양한 데이터 타입을 처리할 수 있습니다. 예를 들어, nextInt(), nextDouble(), nextLong() 등의 메소드를 제공하여 특정 타입의 데이터를 직접 읽어들일 수 있습니다.하지만, Scanner 클래스는 내부적으로 정규 표현식을 사용하기 때문에, 대용량 데이터를 처리하는데는 비효율적일 수 있습니다.2. BufferedReader 클래스:BufferedReader 클래스는 문자 입력 스트림에서 문자를 버퍼링함으로써 문자, 배열, 라인을 효율적으로 읽을 수 있도록 합니다.이 클래스는 기본적으로 문자열 데이터만 읽을 ..
[Java] Scanner 클래스 next() 와 nextLine()
·
Backend/Java
Java에서 Scanner 클래스는 'java.util' 패키지의 일부이며 콘솔, 파일 또는 문자열과 같은 다양한 소스에서 입력을 얻는 데 사용되며, 기본 데이터 유형과 문자열을 구문 분석하고 처리하는 방법을 제공합니다.Java에서 Scanner 클래스의 메소드는 아래와 같은 종류들을 주로 사용하고있는데, 3번부터 8번까지의 메소드는 next() 메소드와 함께 사용하여 입력된 문자열을 해당 타입으로 변환하는 역할을 합니다.예를 들어, nextInt() 메소드는 next() 메소드로 입력된 문자열을 int로 변환하여 값을 반환합니다. 이와 같은 방식으로 다양한 데이터 유형을 처리할 수 있습니다.(char 타입은 별도의 메소드가 없으므로, next() 메소드로 문자열을 입력받고,charAt() 메소드를 사용..
[Java] 클래스, 추상클래스, 인터페이스
·
Backend/Java
No.질문 리스트1.클래스(Class)란 무엇인가?2.객체(Object)란 무엇인가?3.인스턴스(Instance)란 무엇인가?4.추상클래스와 인터페이스 개념 및 공통점과 차이점 비교5.인터페이스를 이용한 다형성을 예시클래스(Class)란 무엇인가?클래스를 프로그래밍적 언어로 표현하자면 어떠한 객체의 변수 , 메소드의 집합이라고 표현할수있으며, 현실세계에 빗대어 말하자면 동일한 속성과 행위를 수행하는 객체의 집합객체(Object)란 무엇인가?클래스를 통해서 정의된 내용으로 실제로 데이터가 들어있는 독립적인 단위인스턴스(Instance)란 무엇인가?실제 메모리에 할당되어있는 것추상클래스와 인터페이스 개념 및 공통점과 차이점 비교 추상클래스인터페이스개요하나 이상의 추상 메소드를 포함한 클래스모든 메소드가 추상..
[Java] 반복문 for문을 사용한 별 피라미드 찍기 ver.2
·
Backend/Java
Intro프로그래밍을 배우기 시작하면 조건문과 반복문을 배우게 되는데, 반복문 입문 문제 중에서 최종 난이도는 별 찍기라고 생각힌다.별 찍기란 빈칸을 몇칸을 어떻게 할지 뛰우느냐에 따라서 정삼각형, 역삼각형, 피라미드, 다이아몬드 모양으로 출력할 수 있는데 처음 프로그래밍을 배우는 입장에서는 생각보다 어려워하는 사람이 많은거 같다.기본기본 삼각형삼각형 패턴 중 가장 간단한 형태로, 첫 줄에는 별이 하나, 두 번째 줄에는 별이 두 개가 출력됩니다.public static void printTriangle(int rows) { for (int i = 1; i 역삼각형역삼각형 패턴은 기본 삼각형의 반대 형태로, 첫 줄에는 별이 n개, 마지막 줄에는 별이 하나 출력됩니다.public static void ..
[Java] 약수 알고리즘 최적화 하기
·
Backend/Java
조별 스터디에서 백준 문제를 풀고 [Bronze III] 약수 구하기 - 2501 문제를 코드리뷰를 하는 중에 숙제를 받게되었다.문제 내용은 정수 N의 약수를 구한 뒤 M번째 수를 출력하는 약수구하는 문제이다.단순하게 N만큼 반복문을 돌려 나머지가 0이면 배열에 저장하는 식으로 아래와 같이 코드를 구현하였다. int N = {구할려고하는 약수}; List divisors = new ArrayList(); for (int i = 1; i 강사님꼐서 약수를 구할때 Math.sqrt()와 sort(Comparator.naturalOrder()) 이 두가지를 사용하면 더 빠르게 약수들을 구할 수 있다고 말씀하셔서 생각해보니 나머지가 0일때 몫또한 약수라는걸 깨닫게 되어 다시 코드를 작성하였다. int N = {..