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()를 통해 기본형으로 바꿔준다)