Don't give up!

[JAVA] 자바의 정석 정리(9장) 본문

개발서적/JAVA의 정석

[JAVA] 자바의 정석 정리(9장)

Heang Lee 2021. 5. 24. 23:22
자바의 정석을 읽고 정리한 내용입니다.

Java의 정석 - YES24

 

Java의 정석

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com


1. Object 클래스

(1) finalize함수는 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다.

(2) clone함수는 인스턴스 변수의 값만 복사한다. 참조타입의 인스턴스 변수는 주소값이 복사되므로 완전한 인스턴스 복제가 이루어지지 않는다.

2. String 클래스

(1) String 클래스에는 char[]를 인스턴스 변수로 정의하고 있다.

(2) String 인스턴스가 가지고 있는 문자열은 변경할 수 없다. 새로운 문자열이 담긴 String인스턴스가 생성되는 것.

(3) 문자열 리터럴은 주소를 가지고 있다. new를 사용하여 새로운 인스턴스를 만들지 않고 String 클래스에 문자열 리터럴을 대입하는 것은 같은 주소를 공유하는 것.

(4) 자바 소스파일에 포함된 모든 문자열 리터럴은 컴파일 시에 클래스 파일에 저장된다. 빈 문자열도 저장.

(5) String은 null보다는 ""로, char는 '\u0000'대신 ' '으로 초기화하는것이 일반적이다.

(6) 기본형을 문자열로 변경할 때 기본형에 빈 문자열을 더하는 방법과 valueOf()를 사용하는 방법이 있다. 성능은 valueOf가 더 좋다.

(7) parseInt와 valueOf메서드는 반환 타입만 다르고 같은 메서드 이다.

3. StringBuffer 클래스

(1) StringBuffer클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼를 가지고 있으며 크기를 지정할 수 있다.

(2) 편집 중인 문자열이 버퍼의 길이를 넘어서게 되면 버퍼의 길이를 늘려주는 작업이 추가로 수행되어야 한다. 인스턴스를 생성할 때 편집할 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다.

(3) 버퍼의 크기를 지정하지 않으면 크기는 16이 된다. 문자열을 입력받은 생성자는 문자열의 길이보다 16만큼 더 큰 버퍼를 생성한다.

(4) StringBuffer 클래스는 equals 메서드를 오버라이딩하지 않았다. 문자열을 비교하기 위해서는 toString()으로 String 인스턴스를 얻은 다음 비교하여야 한다.

(5) 동기화는 StringBuffer의 성능을 떨어뜨린다. StringBuilder는 쓰레드의 동기화를 제외한 동일한 기능을 제공한다.

4. Math 클래스

(1) 메서드의 이름에 Exact가 포함된 메서드들은 오버플로우를 감지한다. 오버플로우가 발생하면 ArithmeticException을 발생시킨다.

(2) StrictMath 클래스는 성능을 포기한 대신, 어떤 OS에서 실행되어도 항상 같은 결과를 얻도록 Math 클래스를 새로 작성한 것이다.

5. Wrapper 클래스

(1) wrapper 클래스 (Integer, Character, Long, Double 등)는 기본형 값을 객체로 다룬다. 생성자의 매개변수로 문자열을 받을 수 있는데 문자열은 자료형이나 진법에 맞지 않으면 NumberFormatException이 발생한다.

(2) Boolean과 character를 제외한 다른 Wrapper 클래스들은 Number 클래스의 자손이다.

(3) BigInteger는 long으로도 다룰 수 없는 큰 범위의 정수를, BigDecimal은 double로도 다룰 수 없는 큰 범위의 부동 소수점수를 처리할 수 있다.

6. 정규식(regex)

(1) Pattern 클래스는 정규식을 정의하는데 사용되고 Matcher 클래스는 정규식을 데이터와 비교하는 역할을 한다.

정규식 패턴 설명
c[a-z]* c로 시작하는 a~z로 이루어진 문자열
c[a-z] c와 a~z로 시작하는 두 자리 문자열
c[a-zA-Z] c와 a~z또는 A~Z로 시작하는 두 자리 문자열
c[a-zA-Z0-9]
c\w
c로 시작하고 숫자와 영어로 조합된 두 자리 문자열
.* 모든 문자열
c. c로 시작하는 두 자리 문자열
c.* c로 시작하는 모든 문자열
c\. 문자열 "c."
c\d
c[0-9]
c와 숫자로 구성된 두 자리 문자열
c.*t c로 시작하고 t로 끝나는 문자열
[b|c].*
[bc].*
[b-c].*
b또는 c로 시작하는 문자열
[^b|c].*
[^bc].*
[^b-c].*
b또는 c로 시작하지 않는 문자열
.*a.* a를 포함하는 모든 문자열
.*a.+ a를 포함하지만 a하나만으로 끝나지 않는 모든 문자열
[b|c].{2} b또는 c로 시작하는 세 자리 문자열
\\d{3,4} 3~4자리 숫자