백엔드/Java

java.lang 패키지

Ryuzy 2025. 5. 21. 00:27
728x90
반응형

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);
    }
}
728x90
반응형