경주장

[자바 중급] 파트2. java.lang 패키지 본문

JAVA/프로그래머스-자바중급

[자바 중급] 파트2. java.lang 패키지

달리는치타 2022. 1. 24. 22:49

자바는 기본적으로 다양한 패키지를 지원 그중에서 가장 중요한 패키지

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

Wrapper Class와 오토박싱

오토박싱 - 기본 타입 데이터를 객체 타입의 데이터로 자동 형변환 시켜주는 기능 (자바 5이상 지원)

int i = 5;
Integer i2 = new Integer(5);
Integer i3 = 5; //AutoBoxing : primitive -> Wrapper

int i4 = i3.intValue();
int i5 = i3; 	//AutoUnboxing

컴파일러가 자동으로 생성자를 만들고, 매서드를 호출한다.


String - 불변 객체/ StringBuffer - 가변 객체

 

StringBuffer가 가지고 있는 메소드들은 대부분 자기 자신, this를 반환한다.

    StringBuffer sb2 = new StringBuffer();
    StringBuffer sb3 = sb2.append("hello");
    boolean isEqual = (sb2==sb3); // true

따라서 매서드 체인을 통해 String을 만들 수 있다!

String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
        System.out.println(str2);

String Class의 문제점

String은 불변객체이다. + 연산을 통해 String을 concatenate한다면 내부적으로 StringBuffer객체가 생성되고 append, toString이 호출되어 String 이 생성된다.

 

String클래스를 사용할 때 가장 문제가 발생하는 경우는 다음과 같은 코드를 사용할 때 입니다.

    String str3 = str1 + str2;
    String str4 = new StringBuffer().append(str1).append(str2).toString();
    String str4 = new StringBuffer().append(str1).append(str2).toString();

예를들어 반복문을 통해 + 연산자를 100번 호출한다면 내부적으로는 100개의 StringBuffer가 new로 생성되는 것이다.

이때에는 직접 StringBuffer를 생성해서 append, toString을 활용하는 방식이 성능상 이점이 있다.

 

String s = "Hello";
for(int i = 0 ; i < 100 ; i++){
	s += "*";
}
////////////////////////////////////

String t = "World";
StringBuffer sb = new StringBuffer();
sb.append(t);

for(int i = 0 ; i <100 ; i++){
	sb.append("*");
}

java.lang.Math

코싸인, 싸인, 탄젠트, 절대값, 랜덤값을 구할 수 있는 클래스

  • Math클래스는 생성자가 private으로 되어 있기 때문에 new 연산자를 이용하여 객체를 생성할 수 없다.
  • 객체를 생성할 수는 없지만 모든 메소드와 속성이 static으로 정의되어 있기 때문에 객체를 생성하지 않고도 사용할 수 있다.