Programming language/Java

[JAVA] java.lang 패키지/오토박싱

chaenii 2022. 9. 14. 22:27

https://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html

 

java.lang (Java Platform SE 7 )

Interface Summary  Interface Description Appendable An object to which char sequences and values can be appended. AutoCloseable A resource that must be closed when it is no longer needed. CharSequence A CharSequence is a readable sequence of char values.

docs.oracle.com

java.lang 패키지/오토박싱

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

  • 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 패키지에 속해 있다.
    public class WrapperExam {
        public static void main(String[] args) {
            int i = 5; 
            Integer i2 = new Integer(5);
            Integer i3 = 5;     //오토박싱
            int i4 = i2.intValue();
            int i5 = i2;       //오토언박싱
        }
    }

오토박싱(Auto Boxing)

  • 기본 타입 데이터를 객체 타입의 데이터로 자동 형변환 시켜주는 기능
  • Integer i3 = 5; 숫자 5는 원래 기본형이지만 자동으로 Integer형태로 변환된다.

오토 언박싱(Auto unboxing)

  • 오토박싱과 반대로 객체 타입의 데이터를 기본형 타입 데이터로 자동 형변환
  • int i5 = i2; Integer 객체타입의 값을 기본형 int로 자동으로 변환되어 값을 할당한다.

오토박싱(Auto Boxing),오토 언박싱(Auto unboxing) 은 JAVA 5부터 지원한다. 이 때 내부적으로 Wrapper  클래스들이 사용된다.


StringBuffer

아무 값도 가지고 있지 않은 StringBuffer 객체를 생성

StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" ");
sb.append("world");

// StringBuffer에 추가된 값을 toString()메소드를 이용하여 반환
String str = sb.toString();
System.out.println(str);
  • 출력결과 : hello world

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

StringBuffer sb2 = new StringBuffer();
StringBuffer sb3 = sb2.append("Hello"); // append Method는 자기 자신 This가 반환된다. (메소드 체이닝)

if (sb2 == sb3) // sb2와 sb3는 동일하다.
    System.out.println("sb");
  • 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 메소드 체이닝이라고 한다.
  • StringBuffer 클래스는 메스드 체인 방식을 사용할 수 있도록 만들어져 있다.
String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
System.out.println(str2);
  • 앞에서 5줄로 작성했던 코드를 위와 같이 한 줄로 수정할 수 있다.
  • StringBuffer는 append메소드 외에도 길이를 구하거나, 자르거나 등의 다양한 메소드들을 가지고 있다.

스트링 클래스의 문제점

String클래스는 문자열을 다룰때 사용하는 클래스

String클래스는 불변클래스 이다.

String str1 = "hello world";
String str2 = str1.substring(5);
System.out.println(str1);
System.out.println(str2);
  • 실행결과
    hello world
     world
  • 기존의 str1은 전혀 변화 없다.
  • substring메소드는 5번째 부터 문자열을 잘라서 새로운 문자열을 반환하는 메소드
  • str1자체는 전혀 변화가 없다.

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

    String str3 = str1 + str2;
    System.out.println(str3);
  • 실행결과
    hello world world

문자열과 문자열을 더하게 되면 내부적으로는 다음과 같은 코드가 실행된다.

    String str4 = new StringBuffer().append(str1).append(str2).toString();
    System.out.println(str4);

다음과 같은 코드를 실행하면 반복문이 돌 때마다 StringBuffer 객체를 한번씩 만들어낸다 . java는 new 연산자가 많이 사용될 수록 프로그램의 속도가 느려진다. 

String str5 = "";
for(int i=0; i< 100; i++) {
    str5 = str5 + "*"; 
}
System.out.println(str5);

 다음과 같이 하나의 StringBuffer 객체를 생성해서 append 메소드를 사용해 수행하는 것이 더 좋은 방법이다.

StringBuffer sb = new StringBuffer();
for (int i=0; i < 100; i++) {
    sb.append("*");
}
String str6 = sb.toString();
System.out.println(str6);

Math

Math클래스는 이름 그대로 수학계산을 위한 클래스

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

  • Math클래스는 생성자가 private으로 되어 있기 때문에 new 연산자를 이용하여 객체를 생성할 수 없다.
  • 객체를 생성할 수는 없지만 모든 메소드와 속성이 static으로 정의되어 있기 때문에 객체를 생성하지 않고도 사용할 수 있다.
    public class MathExam {
        public static void main(String[] args) {
            int value1 = Math.max(5, 20);
            int value2 = Math.min(5, -5);
            int value3 = Math.abs(-10);
            double value4 = Math.random();
            double value5 = Math.sqrt(25);  
        }
    }

https://school.programmers.co.kr/learn/courses/9/lessons/251

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형

'Programming language > Java' 카테고리의 다른 글

[JAVA] Set, List, Map  (0) 2022.09.16
[JAVA] Collection Framework  (0) 2022.09.16
[JAVA] Object와 오버라이딩  (0) 2022.09.14
[JAVA] 인터페이스와 다른 형식의 클래스  (0) 2022.09.13
[JAVA] 상속  (0) 2022.09.12