
자바에서 가장 기본적이고 필수적인 클래스들을 포함하는 패키지.
자바 프로그램에서 자동으로 import 된다.
Object 자바의 모든 클래스의 최상위 부모 클래스
String 문자열을 다루는 불변 클래스
StringBuilder, StringBuffer 가변 문자열 처리 클래스
Math 수학 관련 함수 (제곱근, 삼각함수, 난수 등)
Integer, Double 등 기본형을 객체로 다루는 래퍼 클래스
System 표준 입출력, 종료 등 시스템 관련 기능
Thread, Runnable 멀티스레드 프로그래밍을 위한 클래스
Throwable, Exception, Error 예외 및 오류 처리 클래스
문자열을 효율적으로 수정(추가, 삭제, 삽입 등)하기 위한 클래스
주요 메서드
.append(String) 문자열 추가
.insert(int, String) 특정 위치에 문자열 삽입
.delete(int, int) 문자열 일부 삭제
.reverse() 문자열 뒤집기
.toString() 최종 문자열로 변환
| 항목 | StringBuilder | StringBuffer |
|---|---|---|
| 동기화(Synchronized) | ❌ 비동기 (스레드 안전하지 않음) | ✅ 동기화됨 (스레드 안전) |
| 성능 | 빠름 (단일 스레드 환경에서 유리) | 상대적으로 느림 (멀티 스레드 환경에서 유리) |
| 사용 시기 | 멀티 스레드가 필요 없는 경우 | 멀티 스레드 환경에서 동시에 접근할 때 |
package lesson06;
public class Ex08_Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
sb.insert(6,"Java ");
sb.delete(0, 6);
sb.reverse();
System.out.println(sb.toString());
StringBuffer sb2 = new StringBuffer("Hello");
sb2.append(" Thread");
sb2.insert(5, " Safe");
System.out.println(sb2.toString());
}
}
package lesson06;
public class Ex09_Main {
public static void main(String[] args) {
long start, end;
start = System.currentTimeMillis();
String str = "";
for (int i = 0; i<10000; i++){
str += "a";
}
end = System.currentTimeMillis();
System.out.println("String 시간 : " + (end - start) + "ms");
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");
}
}
java.lang.Math 클래스: 자바에서 수학 계산을 도와주는 유틸리티 클래스
객체를 생성하지 않고도 바로 사용할 수 있다.
주요 기능
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 미만의 랜덤 실수 반환int, double, char 같은 기본 자료형(primitive type)을 객체처럼 다룰 수 있도록 감싸주는 클래스이다.
| 기본형 (Primitive) | 래퍼 클래스 (Wrapper Class) |
|---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
박싱(Boxing)
기본 자료형(primitive type)을 해당 래퍼 클래스 객체로 변환하는 과정
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 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);
}
}
오토박싱(Auto-boxing)
기본형을 자동으로 래퍼 클래스로 변환해주는 기능
Integer a = 10; // 컴파일러가 Integer.valueOf(10) 으로 자동 변환
오토언박싱(Auto-unboxing)
래퍼 클래스 객체를 자동으로 기본형으로 변환해주는 기능
Integer a = 10; // 오토박싱
int b = a + 5; // 오토언박싱: a.intValue() + 5
래퍼 객체가 null일 때 오토언박싱을 하면 예외가 발생하므로 주의!
Integer a = null;
int b = a; // NullPointerException 발생!