공부일기/JAVA

JAVA 공부일기1-10

고다나 2023. 4. 26. 17:01
Java의 정석 기초편
Chapter 9 java.lang패키지와 유용한 클래스

 

java.lang패키지의 클래스들은 import문 없이도 사용 가능.

 

1. Object클래스

모든 클래스의 최고 조상. 멤버 변수는 없고 11개의 메서드만 가짐.

Object클래스의 메서드 설명 오버라이딩
public boolean equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교해서 결과 반환. → 서로 다른 두 객체를 equasl()로 비교하면 항상 false. equals 메서드를 오버라이딩하여 주소가 아닌 객체에 저장된 내용을 비교하도록 변경.
public int hashCode() 객체 자신의 해시코드 반환.

*System.identityHashCode(Object x)는 모든 객체에 항상 다른 해시코드 값 반환 보장.
equals 오버라이딩과 마찬가지로 객체의 같고 다름을 판단하는 경우 오버라이딩 필요. 같은 객체라면 해시코드도 같아야 하기 때문. 
public String toString() 객체 자신의 정보를 문자열로 반환. 클래스이름과 해시코드 출력. 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하여 반환하도록 오버라이딩.

 

2. String클래스

한번 생성된 String 인스턴스는 갖고있는 문자열은 읽어 올 수만 있고, 변경은 불가. 

 

문자열 생성 방법

1. 문자열 리터럴 지정: 이미 존재하는 것 재사용. (컴파일 시 클래스 파일에 저장. 이때 같은 내용의 문자열 리터럴은 한번만 저장됨. 클래스 파일이 클래스 로더에 의해 메모리에 올라갈 때, 클래스 파일의 리터럴들이 JVM 내 상수저장소에 저장.)

2. String 클래스 생성자 사용: new 연산자에 의해 메모리 할당이 이루어져서 항상 새 인스턴스 생성.

String str1 = "abc";                      String str2 = "abc";

String str3 = new String("abc");   String str2 = new String("abc");

자바의정석 기초편1 p331

equals()를 사용했을 때는 두 문자열의 내용("abc")를 비교하기 때문에 두 경우 모두 true, String인스턴스의 주소를 등가비교연산자'=='로 비교했을 때는 결과가 다름.

*원래 equals()는 Object믈래스의 주소값 비교 메서드이지만, String클래스가 재정의해서 문자열을 비교하도록 변경.

 

3. StringBuffer클래스

String클래스와 달리 변경 가능. StringBuffer인스턴스를 생성할 때 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용. 저장될 문자열의 길이를 고려하여 크기 지정. 기본값은 16.

StringBuffer클래스는 equals를 오버라이딩하지 않아서 등가비교연산자로 비교한 것과 같은 결과를 얻음. toStirng()은 오버라이딩되어있어 담고있는 문자열 반환.

 

StringBuffer클래스는 멀티쓰레드에 안전하도록 동기화됨. 불필요하면 쓰레드 동기화 기능만 뺀 StringBuilder클래스 사용.

 

4. Wrapper클래스

기본형 변수도 객체로 다뤄야하는 경우 래퍼클래스 사용→ 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 등.

래퍼클래스들은 모두 equals() 오버라이딩되어있어 객체가 가지고 있는 값 비교. 배교연산자를 사용하고 싶을 경우 compareTo() 사용. toString()도 오버라이딩 되어있음.

자바의정석 기초편1 p351

 

5. 오토박싱&언박싱

JDK1.5이전에는 기본형과 참조형 간의 연산이 불가능했기 때문에, 래퍼클래스로 기본형을 객체로 만들어서 연산해야 했음. 이제는 컴파일러가 자동으로 변환하는 코드를 넣어주어 기본형과 참조형 간의 연산 가능.

 

오토박싱: 기본형 값을 래퍼클래스의 객체로 자동 변환해주는 것. 

언박싱: 래퍼클래스의 객체를 기본형 값으로 변환하는 것.