Java 57

java: incompatible types: T cannot be converted to capture#1 of ?

문제 상황enum은 제네릭으로 만들 수 없음 enum Operator {}불가능private final Operate op 불가능하지만 op 는 값이 타입이 정해지지 않은, 알 수 없는 타입때문에 와일트 카드(?)를 사용했으나, T를 ?에 넣을 수 없음 → 타입 불일치if (a instanceof Integer) 조건문을 사용해도 해결되지 않음enum Operator { ADD('+', (a, b) -> a.doubleValue() + b.doubleValue()), ... private final Operate op; Operator(char symbol, Operate op){ this.symbol = symbol; this.op = op;..

어노테이션(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

Optional 제대로 사용하기

Java의 Optional은 NPE(NullPointerException)를 방지하고자 등장한 도구이다.하지만 잘못 사용하면 오히려 코드가 더 복잡해지고, 불필요한 객체 생성으로 인해 성능저하가 발생할 수 있다.수정 전 코드Java 에 익숙하지 않아서, "null이 반환될 수도 있는 경우라면 Optional을 써야 한다" 라고 생각했다.Optional.empty() 를 반환하고, 호출부에서 isParent() 등으로 체크할 수 있으니 더 안전한 코드라고 생각한 것이다.public Optional getData() { if (/* 데이터가 있음 */) { return Optional.of(array); } else { return Optional.empty(); }..

유효성 검사는 어디에서 해야 될까?

계산기 과제를 진행하던 중, 생각하게 된 주제이다. level1: 클래스 없이 계산기 구현level2: 클래스를 활용한 계산기 구현 - Calculator 클래스 분리 '내일배움캠프(Spring 7기)/CH 2 계산기 과제' 카테고리의 글 목록gajicoding 님의 블로그 입니다.gajicoding.tistory.com 두 상황의 차이점을 잘 비교해보자Level 1을 구현 후 피드백 받은 코드이다. 피드백 전switch 문 내부에서 예외 발생실행 전 상태로 충분히 판단 가능한 예외를 굳이 실행에 맡김 (늦은 판단)try { // Scanner로 num1, num2, symbol을 입력받은 후 result = switch (symbol) { case '+' -> num1 ..

유틸리티 클래스 (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

반복문 안에서 InputMismatchException 예외 발생 시 무한 루프 발생

while문 안에서 Scanner 입력 오류로 안해 무한 루프가 발생했다... 기존 코드InputMismatchException 발생되면, catch (Exception e) 에서 잡힌다.하지만, 버퍼가 비워지지 않아 continue -> InputMismatchException -> continue -> ... 무한 굴레에 빠지게 되었다.while(true){ try { num1 = sc.nextInt(); // 문자열 입력 시 InputMismatchException 발생 ! num2 = sc.nextInt(); sc.nextLine(); // 버퍼 비우기 ... } catch (Exception e) { System.out.pr..

[📙 Java 문법 종합반] 3-7. 쓰레드(Thread)

📙 목차쓰레드(Thread)란?싱글 쓰레드(Single Thread)멀티 쓰레드(Multi-Thread)와 쓰레드 구현join() - 특정 쓰레드가 끝날 때까지 기다리기Runnable 인터페이스 활용 (권장)실습 과제🧡 학습 목표쓰레드가 무엇인지 학습한다.1. 쓰레드(Thread)란?프로그램 내에서 독립적으로 실행되는 하나의 작업 단위싱글 쓰레드 는 한 번에 하나의 작업만 처리하지만 멀티쓰레드는 여러 작업을 동시에 처리할 수 있다.멀티 쓰레드를 활용하면 여러 작업을 병렬로 수행할 수 있어 처리 성능을 향상시킬 수 있다.2. 싱글 쓰레드(Single Thread)한 번에 하나의 작업만 처리여러 개의 작업을 순차적으로 처리한다.main() 메서드는 프로그램 시작과 동시에 생성되는 하나의 쓰레드이다.pub..

Java/강의 2025.04.17

[📙 Java 문법 종합반] 3-6. 스트림(Stream)

📙 목차스트림(stream) 이란?for vs 스트림스트림 살펴보기 (선언형 스타일)스트림과 람다식 활용스트림 중간연산과 함께 사용하기실습 과제🧡 학습 목표스트림이 무엇인지 학습한다.1. 스트림(stream) 이란?데이터를 효율적으로 처리할 수 있는 흐름선언형 스타일로 가독성이 굉장히 뛰어나다.데이터 준비 → 중간 연산 → 최종 연산 순으로 처리된다.스트림은 컬렉션(List, Set 등)과 함께 자주 활용된다.2. for 문 vs 스트림for 문public class Main { public static void main(String[] args) { List arrayList = new ArrayList(List.of(1, 2, 3, 4, 5)); // for 명령형..

Java/강의 2025.04.17