Java/문법 10

생성자 vs 정적 팩토리 메서드 vs 빌더 패턴

Java 에서 객체를 생성하는 방법생성자 (Constructor)정적 팩토리 메서드 (Static Factory Method)빌더 패턴 (Builder Pattern)각각의 특징과 장단점을 살펴보자 !1. 생성자 (Constructor)특징:객체를 생성하는 기본적인 방식.필수 파라미터를 직접 전달하여 객체를 만든다.new 키워드를 사용하여 객체를 생성한다.장점:간단하고 직관적이다.특별한 로직 없이 기본적인 객체 생성이 필요할 때 유용하다.단점:파라미터가 많아지면 가독성이 떨어지고, 순서에 의존하게 된다.선택적 필드를 처리하기 어려움.public class User { private String name; private int age; public User(String name, int a..

Java/문법 2025.05.09

빌더 패턴 (Builder Pattern)

Java에서 객체를 생성할 때 생성자나 정적 팩토리 메서드를 많이 사용한다.하지만 필드 수가 많고 선택적으로 값을 지정해야 하는 상황에서는 Builder 패턴이 훨씬 더 유연하고 명확한 해법이 된다.빌더 패턴이란?객체 생성의 복잡성을 줄이고, 가독성과 유지보수성을 높이기 위한 설계 패턴필드가 많은 객체를 가독성 있게 생성할 수 있다.생성자처럼 순서에 의존하지 않으며, 필요한 필드만 선택적으로 설정 가능하다.기본 문법 (직접 구현)public class User { private final String username; private final String email; private final int age; private User(Builder builder) { thi..

Java/문법 2025.05.09

가변 리스트 vs 불변 리스트

가변 리스트ArrayList, LinkedList와 같은 클래스를 사용하여 가변 리스트를 선언할 수 있다.List mutableList = new ArrayList();mutableList.add("Item 1");mutableList.add("Item 2"); 가변 리스트 특징가변성(Mutable): 리스트의 내용을 변경할 수 있다.항목을 추가하거나 삭제할 수 있다.동적 크기 조정: 리스트의 크기가 필요에 따라 자동으로 확장된다. 가변 리스트 장단점장점유연성: 리스트의 내용을 쉽게 수정할 수 있기 때문에 데이터의 변화가 잦은 경우 유용하다.성능: 데이터를 자주 수정하는 경우 성능이 더 뛰어난 경우가 많다.단점데이터 안전성 부족: 가변 리스트는 여러 스레드에서 동시에 접근할 때 데이터 무결성 문제가 발생..

Java/문법 2025.04.29

Map - compute(), computeIfAbsent(), computeIfPresent()

키의 존재 여부에 따라 값을 계산하고, Map을 자동으로 갱신해주는 메서드들compute()computeIfAbsent()computeIfPresent() * Java 8부터 Map 인터페이스에 추가되었다.기존 방식if (map.containsKey(key)) { map.put(key, map.get(key) + 1);} else { map.put(key, 1);}compute() - 키가 있든 없든, 값을 저장지정한 키에 대해 값을 계산해서 저장한다.키가 이미 존재하면 그 값을 기반으로 새 값을 계산한다.키가 없어도 계산 함수는 실행된다.계산 결과가 null이면 해당 키는 Map에서 삭제된다.V compute(K key, BiFunction remappingFunction)Map map = ..

Java/문법 2025.04.29

가변 인자 (...)

가변 인자 (Varargs, Variable Argument ) 란?메서드를 호출할 때 인자의 개수를 유동적으로 받을 수 있도록 해주는 Java 문법가변 인자를 사용하면 하나의 인자로 여러 개의 인자를 받을 수 있다.public void printNames(String... names) { for (String name : names) { System.out.println(name); }}print(); // 아무 것도 출력 안 됨print("Hello"); // Helloprint("Hello", "World", "Java"); // Hello / World / Java..

Java/문법 2025.04.29

String.split() 문자열 자르기, 나누기

문자열을 나누는 대표적인 방법 String.split() 에 대해 알아보자기본 문법regex: 문자열을 나눌 기준이 되는 정규 표현식limit: 결과 배열의 길이 제한과 빈 문자열 포함 여부를 제어String[] split(String regex)String[] split(String regex, int limit)split(String regex)문자열을 정규 표현식(regex) 을 기준으로 나누어 배열로 반환한다.구분자가 연속으로 나타날 경우, 빈 문자열도 배열에 포함된다.정규 표현식에서 + 사용하면, 빈 문자열을 포함하지 않을 수 있다.filter() 를 사용하여 빈 문자열을 제거하는 방법도 있다.단, 문자열 끝에 있는 빈 문자열 ""은 제외된다.내부적으로 split(regex, 0)이 호출되기 때..

Java/문법 2025.04.22

어노테이션(Annotation)

어노테이션이란? @를 사용하여 작성 코드에 대한 부가적인 정보를 제공해주는 메타데이터JVM이나 컴파일러, 프레임워크에게 “이 코드는 이런 의미를 갖고 있어요” 라고 알려주는 역할을 한다.// 컴파일러에게 메서드를 오버라이딩하는 것을 알림@Overridepublic String toString() { return "Hello!";}어노테이션이 사용되는 경우컴파일러에게 힌트를 주기 위해런타임 시 리플렉션(reflection)으로 정보 추출프레임워크(@Autowired, @RequestMapping 등)에서 설정이나 행위 지정자주 쓰이는 어노테이션 @Override부모 클래스의 메서드를 정확히 재정의했는지 확인한다.오타나 시그니처 오류 방지@Overridepublic String toString() {..

Java/문법 2025.04.21

Enum 열거형 타입

enum이란?enumeration(열거형)의 줄임말로, 고정된 상수 집합을 표현하기 위한 특수한 클래스이다.내부적으로 각각의 상수가 public static final 객체로 생성된다.예제enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}// Day.MONDAY로 사용 심화 예제속성 지정상수에 할당할 값은 private final 로 선언사용자 정의 생성자 선언생성자 호출로 enum 상수 정의enum Day { // 생성자 호출 MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7); private fina..

Java/문법 2025.04.21

유틸리티 클래스 (Utility Class)

유틸리티 클래스란?공통적으로 자주 쓰이는 기능(로직)을 모아 놓은 클래스이다.보통 static 메서드로만 구성되어 있고, 객체를 만들 필요 없이 바로 사용 가능하다.유틸 클래스의 특징인스턴스를 만들지 못하게 private 생성자를 사용한다.모든 메서드와 변수는 static 이다.반복되는 코드 로직을 모아서 관리한다.유틸 클래스의 장점중복 제거 가능가독성 향상재사용성사용 예제import java.util.Arrays;public class ValidationUtils { // 생성자 private → 인스턴스화 방지 private ValidationUtils() {} // 상수 선언 public static final String ERROR_NEGATIVE_VALUE = "음수 값이 ..

Java/문법 2025.04.18

switch 표현식 (Switch Expression)

switch 표현식Java 12 에서 처음 소개 되었고,Java 14 에서 정식 릴리즈 되었다고 한다.기존 switch 구문의 문제점break를 깜빡하면 fall-through 오류 발생하한다.값을 직접 반환할 수 없다.코드가 장황해지기 쉽다.int result;switch (op) { case '+': result = a + b; break; case '-': result = a - b; break; default: result = 0;}switch 표현식의 특징 (Java 14+)switch 자체가 값을 반환하므로 변수에 바로 대입 가능하다.콜론(:) 대신 화살표(->) 사용yield 키워드 사용하나의 문장(또는 표현식)이..

Java/문법 2025.04.18