1. java.lang패키지
1.1 Object
클래스
- 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.
- 이 중
notify()
,wait()
등은 쓰레드와 관련된 메서드이다.
1.1.1 equals(Object obj)
- 객체 자신과 주어진 객체를 비교하여, 같으면 true, 다르면 false를 반환
- 객체의 주소를 비교(참조변수 값 비교)X → 내용을 비교함
1.1.2 hashCode()
- 객체의 해시코드(hash code, 객체의 지문)를 반환하는 메서드
Object
클래스의hashCode()
는 객체의 주소를int
로 변환해서 반환.equals()
를 오버라이딩하면, 두 객체의hashCode()
는 같아야 한다.System.identityHashCode(Object obj)
는Object
클래스의hashCode()
와 동일
1.1.3 toString()
- 객체를 문자열(
String
)으로 변환하기 위한 메서드 - 보통 오버라이딩을 한다.
1.1.4 clone()
- 자신을 복제하여 새로운 인스턴스를 생성.
- 단, 참조타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않고 복제본이 원래의 인스턴스에 영향을 미치게 된다.
//아래와 같이 Cloneable 인터페이스를 구현해야 clone()을 사용할 수 있다.
class 클래스명 implements Cloneable {
// ...
public Object clone() {
Object obj = null;
try {
obj = super.clone()
} catch(CloneNotSupportedException e) { }
return obj;
}
}
<얕은 복사와 깊은 복사>
- 얕은 복사 : 복사본이 원본에 영향을 끼침
- 깊은 복사 : 복사본이 원본에 영향을 끼치지 않음.
1.1.5 getClass()
- 자신이 속한 클래스의 Class객체를 반환하는 메서드.
1.2 String
클래스
- 문자열을 다루기 위한 클래스
String
클래스 = 데이터(char[]) + 메서드(문자열 관련)- 내용을 변경할 수 없는 불면(immutable) 클래스
- 내용이 바뀔 수 없기 때문에 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어짐(새로운 문자열이 담긴 String인스턴스가 생기기 때문) ->
StringBuffer
를 사용
1.2.1 문자열의 비교
String str1 = "abc";
String str2 = "abc"; // 하나의 문자열(abc), 좋은 방법를 str1과 str2가 공유함(주소).
String str3 = new String("abc");
String str4 = new String("abc"); // str3, str4는 각각 새로운 객체(문자열)가 생성됨
따라서 등가비교(==, 주소 비교) 연사자를 사용하지 말고, .equals()를 사용하여 내용 비교를 해야한다.
1.2.2 문자열 리터럴
- 프로그램 실행시 자동으로 생성(constant pool)에 저장
- 같은 내용의 문자열 리터럴은 하나만 만들어진다.
1.2.3 빈 문자열
- 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화
char c = ' '; // 공백으로 초기화
- 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
1.2.4 String클래스의 생성자와 메서드
1.2.5 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.2.6 문자열과 기본형 간의 변환
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클래스
1.3.1 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의 변경
delete()
: 삭제insert()
: 삽입append()
: 끝에 문자열 추가, 지정된 내용을 추가 후 StringBuffer의 참조를 반환
StringBuffer sb = new Stringbuffer("abc");
//sb.append("123");
//sb.append("ZZ");
sb.append("123").append("ZZ");
- StringBuffer의 비교
- StringBuffer는 equals()가 오버라이딩 되어있지 않다(주소비교).
- String으로 변환 후에 equals()로 비교해야하함.
- StringBuffer클래스의 생성자와 메서드
1.3.2 StringBuilder란?
- StringBuffer는 동기화 되어 있다. (멀티 쓰레드에 안전(thread-safe))
- StringBuilder는 동기화가 안되어 있다.
- 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하를 일으킴
1.4 Math 클래스
- 수학관련 static메서드의 집합
- round()로 원하는 소수점 아래 첫번째 자리에서 반올림
1.4.1 예외를 발생시키는 메서드
- 정수형 간의 연산에서 발생하는 오버플로우를 감지하기 위한 메서드
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);
1.4.2 StrictMath클래스
- Math클래스는 최대한의 성능을 위해서 OS의 메서들르 호출해서 상용한다. 하지만 OS마다 결과값이 다를 수 있으므로 항상 같은 결과를 가지도록 성능면에서는 손해를 보지만 StricMath메서드를 사용한다.
1.5 래퍼(wrapper) 클래스
- 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스.
1.5.1 Number클래스
- 모든숫자 래퍼 클래스의 조상
1.5.2 문자열을 숫자로 변환하기
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
1.5.3 오토박싱 & 언박싱
- 기본형을 래퍼 클래스로 바꾸는것을 오토박싱, 그 반대는 언박싱이다.
'LANGUAGE > [JAVA]' 카테고리의 다른 글
Chapter11 컬렉션 프레임웍 Collections Framework (0) | 2021.08.28 |
---|---|
Chapter10 날짜와 시간 & 형식화(date, time and formatting) (0) | 2021.08.27 |
Chapter08 예외 처리(exception handling) (0) | 2021.08.25 |
Chapter07 객체지향 프로그래밍II(Object-oriented Programming II) (0) | 2021.08.24 |
Chapter06 객체지향 프로그래밍 I(Object-oriented Programming I) (0) | 2021.08.20 |