출처 - Java의 정석 기초편 (남궁 성)
1. Object클래스
- 모든 클래스의 최고 조상
- 오직 11개 메서드 → 모든 클래스에서 바로 사용 가능
protect Object clone() // 오버라이딩시 public
public boolean equals(Object obj)
protected void finalize() // 오버라이딩시 public
public Class getClass // 설계도 정보
public int hashCode()
public String toString()
public void notify()
public void notifyAll()
public void wait()
public void wait(long timeout)
public void wait(long timeout, int nanos)
2. equals()
- 객체 자신(this)과 주어진 객체(obj)를 비교, 반환타입 boolean
- Object클래스의 equals()는 객체 주소 비교(참조변수 값 비교)
- 주소 비교: 서로 다른 객체는 항상 거짓
public boolean equals(Object obj) {
return (this==obj);
}
3. equal() 오버라이딩
- 인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩 → 형변환 필요
- equals() 오버라이딩시 hashCode()도 오버라이딩 해야 함
- equals()의 결과가 true인 두 객체의 해시코드가 같아야 하기 때문
class Person {
long id;
public boolean equsals(Object obj) {
if(obj instanceof Person)
return id == ((Person)obj).id; // iv 값 비교로 오버라이딩
else
return false;
}
}
4. hashCode()
- 객체의 지문인 hashCode를 반환하는 메서드
- 객체의 주소를 int로 변환해서 반환
- String클래스는 문자열의 내용이 같으면 동일한 hashCode를 반환하도록 hashCode메서드가 오버라이딩 되어 있음
- System.identityHashCode(Object obj)는 객체마다 항상 다른 hashCode 반환
5. toString()
- 객체를 문자열으로 변환하기 위한 메서드
- 객체 == iv집합 이므로 iv 값을 문자열로 변환한다는 것과 같음
public String toString() { // 클래스이름@16진수객체주소
return getClass().getName()+”@“+Integer.toHexString(hashCode());
}
6. toString() 오버라이딩
- 인스턴스 변수들의 값을 문자열로 변환하여 반환하도록 오버라이딩
- 오버라이딩시 조상에 정의된 접근 범위보다 같거나 넓어야 함
public String toString() {
return “kind : “ + kind + “, number : “ + number;
}
7. String클래스
- 문자열을 다루기 위한 클래스
- 데이터(char[])+문자열 관련 메서드
- 변경 불가능한(immutable) 클래스
- 덧셈 연산자 이용해 문자열 결합시 새로운 String인스턴스가 생성 → 메모리 공간 차지해 성능 저하
- 문자열 결합이 잦거나 내용 변경 필요시 StringBuffer클래스 사용
public final class String implements java.io.Serializable, Comparable { // final 조상 클래스 불가
private char[] value; // 문자배열
... // 메서드 잔뜩 들어 있음
}
8. 문자열(String) 비교
- 문자열 리터럴 지정: 여러 참조변수가 하나의 문자열 리터럴 공유
- String클래스의 생성자 사용: new → 항상 새로운 문자열 생성
- 문자열 내용비교, equals 내용 비교
String str1 = "abc"; // 0x100
String str2 = "abc"; // 0x100
String str3 = new String("abc"); // 0x200
String str4 = new String("abc"); // 0x300
9. 문자열 리터럴(String리터럴)
- 실행시 프로그램에 있는 모든 문자열은 자동으로 생성되어 상수 저장소(constant pool)에 저장
- 같은 내용의 문자열 리터럴은 하나만 생성
- 내용 변경 불가
10. 빈 문자열(empty string)
- ""
- 내용이 없는 문자열
- 길이가 0인 char형 배열을 저장하는 문자열
- 길이가 0인 배열을 생성하는 것은 어느 타입이든 가능
- 유용: 숫자 → 문자, 문자와 문자열 초기화
char[] chArr = new char[0]; // 길이가 0인 char배열
int[] iArr = {}; // 길이가 0인 int배열
Strigng s = ""; // 빈 문자열로 초기화
char c = ' '; // 공백으로 초기화
11. String클래스 생성자와 메서드
String(String s) // String s = new String("Hello")
String(char[] value) // char[] c = {'H','e','l','l','o'};
String(StringBuffer buf) // StringBuffer sb = new StringBuffer("Hello")
char charAt(int index)
int compareTo(String str) // 사전순 비교(0, 음수, 양수)
String concat(String str) // 문자열 결합
boolean contains(CharSequence s) // 지정된 문자열 포함되었는지 검사
boolean endsWith(String suffix)
boolean startsWith(String prefix)
boolean equals(Object obj) // 문자열 비교
boolean equalsIgnoreCase(String str)
int indexOf(int ch) // index 반환, 없으면 -1
int indexOf(int ch, int pos) // 검색 시작 위치 지정
int indexOf(String str) // 시작 인덱스 반환
String intern()
int lastIndexOf(int ch) // 오른쪽 끝에서부터 찾아서 index 반환
int lastIndexOf(String str)
int length()
String replace(char old, char nw) // 문자 대체
String replace(CharSequence old, CharSequence nw) // 문자열 대체
String replaceAll(String regex, String replacement)
String replaceFirst(String regex, String replacement)
String[] split(String regex) // 분리자(regex)로 나누어 문자열 배열에 담아 반환
String[] split(String regex, int limit) // 지정된 수(limint)로 자름
String substring(int begin)
Stirng substring(int begin, int end) // begin ≤ x < end
String toString // 문자열 반환
String toLowerCase() // 소문자
String toUpperCase() // 대문자
String trim() // 양끝 공백 제거, 문자열 수정 불가 → 새로 생성
Static String valueOf(기본형) // toString() 호출한 결과 반환
12. join()과 StringJoiner
- join()은 여러 문자열 사이에 구분자를 넣어 결합 ↔ 구분자로 문자열을 자르는 split()
- java.util.StringJoiner클래스
String animals = "dog,cat,bear";
String[] arr = animals.split(",");
System.out.pringln(String.join("-", arr)); // dog-cat-bear
StringJoiner sj = new Stringjoiner("/","[","]");
for(String s : arr)
sj.add(s.toUpperCase());
System.out.println(sj.toSTring()); // [DOG/CAT/BEAR]
13. 문자열 ↔ 기본형
- 숫자 → 문자열: 숫자 + ""(빈 문자열), String.valueOf()
- 문자열 → 숫자: Integer.parseInt(), Integer.valueOf()
- 오토박싱에 의해 Integer → int 자동변환
'Java' 카테고리의 다른 글
Object클래스 - Math클래스, 래퍼 클래스, Number클래스, 오토박싱, 은박인 (0) | 2022.10.12 |
---|---|
Object클래스 - StringBuffer, StringBuilder (0) | 2022.10.11 |
예외처리 (1) | 2022.10.05 |
내부 클래스(inner class), 익명 클래스(anonymous class) (0) | 2022.10.04 |
추상 클래스(abstract class), 인터페이스(interface) (1) | 2022.10.03 |