Java 18

[Java] Java 11의 주요 특징 정리 및 Java 8과의 차이점 비교

Java 11은 Java 8 이후 LTS(Long-Term Support) 버전으로, 오랜만에 등장한 장기 지원 버전이여서 실무에서도 자주 사용한다. Java 8에서 Java 11로 넘어가며 생긴 주요 변화는 신규 기능 추가뿐 아니라, 기존 모듈의 제거, 표현식의 간결화, 성능 향상 등을 포함한다. 1) Java 11 주요 기능 및 Java 8과의 차이점1-1) var 키워드로 로컬 변수 선언 (Java 10 도입)Java 11에서도 var를 사용하여 지역 변수의 타입을 생략할 수 있다.Java 8에서는 명시적으로 타입을 작성해야 했기 때문에가독성과 유지보수성 측면에서 차이가 있다.// Java 11var name = "ChatGPT";System.out.println(name);// Java 8Stri..

Java/Java 2025.08.07

[Java] Java 8의 주요 특징 정리

Java 8은 자바 언어에 함수형 프로그래밍 개념을 본격적으로 도입한 버전으로, 람다식, Stream API, Optional 클래스 등 코드의 간결성과 안정성을 높이는 다양한 기능들이 추가되었다. 특히 컬렉션 처리와 null 관련 문제 해결에 큰 도움이 되는 기능들이 포함되어 있어, 실무에서도 널리 사용되고 있다. 1) Java 8 주요 기능 목록람다식 (Lambda Expression)Stream APIOptional 클래스인터페이스의 default 및 static 메서드 2) 람다식 (Lambda Expression)2-1) 개요람다식은 익명 함수 형태로 간결한 함수형 코드를 작성할 수 있도록 해준다.익명 내부 클래스의 코드를 줄이고 가독성을 높여준다.2-2) 예시// 기존 방식Runnable r1..

Java/Java 2025.08.06

Spring Boot의 설정 파일 - yml과 properties의 차이

Spring Boot에서는 애플리케이션의 실행 환경에 따라다양한 설정값을 관리할 수 있도록 application.yml 또는 application.properties 파일을 사용한다. 두 형식 모두 설정 기능은 동일하지만, 문법적 구조나 가독성, 유지보수 측면에서 차이가 존재한다. 이번 글에서는 각 파일의 특징과 문법, 예시를 살펴보고, 어떤 상황에서 어떤 설정 파일을 사용하는 것이 더 적합한지 정리해본다. 1) Spring Boot의 설정 파일1-1) 설정 파일의 역할Spring Boot에서는 애플리케이션의 설정값(포트, DB 정보, 로깅 등)을외부 설정 파일에 정의하여 관리할 수 있다.대표적으로 application.properties와 application.yml이 있으며,두 형식 모두 동일한 목적..

[Java] 자바 전역변수, 지역변수, static 변수란?

자바에서 변수는 선언 위치에 따라 전역변수와 지역변수로 나뉘며, static을 사용하면 객체 없이도 공유되는 클래스 변수로 사용할 수 있다.이번 글에서는 전역변수, 지역변수, static 변수에 대해 알아보자. 1) 전역변수1-1) 정의전역변수는 클래스 내부에서 선언된 변수로, 객체 전체에서 사용할 수 있다. 주로 필드(Field)라고 부른다. 1-2) 특징클래스의 모든 메서드에서 접근 가능객체가 생성될 때 메모리에 함께 올라감초기화를 하지 않아도 기본값이 자동으로 설정됨 1-3) 사용예시class Student { String name; // 전역변수 int age; // 전역변수 void printInfo() { System.out.println(name + "..

Java/Java 2025.07.11

[Java] 생성자(Constructor) 기본 개념 정리

자바에서 객체를 생성할 때 호출되는 생성자에 대해 정리하였다.생성자의 기본 개념부터 메서드 호출, 오버로딩, 특징까지 알아보자. 1) 생성자란?생성자는 객체가 생성될 때 자동으로 실행되는 특별한 메서드이다.클래스 이름과 같고, 리턴 타입이 존재하지 않는다.class Student { String name; int age; // 생성자 Student(String inputName, int inputAge) { name = inputName; age = inputAge; }}예를 들어 new Student("민지", 20)을 호출하면 생성자가 실행되며 필드가 초기화된다. 2) 생성자 안에서 메서드 호출생성자 내부에서 메서드를 호출하면 객체 초기화와 동시에 ..

Java/Java 2025.07.09

[Java] XML Parsing 방식(DOM, SAX 방식)

최근에 대용량 데이터 처리에 대한 업무 개선을 위해,외부에서 받아서 처리하는 XML 데이터의 파싱 방식을 변경하는 작업을 진행했다.XML 데이터를 파싱하는 대표적인 방식으로 DOM 방식과 SAX 방식이 있는데,각각의 장단점과 방식을 변경한 이유에 대해 설명해보겠다. 1) XML 파싱(XML Parsing)1-1) XML Parsing? : XML(eXtensible Markup Language)은 데이터를 저장하고 전송하기 위한 표준화된 형식이고, XML 파싱은 이러한 XML 문서를 읽고 그 구조와 내용을 프로그램에서 사용할 수 있는 형태로 변환하는 과정이다.1-2) XML 문서의 구조 : XML 문서의 구조를 아래 예시를 통해 알아보자.XML 문서 예시 귤 과일 ..

Java/Java 2025.04.18

[Spring/MyBatis] 페이징 처리, Pagination 구현하기

API를 개발할 때, 페이징처리는 서버의 부하를 위해 꼭 필요한 기능이다.Spring에서 제공하는 Pageable을 활용하여 페이징 처리(페이지네이션)를 하는 방법에 대해 알아보자. 1) Pagination(페이지네이션): 데이터를 정렬기준, 페이지 크기, 몇 번째 페이지인지를   토대로 정보를 전달해주는 것1-1) Pageable Interface: Spring에서 페이징 처리를 하기 위해서 사용하는 인터페이스이다.객체를 생성할 때는 구현체인 PageRequest 를 사용하는데,PageRequest 생성자를 보면 page, size, sort 가 있다.[ PageRequset.class ]API를 호출할 때, 몇 번째 페이지인지에 대한 정보(page)와한 페이지당 보여줄 데이터의 개수(size)를 함께..

[Spring Data JPA] JPA 기본 Annotation 정리

Spring JPA에서 객체를 entity로 사용하기 위해 @Entity 어노테이션을 사용해야한다.이처럼 JPA를 사용할 때 필요한 Annotation에 대해 몇 가지 알아보자.  아래의 Member Entity를 예시로 들어보자.1) @Entity: entity 어노테이션은 DB 테이블과 1:1로 매칭되는 객체로, entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미한다.따라서 각 레코드를 구분하기 위한 유일한 키값을 가지는데, 이것이 테이블의 PK(Primary Key)와 같은 의미를 가지며, @Id 어노테이션으로 정의한다. 2) @GeneratedValue: PK 자동 생성 전략을 설정하는 어노테이션으로, 4가지가 있다.@GeneratedValue(strategy = {기본키값 생..

[Spring Data JPA] JPQL 사용법

프로젝트를 진행하던 중, 쿼리를 어떻게 작성할지에 대하여 고민하다가 JPA를 사용하게 되었다.JPA는 간결하게 쿼리를 메소드로 호출할 수 있다는 장점이 있는데, 쿼리 작성에 조금 제한적이라는 어려움이 있었다.이를 보완하기 위해 찾아보다가 JPQL라는 것을 접하였고, 이를 활용하여 쿼리를 작성하였다.JPQL가 무엇인지, 사용법에 대해 간단히 알아보자. 1) JPQL란?: JPA는 SQL을 추상화한 JPQL(Java Persistence Query Language)이라는 객체 지향 쿼리 언어를 제공한다.테이블을 대상으로 쿼리를 작성하는 것이 아닌, 엔티티 객체를 대상으로 쿼리를 작성한다.따라서 엔티티를 각각 생성해준 뒤 쿼리를 작성할 수 있다.JPQL은 SQL과 문법이 유사하며, SELECT, FROM, W..

[Java] printStackTrace 취약점

intelliJ 환경에서 Java Spring 개발을 하던 중, e.printStackTrace() 구문을 사용한라인에서 warning 표시가 나오는 것을 보았다.코드를 지우면서 문득 왜 사용을 지양해야하는지 궁금해져서 찾아보게 되었다.  1) printStackTrace란?: printStackTrace() 는 예외발생 당시의 호출스택(Call Stack)에 있었던 메소드의 정보와 예외 메시지를 화면에 출력한다.위의 코드는 실제 printStackTrace() 함수의 내부 구현인데,System.err를 PrintStream으로 사용하고 있다.그리고 이 함수 내부를 타고 가다가 보면 StackTraceElement.of 를 통해 StackElement를 가져온다.이 of 메소드 내부를 또 살펴보게 되면 ..

Java/Java 2025.03.17