Search

자바의 정석 Chapter 9 : 각 클래스와 메서드들

Object 클래스
모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다
notify(), wait() 등은 쓰레드와 관련된 메서드이다
대부분 오버라이딩해서 사용해야 한다
equals(Object obj)
객체 자신(this)과 주어진 객체(obj)를 비교한다
boolean이므로 같으면 true 다르면 false를 반환
Object 클래스의 equals()는 객체의 주소를 비교 (참조변수 값 비교)
주소를 비교하므로 값을 비교하려면 오버라이딩을 해야 함
hashCode()
객체의 해시코드(haso code)를 반환하는 메서드
Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
equals()를 오버라이딩하면 hashCode()도 오버라이딩해야 한다 (주소 → iv)
(equals의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문)
System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일
toString()
객체를 문자열(String)으로 변환하기 위한 메서드
유용하게 사용하기 위해 오버라이딩해서 주소값이 아닌 iv값을 출력하도록 한다
String 클래스 (문자열을 다루기 위한 클래스)
String 클래스 = 데이터(char[]) + 메서드(문자열 관련)
내용을 변경할 수 없기 때문에 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어진다
(문자열 결합 시 객체를 새로 생성하므로 대입 시 새로 생성된 객체의 주소로 바꿔주기 때문에 객체가 계속 늘어난다)
문자열 결합이나 변경이 잦다면 내용 변경이 가능한 StringBuffer를 사용한다
문자열 비교
빈 문자열(””, empty string)
내용이 없는 문자열로 크기가 0인 char형 배열을 저장하는 문자열이다
(C언어에서는 크기가 0인걸 만들 수 없다)
크기가 0인 배열을 생성하는 것은 어느 타입으로 해도 상관없다
문자(char)와 문자열(String)의 초기화
String 클래스의 생성자와 메서드
join()
String str = String.join(”-”, arr);
여러 문자열 사이에 구분자를 넣어서 결합한다
많은 문자열을 결합할 땐 println에서 +로 결합하는 것보다 빠르다
문자열과 기본형 간의 변환 (valueOf!!!!!!)
숫자를 문자열로 바꾸는 방법
String str1 = i + “”; //편리하지만 느리다
String str2 = String.valueOf(i); //빠르다!
문자열을 숫자로 바꾸는 방법
int i = Integer.parseInt(”100”); //올드한 옛날 방법
int i2 = Integer.valueOf(”100”); //요즘 방법
Integer i2 = Integer.valueOf(”100”); //valueOf는 반환형이 원래 Integer(참조형)이다.
(오토박싱으로 Integer → int 자동으로 바꿔줘서 상관없이 사용 가능
StringBuffer 클래스
문자열을 저장하고 다룬다 → 문자열 추가&변경 많을 때 용이하다
String 처럼 문자형 배열(char[])을 내부적으로 가지고 있다
그러나 String 과 달리 내용을 변경할 수 있다 (mutable)
배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야 한다
(2배쯤 크기의 새로운 배열 생성 → 내용 복사 → 참조 변경)
StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야 한다
StringBuffer는 equals()가 오버라이딩되어 있지 않다 (주소비교)
(값 비교를 위해선 toString()으로 String으로 변환 후에 equals()로 비교해야 함!!!!!)
StringBuffer의 생성자와 메서드
StringBuilder
StringBuffer는 동기화되어 있고 StringBuilder는 동기화가 안 되어 있다
(동기화는 멀티스레드에 안전하게 하는 것 thread-safe → 데이터 보호)
멀티 쓰레드 프로그램이 아닌 경우 동기화는 불필요한 성능저하를 만든다
즉, 싱글 스레드일 땐 StringBuilder, 멀티 스레드일 땐 StringBuffer를 사용한다
Math 클래스
수학관련 static 메서드의 집합
round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기
Math 클래스의 메서드
round는 무조건 반올림이라 sum에서 오차값이 생길 수 있다
rint는 round even으로 한 번은 버리고 한 번은 올리기 때문에 오차값이 적다
wrapper 클래스
기본형 값을 감싸는 클래스이다
8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스
자바는 90%가 객체 10%가 기본형 (객체지향이지만 기본형이 있는 이유는 성능때문이다)
자체적으로 MAX, MIN, SIZE, BYTES, TYPE과 같은 정보들을 갖고 있다
Number 클래스
모든 숫자 wrapper 클래스의 조상
wrapper 객체를 기본형으로 바꿔주는 메서드를 갖고 있다 (intValue)
문자열을 숫자로 변환하는 다양한 방법
n진법의 문자열을 숫자로 변환하는 방법
오토박싱 & 언박싱
오토박싱 : 기본형 int → 래퍼클래스 Integer
언박싱 : 래퍼클래스 Integer → 기본형 int
jdk1.5 이전에는 기본형과 참조형 간의 연산이 불가능했음 (int + Integer → 불가능)
(jdk1.5 이후 컴파일러가 wrapper 클래스를 .intValue()를 통해 기본형으로 바꿔준다)