java.lang 패키지
1. java.lang 패키지
java.lang 패키지는 자바에서 가장 기본적이고 필수적인 클래스들을 포함하는 패키지로, 자바 프로그램에서 자동으로 import되기 때문에 별도로 import 문 없이도 사용할 수 있습니다. 이 패키지에는 문자열을 처리하는 String, 수학 계산을 위한 Math, 객체의 최상위 클래스인 Object, 쓰레드 관련 클래스인 Thread, 예외 처리에 사용되는 Throwable 계열 클래스 등 자바 프로그래밍의 핵심적인 기능을 담당하는 클래스들이 포함되어 있습니다. 자바에서 거의 모든 프로그램이 이 패키지의 클래스를 사용하므로, java.lang은 자바의 핵심 인프라라고 할 수 있습니다.
1. 주요 클래스
Object | 자바의 모든 클래스의 최상위 부모 클래스 |
String | 문자열을 다루는 불변 클래스 |
StringBuilder, StringBuffer | 가변 문자열 처리 클래스 |
Math | 수학 관련 함수 (제곱근, 삼각함수, 난수 등) |
Integer, Double 등 | 기본형을 객체로 다루는 래퍼 클래스 |
System | 표준 입출력, 종료 등 시스템 관련 기능 |
Thread, Runnable | 멀티스레드 프로그래밍을 위한 클래스 |
Throwable, Exception, Error | 예외 및 오류 처리 클래스 |
2. StringBuilder와 StringBuffer
- 가변(mutable) 문자열을 다룰 수 있는 클래스
- 문자열을 반복해서 조작할 때 메모리 낭비를 줄이고 성능 향상에 도움
- 주로 문자열 덧붙이기, 삽입, 삭제, 반전 등을 효율적으로 처리
주요 메서드
.append(String) | 문자열 추가 |
.insert(int, String) | 특정 위치에 문자열 삽입 |
.delete(int, int) | 문자열 일부 삭제 |
.reverse() | 문자열 뒤집기 |
.toString() | 최종 문자열로 변환 |
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
sb.insert(6, "Java "); // 6번째 위치에 "Java " 삽입
sb.delete(0, 6); // "Hello " 삭제
sb.reverse(); // 문자열 뒤집기
System.out.println("최종 문자열: " + sb.toString()); // 출력: !dlroW avaJ
}
}
public class StringBufferExample {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
sb.append(" Thread");
sb.insert(5, " Safe");
System.out.println(sb.toString()); // Hello Safe Thread
}
}
public class CompareString {
public static void main(String[] args) {
long start, end;
// String (느림)
start = System.currentTimeMillis();
String str = "";
for (int i = 0; i < 10000; i++) {
str += "a";
}
end = System.currentTimeMillis();
System.out.println("String 시간: " + (end - start) + "ms");
// StringBuilder (빠름)
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append("a");
}
end = System.currentTimeMillis();
System.out.println("StringBuilder 시간: " + (end - start) + "ms");
}
}
3. Math 클래스
java.lang.Math 클래스는 자바에서 수학 계산을 도와주는 유틸리티 클래스입니다. 이 클래스는 정적(static) 메서드로만 구성되어 있어서, 객체를 생성하지 않고도 바로 사용할 수 있습니다.
주요 기능
절댓값 | abs(x) | 절댓값 반환 |
최댓값/최솟값 | max(a, b), min(a, b) | 둘 중 큰 값/작은 값 반환 |
제곱/제곱근 | pow(a, b), sqrt(x) | 거듭제곱 / 제곱근 |
반올림 | round(x) | 소수 첫째 자리에서 반올림 |
올림/버림 | ceil(x), floor(x) | 올림, 버림 반환 |
삼각 함수 | sin(x), cos(x), tan(x) | 라디안 기준의 삼각함수 |
로그 | log(x) | 자연로그 (밑 e) |
지수 | exp(x) | e^x 반환 |
난수 | random() | 0.0 이상 1.0 미만의 랜덤 실수 반환 |
public class MathExample1 {
public static void main(String[] args) {
System.out.println("절댓값: " + Math.abs(-10)); // 10
System.out.println("최댓값: " + Math.max(7, 3)); // 7
System.out.println("최솟값: " + Math.min(7, 3)); // 3
}
}
public class MathExample2 {
public static void main(String[] args) {
System.out.println("2의 3제곱: " + Math.pow(2, 3)); // 8.0
System.out.println("16의 제곱근: " + Math.sqrt(16)); // 4.0
}
}
public class MathExample3 {
public static void main(String[] args) {
double num = 3.65;
System.out.println("반올림: " + Math.round(num)); // 4
System.out.println("올림: " + Math.ceil(num)); // 4.0
System.out.println("버림: " + Math.floor(num)); // 3.0
}
}
public class MathExample4 {
public static void main(String[] args) {
// 0.0 이상 1.0 미만의 난수
double rand = Math.random();
System.out.println("난수: " + rand);
// 1부터 10 사이의 정수 난수
int randomInt = (int)(Math.random() * 10) + 1;
System.out.println("1~10 정수 난수: " + randomInt);
}
}
2. Wrapper 클래스
자바의 Wrapper 클래스(래퍼 클래스)는 int, double, char 같은 기본 자료형(primitive type)을 객체처럼 다룰 수 있도록 감싸주는 클래스입니다. 예를 들어, int는 Integer, double은 Double, char는 Character라는 클래스가 각각 존재하며, 이들을 통해 기본형을 객체로 변환하거나, 문자열을 숫자로 바꾸는 등의 유용한 기능을 사용할 수 있습니다. Wrapper 클래스는 컬렉션 클래스(List, Set 등)에 기본형 데이터를 저장할 때, 형변환 및 null 처리, 기본형과 객체 간 자동 변환(Auto Boxing/Unboxing) 등에 자주 사용됩니다.
1. 기본형과 대응되는 래퍼 클래스
2. 박싱과 언박싱
박싱(Boxing)
기본 자료형(primitive type)을 해당 래퍼 클래스 객체로 변환하는 과정을 말합니다. 예를 들어 int → Integer, double → Double과 같이 기본형을 객체로 감싸는 것입니다.
int num = 100;
Integer boxed = Integer.valueOf(num); // 박싱
public class BoxingExample {
public static void main(String[] args) {
int num = 100;
Integer boxed = Integer.valueOf(num); // 수동 박싱
System.out.println("박싱된 객체: " + boxed);
}
}
언박싱(Unboxing)
래퍼 클래스 객체에서 기본 자료형 값을 꺼내는 과정을 말합니다. 즉, Integer → int, Double → double과 같이 객체에서 원래 값(기본형)을 추출합니다.
Integer boxed = new Integer(200);
int num = boxed.intValue(); // 언박싱
public class UnboxingExample {
public static void main(String[] args) {
Integer boxed = new Integer(200);
int num = boxed.intValue(); // 수동 언박싱
System.out.println("기본형으로 변환: " + num);
}
}
3. 오토박싱과 오토언박싱
오토박싱(Auto-boxing)
기본형을 자동으로 래퍼 클래스로 변환해주는 기능입니다. 개발자가 valueOf()를 직접 호출하지 않아도 컴파일러가 자동으로 박싱을 처리해줍니다.
Integer a = 10; // 컴파일러가 Integer.valueOf(10) 으로 자동 변환
오토언박싱(Auto-unboxing)
래퍼 클래스 객체를 자동으로 기본형으로 변환해주는 기능입니다. 개발자가 intValue(), doubleValue()를 호출하지 않아도 자동으로 값을 꺼내줍니다.
Integer a = 10; // 오토박싱
int b = a + 5; // 오토언박싱: a.intValue() + 5
래퍼 객체가 null일 때 오토언박싱을 하면 예외가 발생하므로 주의해야 합니다.
Integer a = null;
int b = a; // NullPointerException 발생!
public class AutoBoxingExample {
public static void main(String[] args) {
Integer a = 10; // 자동 박싱 (int → Integer)
int b = a + 5; // 자동 언박싱 (Integer → int)
System.out.println("결과: " + b);
}
}