2026/06/08 3

[Troubleshooting] 자바 제네릭 T 타입으로 사칙연산이 불가능한 이유

문제 상황계산기 프로젝트를 진행하며 정수뿐만 아니라 실수도 연산할 수 있도록 기능을 확장해야 했다.요구사항에서는 단순히 int를 double로 변경하는 것이 아니라, 제네릭을 활용하여 여러 숫자 타입을 받을 수 있도록 구현할 것을 요구했기 때문에 다음과 같이 ArithmeticCalculator를 제네릭 클래스로 변경하였다.public class ArithmeticCalculator {}그리고 계산 메서드를 구현하려고 했다.public T calculate(T num1, T num2) { return num1 + num2;}하지만 컴파일 오류가 발생하였다.원인 분석처음에는 제네릭으로 선언했기 때문에 Integer, Double 등 다양한 숫자 타입이 모두 연산 가능할 것이라고 생각했다.하지만 자바의..

TIL 2026.06.08

[TIL] 자바 catch문에는 왜 Exception 타입만 들어갈 수 있을까?

자바에서 예외 처리를 처음 배우면 다음과 같은 코드를 자주 접하게 된다.try { int result = 10 / 0;} catch (ArithmeticException e) { System.out.println(e.getMessage());}그런데 문득 이런 의문이 들었다.catch 괄호 안에는 항상 Exception 클래스만 들어갈 수 있는 걸까? int나 String은 왜 사용할 수 없을까?catch의 역할try 블록 내부에서 예외가 발생하면 JVM은 해당 예외에 대한 객체를 생성한다.예를 들어 아래 코드를 실행하면int result = 10 / 0;실제로는 ArithmeticException 객체가 생성된다.개념적으로는 다음과 비슷하다.ArithmeticException ex = ..

TIL 2026.06.08

chapter 3) 자바 연산자 정리: 정수 나눗셈, 오버플로우, 형변환 주의점

📍 정수 나눗셈에서 소수점을 얻고 싶다면? 자바에서 10 / 4는 두 피연산자가 모두 정수(int)이므로 결과도 정수로 계산되어 2가 출력된다.System.out.println(10 / 4); // 2소수점까지 포함된 결과를 얻고 싶다면 한쪽 이상을 실수형으로 변환해야 한다.System.out.println((double) 10 / 4); // 2.5System.out.println(10 / 4.0); // 2.5연산에 실수형이 포함되면 자바는 나머지 피연산자도 실수형으로 변환하여 계산하므로 2.5라는 결과를 얻을 수 있다.📍 오버플로우가 발생한 후에 long에 저장해도 소용없는 이유 long wrong = 1000000 * 1000000; // int * int → int 연산l..