본문 바로가기
TIL(Today I Learned)

[Java] java.lang 패키지 정리

by kkkdh 2023. 1. 31.
728x90

자바에서 기본적으로 다양한 패키지를 지원하는데, 그 중에서도 가장 중요한 패키지는 java.lang 패키지이다.

 

java.lang 패키지의 특징 정리

  • import 하지 않아도 사용할 수 있다.
  • java.lang 패키지에는 기본형 타입을 객체로 변환할 때 사용하는 Wrapper class가 있다.
    • Boolean, Byte, Short, Integer, Long, Float, Double 클래스
  • 모든 클래스의 최상위 클래스인 Object
  • 문자열 관련된 String, StringBuffer, StringBuilder
  • 화면에 값을 출력할 때 사용한 System 클래스
  • 수학과 관련된 Math 클래스
  • Thread와 관련된 중요 클래스들
  • 위의 클래스들을 포함한 다양한 클래스 및 인터페이스가 java.lang 패키지에 속해 있다.

 

Wrapper class 예제 코드

package org.example;

public class WrapperExam {

    public static void main(String[] args) {
        int i = 5;      //기본형 타입
        Integer i2 = 5; //auto boxing
        int i3 = i2;    //auto unboxing도 가능
        Character c = 's'; //char의 Wrapper class
        
        System.out.println("i = " + i);
        System.out.println("i2 = " + i2);
        System.out.println("c = " + c);
    }
}

class의 인스턴스를 생성함에도 불구하고, 생성자를 사용하지 않고 위와 같이 간단하게 인스턴스를 초기화할 수 있는데, 이를 자동으로 감싼다고 해서 오토박싱(Auto Boxing)이라고 부른다고 한다.

 

기본형 숫자 5가 Wrapper class로 들어가며 자동으로 Integer type으로 변환된다.

 

오토 언방식(Auto unboxing)도 가능한데, 이는 Integer같은 wrapper class 객체 타입의 값이 기본형 int로 자동으로 변환되어 값이 할당되는 것을 의미한다.

 

오토박싱과 언박싱은 JAVA 5부터 지원되는 기능으로 이 때 부터 내부적으로 Wrapper class들이 사용된다고 한다.

 

StringBuffer

String 객체는 불변하다는 특징을 갖고 있다.

 

그에 반해서 StringBuffer 객체는 변하는 값을 가질 수 있으며, method 실행 시에 자기 자신을 반환하는 특징을 갖고 있다.

 

또한 String 객체의 concatenation 연산도 String의 불변성으로 인해 내부적으로 StringBuffer를 이용해 concatenating 하는 방식으로 동작한다.

String res = str1 + str2;
String res = new StringBuffer().append(str1).append(str2);

위의 코드와 같이 더하기 연산을 한 번 할때 마다 StringBuffer 객체를 매번 새로 생성해서 사용한다.

 

따라서 반복문 안에서 String concatenation을 진행하면, cost가 매우 비싸지는 문제가 발생해 이러한 경우 다음과 같이 StringBuffer 객체를 외부에서 생성해 매번 새로운 객체의 생성을 막는 식으로 구현시 더 효율적으로 구현이 가능

StringBuffer 하나만을 사용한 반복문

 

Math

Math 클래스도 java.lang 패키지 안에 포함된 클래스이며, 수학적인 연산을 다루고 싶은 경우에 사용할 수 있다.

 

Math 클래스는 생성자가 private로 선언되어 있기 때문에, 객체를 생성할 수 없는 것이 특징이다. 하지만, 모든 메서드와 속성이 static으로 선언되어 있기 때문에, 클래스 메서드 또는 클래스 변수를 사용하는 방식으로 Math 클래스를 이용할 수 있다.

다양하게 사용할 수 있다.

위의 메서드 예시뿐만 아니라 다양한 메서드가 있기 때문에, 스펙을 보고 사용하면 좋을 것 같다.

728x90

댓글