Chapter09 java.lang패키지와 유용한 클래스(java.lang package & util classes)
1. java.lang패키지
1.1 Object클래스
- 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.
- 이 중 notify(), wait() 등은 쓰레드와 관련된 메서드이다.
<equals(Object obj)>
- 객체 자신과 주어진 객체를 비교하여, 같으면 true, 다르면 false를 반환
- 객체의 주소를 비교(참조변수 값 비교) (왜냐하면 서로 다른 두 객체는 항상 주소가 다르기 때문)
<hashCode()>
- 객체의 해시코드(hash code, 객체의 지문)를 반환하는 메서드
- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환.
- equals()를 오버라이딩하면, 두 객체의 hashCode()는 같아야 한다.
- System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일
<toString()>
- 객체를 문자열(String)으로 변환하기 위한 메서드
- 보통 오버라이딩을 한다.
<clone()>
- 자신을 복제하여 새로운 인스턴스를 생성.
- 단, 참조타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않고 복제본이 원래의 인스턴스에 영향을 미치게 된다.
//아래와 같이 Cloneable 인터페이스를 구현해야 clone()을 사용할 수 있다.
class 클래스명 implements Cloneable {
// ...
public Object clone() {
Object obj = null;
try {
obj = super.clone()
} catch(CloneNotSupportedException e) { }
return obj;
}
}
<얕은 복사와 깊은 복사>
- 얕은 복사 : 복사본이 원본에 영향을 끼침
- 깊은 복사 : 복사본이 원본에 영향을 끼치지 않음.
<getClass()>
자신이 속한 클래스의 Class객체를 반환하는 메서드.
1.2 String클래스
- 문자열을 다루기 위한 클래스
- String클래스 = 데이터(char[]) + 메서드(문자열 관련)
- 내용을 변경할 수 없는 불면(immutable) 클래스
- 내용이 바뀔 수 없기 때문에 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어짐(새로운 문자열이 담긴 String인스턴스가 생기기 때문) -> StringBuffer를 사용
<문자열의 비교>
String str1 = "abc";
String str2 = "abc"; // 하나의 문자열(abc), 좋은 방법를 str1과 str2가 공유함(주소).
String str3 = new String("abc");
String str4 = new String("abc"); // str3, str4는 각각 새로운 객체(문자열)가 생성됨
따라서 등가비교(==, 주소 비교) 연사자를 사용하지 말고, .equals()를 사용하여 내용 비교를 해야한다.
<문자열 리터럴>
- 프로그램 실행시 자동으로 생성(constant pool)에 저장
- 같은 내용의 문자열 리터럴은 하나만 만들어진다.
<빈 문자열>
- 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화 char c = ' '; // 공백으로 초기화
- 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
<String클래스의 생성자와 메서드>
<join()과 StringJoiner>
- join()과 StringJoiner는 여러 문자열 사이에 구분자를 넣어서 결합한다.
String animals = "dog,cat,bear"; String[] arr = animals.split(","); System.out.println(String.join("-", arr)); // 구분자 : "-" /////////////////////////////////////// StringJoiner sj = new StringJoiner("/","[","]"); // 구분자 : "/", 시작 : "[", 끝 : "]" for(String s : arr) sj.add(s); System.out.println(sj.toString());
<문자열과 기본형 간의 변환>
1. 숫자를 문자열로 바꾸는 방법
int i = 100;
String str1 = i + "";
String str2 = String.valueOf(i); // 속도가 더 빠름
2. 문자열을 숫자로 바꾸는 방법
int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
Integer i2 = Integer.valueOf("100"); // valueOf는 참조형으로 나옴.
1.3 StringBuffer클래스와 StringBuilder클래스
<StringBuffer클래스>
- String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
- String과 달리 내용을 변경할 수 있다.
<StringBuffer의 생성자>
public StringBuffer(int length) { value = new char[length]; shared = false; } public StringBuffer() { this(16); // 크기 지정을 안하면 버퍼의 크기는 16이됨. } public StringBuffer(String str) { this(str.length() + 16); // 지정한 문자열보다 16이 더 크게 버퍼를 생성 append(str); // str추가
<StringBuffer의 변경>
append() : 끝에 문자열 추가, 지정된 내용을 추가 후 StringBuffer의 참조를 반환StringBuffer sb = new Stringbuffer("abc"); //sb.append("123"); //sb.append("ZZ"); sb.append("123").append("ZZ");
delete() : 삭제
insert() : 삽입
<StringBuffer의 비교>
- StringBuffer는 equals()가 오버라이딩 되어있지 않다(주소비교).
- String으로 변환 후에 equals()로 비교해야하함.
<StringBuffer클래스의 생성자와 메서드>
<StringBuilder란?>
- StringBuffer는 동기화 되어 있다. (멀티 쓰레드에 안전(thread-safe))
- StringBuilder는 동기화가 안되어 있다.
- 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하를 일으킴
1.4 Math 클래스
- 수학관련 static메서드의 집합
- round()로 원하는 소수점 아래 첫번째 자리에서 반올림
<예외를 발생시키는 메서드>
정수형 간의 연산에서 발생하는 오버플로우를 감지하기 위한 메서드
int addExact(int x, int y); int subtractExact(int x, int y); int multiplyExact(int x, int y); int increamentExact(int a); int decrementExact(int a); int negateExact(int a); // 매개변수의 부호를 바꿔줌 int toIntExact(long value);
<StrictMath클래스>
Math클래스는 최대한의 성능을 위해서 OS의 메서들르 호출해서 상용한다. 하지만 OS마다 결과값이 다를 수 있으므로 항상 같은 결과를 가지도록 성능면에서는 손해를 보지만 StricMath메서드를 사용한다.
1.5 래퍼(wrapper) 클래스
- 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스.
<Number클래스>
- 모든숫자 래퍼 클래스의 조상
<문자열을 숫자로 변환하기>
int i = new Integer("100").intValue(); int i2 = Integer.parseInt("100"); Integer i3 = Integer.valueOf("100"); ////////////////////////////////// int i4 = Integer.parseInt("100", 2); // 100(2) -> 4 int i5 = Integer.parseInt("100", 8); // 100(8) -> 64 int i6 = Integer.parseInt("100", 16); // 100(16) -> 256 int i7 = Integer.parseInt("FF", 16); // FF(16) -> 255
<오토박싱 & 언박싱>
- 기본형을 래퍼 클래스로 바꾸는것을 오토박싱, 그 반대는 언박싱이다.
Author And Source
이 문제에 관하여(Chapter09 java.lang패키지와 유용한 클래스(java.lang package & util classes)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kookiencream/Chapter09-java.lang패키지와-유용한-클래스java.lang-package-util-classes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)