Ezcho

[java] java.lang 패키지 본문

Java

[java] java.lang 패키지

Ezcho 2022. 10. 5. 21:28

java.lang 패키지는 자바 개발 시 가장 기본이 되는 클래스들을 포함하고 있다.

import문 없이도 사용이 가능하다.

 

1. Object 클래스

모든 클래스의 최고 조상인 Object클래스는 11개의 methods 를 가지고 있다.

equals(), toString(), hashCode() 는 아래의 글을 참고하자

https://ezerocho.tistory.com/14

 

Object 와 오버라이딩

Object클래스란? 모든 클래스의 최상위 클래스: 오브젝트가 가진 메서드는 모든 클래스에서 다 사용할 수 있다. Object클래스의 대표적인 메서드 - 사용자가 알맞게 오버라이딩 해서 사용이 필요함

ezerocho.tistory.com

 

2. Wrapper클래스

기본타입: int, byte, short, long, char...

래퍼클래스: Integer, Byte, Short, Long, Charactor

 

기본타입을 래퍼클래스로 바꾸는 것을 박싱, 반대의 경우를 언박싱이라고 한다.

좀더 자세히 말하면

박싱: 값 형식, 기본형을(value types)을 참조형식(reference type)으로 바꿔주는것

언박싱: 그반대

 

기본형은 스텍메모리에 저장된다.

참조형은 힙메모리에 저장된다, 스택에는 힙메모리의 주소가 존재한다.

 

기본형은 null이 존재하지 않는다.

참조형은 null값이 존재한다. -> null값이 요구되는 데이터 접근을 위해 참조형 사용이 필요하다.(DB)

 

Integer num2 = new Integer(332); // 박싱 기본형 -> 참조형
Integer num1 = 332;         //오토박싱    
int a1 = num2.intValue();   //언박싱 참조형 -> 기본형
int a2 = num2;              //오토언박싱

System.out.println(a1);
System.out.println(a2);
System.out.println(num1);
System.out.println(num2);

래퍼클래스를 왜 사용할까? 기본 자료타입을 객체로 다루기 위해서 사용한다. 객체 타입을 요구하는 곳이 많다! (메모리와 관련된 문제)

 

그럼 오토박싱 오토언박싱은 무엇일까?

JDK1.5버전부터 박싱과 언박싱 단계에서 기본타입을 래퍼클래스로 변환할 필요가 없어졌다!

컴파일러에 의해 자동으로 래퍼클래스로 변환되기 때문이다.

(하지만 오토박싱 언박싱은 역시 추가적인 연산을 요구하기 때문에, 가능하면 박싱을 해주는 것이 좋다.(크게 차이는 없다고 한다.))

 

주요 사용처는 문자열 변환이다. (참조형 String을 변환하기 위한)

int strint = Integer.parseInt(str1);
short strshort = Short.parseShort(str2);
boolean strbool = Boolean.parseBoolean(str3);
double strdouble = Double.parseDouble(str4);

System.out.println(strint);
System.out.println(strshort);
System.out.println(strbool);
System.out.println(strdouble);

 

두번째론 ArrayList나 LinkedList에서의 사용이다. 이들도 역시 참조형이다.

ArrayList<Integer> arl = new ArrayList<>();
arl.add(30);                        //오토박싱
arl.add(Integer.valueOf(30));     //박싱
int arr0 = arl.get(0);              //오토언박싱
int arr1 = arl.get(0).intValue();   //언박싱
Vector<Integer> v1 = new Vector<>();
Queue<Integer> queue = new LinkedList<>();

 

참조타입의 비교

1. 값비교

 equals()를 사용한다.

2. 주소비교

== 연산자를 사용한다.

 

참조타입의 속도

1. 접근시간이 더 오래걸린다(기본형들과 비교해서)

2. 메모리를 더 많이 소모한다.(왜?)

 

 

참조형 변수의 선언

String a = new String("abc");

 

 

위에서 참조형은 Heap 메모리에 그 값이 저장된다고 했다. 관계를 쉽게 나타내면 아래와 같은 표로 나타낼 수 있다.

Stack 메모리 4바이트의 크기 주소 수행명령: String a
Heap 메모리 요청한 값 실제 값 수행명령: new String("abc")

 

참조를 이해하기 위한 코드

public class Test {
    public int phoneNumber;
    Test(int phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public static void main(String args[]){

        Test a = new Test(4);
        Test b = a;
        b.phoneNumber = 5;
        System.out.println(a.phoneNumber);
    }
}

코드 해석 그림

 

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

[java] Date, Calendar클래스, Time 패키지  (0) 2022.11.09
[java] java.util패키지  (0) 2022.11.02
[java] Math Class  (0) 2022.10.12
[java] String과 StringBuffer  (0) 2022.10.12
[java]Object 와 오버라이딩  (0) 2022.09.28
Comments