본문으로 건너뛰기
Advertisement

9.3 Math와 Wrapper 클래스 (Math & Wrapper Classes)

java.lang 패키지에는 코딩 시 수식을 다루거나 가벼운 데이터 형변환을 도와주는 든든한 조력자들이 있습니다. 그중에서도 가장 널리 쓰이는 Math 클래스와 래퍼(Wrapper) 클래스에 대해 알아보겠습니다.

1. Math 클래스

수학 계산에 유용한 메서드들과 상수들을 꽉꽉 채워둔 클래스입니다.

Math 클래스의 가장 큰 특징은 모든 멤버가 static으로 선언되어 있다 는 점입니다. 즉, "new Math()"처럼 굳이 객체를 생성할 필요 없이, 언제 어디서든 편하게 Math.메서드이름()으로 바로 꺼내 쓸 수 있습니다.

유용한 Math 메서드들

  • Math.round(): 소수점 첫째 자리에서 반올림하여 정수(long)로 반환합니다.
  • Math.ceil() / Math.floor(): 주어진 숫자를 올림 / 버림하여 실수형(double)으로 반환합니다.
  • Math.max(a, b) / Math.min(a, b): 두 개의 값을 비교하여 그중 더 큰 값 / 더 작은 값을 반환합니다.
  • Math.random(): 0.0 이상 1.0 미만의 무작위 실수(난수) 하나를 생성해 줍니다.
    • (참고: 주사위나 제비뽑기처럼 정수로 된 랜덤 값을 원한다면 (int)(Math.random() * 범위) + 시작값 형태로 식을 만들어 곱하고 잘라내어 사용합니다.)
public class MathExample {
public static void main(String[] args) {
System.out.println("반올림: " + Math.round(3.1415)); // 3
System.out.println("올림: " + Math.ceil(3.1415)); // 4.0

System.out.println("최댓값: " + Math.max(100, 200)); // 200

// 1부터 6까지 무작위 주사위 굴리기
int dice = (int)(Math.random() * 6) + 1;
System.out.println("주사위 눈: " + dice);
}
}

2. 래퍼 클래스 (Wrapper Class)

자바에는 객체가 아닌 기본 자료형(Primitive Type: int, char, double, boolean 등) 8가지가 존재합니다. 가볍고 빠르기 때문에 많이 쓰이지만, 객체지향 프로그래밍을 하다 보면 이 단순한 숫자나 문자도 마치 객체(Object)처럼 다루어야 할 때 가 기필코 옵니다. (예: ArrayList 같은 컬렉션이나 제네릭스에서는 객체만 저장할 수 있습니다.)

이럴 때 기본형 변수를 살포시 객체의 포장지로 감싸주는 클래스가 바로 래퍼(Wrapper) 클래스 입니다.

클래스 매칭표

기본적으로 맨 앞글자만 대문자로 바꾸면 되지만, intchar는 이름이 조금 깁니다.

  • byteByte
  • shortShort
  • intInteger
  • longLong
  • floatFloat
  • doubleDouble
  • charCharacter
  • booleanBoolean

박싱과 언박싱 (Boxing & Unboxing)

기본 자료형 ➔ 래퍼 객체로 포장하는 것을 박싱(Boxing), 래퍼 객체 ➔ 기본 자료형으로 포장을 뜯는 것을 ** 언박싱(Unboxing)**이라고 부릅니다.

JDK 1.5부터는 이 포장과 뜯는 과정을 자바 컴파일러가 알아서 자동으로 처리해 주는 오토박싱(Auto-boxing)오토언박싱(Auto-unboxing) 기능이 생겼습니다. 그래서 사실상 객체와 숫자를 마음대로 섞어 써도 컴퓨터가 불만 없이 계산해 줍니다!

public class WrapperExample {
public static void main(String[] args) {
// [과거 방식] 직접 "수동" 박싱
Integer num1 = new Integer(10); // 취소선 쫙! (더 이상 권장되지 않음)

// [권장 방식] 자동으로 10이라는 숫자가 포장지로 싸여 객체가 됩니다. (오토박싱)
Integer num2 = 10;

// [오토언박싱] Integer 객체와 기본형 int를 자연스럽게 섞어서 더해도 오류가 나지 않습니다.
int total = num2 + 20;
System.out.println("합계: " + total); // 30
}
}

래퍼 클래스의 진짜 무기 (문자열 변환)

래퍼 클래스를 쓰는 가장 빈번하고 압도적인 이유는 단연코 "글자를 숫자로(문자열 파싱)" 바꾸기 위해서입니다. 사용자로부터 웹사이트 등에서 값을 입력받으면 자바는 무조건 "텍스트" 형태로 받아들이기 때문에, 이를 진짜 연산용 숫자로 바꿔주는 마법의 주문이 필요합니다.

public class ParsingExample {
public static void main(String[] args) {
String str = "100";
String strDouble = "3.14";

// 문자열 "100"을 진짜 숫자 100으로!
int a = Integer.parseInt(str);

// 문자열 "3.14"를 진짜 실수 3.14로!
double b = Double.parseDouble(strDouble);

System.out.println(a + b); // 103.14
}
}

이처럼 java.lang 패키지에는 수많은 핵심 보물들이 들어있습니다. 우리가 매번 즐겨 쓰는 System (예: System.out.println()) 클래스 최상단에 숨어있는 마법의 꾸러미입니다.

이상으로 자바 언어의 가장 핵심이 되는 도구 상자에 대한 기초 탐험을 마치겠습니다. 다음 장에서는 이만큼 중요한 날짜와 시간(Date & Time)을 제어하는 강력한 패키지에 대해 알아보겠습니다!

Advertisement