티스토리 뷰
반응형
[Java의 정석 - http://www.yes24.com/Product/Goods/24259565]
1. java.lang 패키지
- java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다
- java.lang 패키지의 클래스들은 import 없이 사용할 수 있다
1.1 Object 클래스
- 모든 클래스의 최고 조상
- 멤버변수는 없음
- Object 클래스의 메서드
- 모든 클래스에서 바로 사용 가능
- 모든 인스턴스가 가져야할 기본적인 것들
- protected Object clone() : 객체 자신의 복사본을 반환
- 자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다
- 단순히 인스턴스변수의 값만을 복사하기 때문에 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않는다
- clone()을 사용하려면 복제할 클래스가 Cloneable 인터페이스를 구현해야하고 clone()을 오버라이딩하면서 접근 제어자를 protected에서 public으로 변경한다
- Cloneable을 구현해야하는 이유는 인스턴스의 데이터를 보호하기 위해서
- Cloneable가 구현되었다는 것은 클래스의 작성자가 복제를 허용한다는 의미
- public boolean equals(Object obj) : 객체 자신과 객체 obj가 같은 객체인지 알려준다(같으면 true)
- 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean 값으로 알려 주는 역할을 한다
- 두 객체의 같고 다름을 참조변수의 값으로 판단
- 값 비교를 위해서 주로 오버라이딩해서 사용
- protected void finalize() : 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출
- public Class getClass() : 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환
- 자신이 속한 클래스의 Class 객체를 반환하는 메서드
- Class 객체 : 이름이 'Class'인 클래스의 객체
- 클래스의 모든 정보를 담고 있음
- 클래스 당 1개만 존재
- 클래스 파일이 클래스 로더(ClassLoader)에 의해서 메모리에 올라갈 때 자동으로 생성
- 클래스 로더 : 실행 시에 필요한 클래스를 동적으로 메모리에 로드하는 역할
- 클래스 파일을 읽어서 사용하기 편한 형태로 저장해 놓은 것이 클래스 객체
- Class 객체를 얻는 방법
- Card().getClass() : 생성된 객체로부터 얻는 방법
- Card.class : 클래스 리터럴(*.class)로부터 얻는 방법
- Class.forName("Card") : 클래스 이름으로부터 얻는 방법
- Class 객체를 통해서 객체를 생성하고 메서드를 호출하는 등 동적인 코드를 작성할 수 있다
- ex) Card.class.newInstance() : Class 객체를 이용해서 객체 생성
- public int hashCode() : 객체 자신의 해시코드를 반환
- 해싱(hasing) 기법에 사용되는 해시함수(hash function)를 구현한 것
- 해시함수는 찾고자하는 값을 입력하면 그 값이 저장된 위치를 알려주는 해시코드(hash code)를 알려준다
- 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다
- 값으로 비교를 위해서는 hasCode()를 오버라이딩해서 사용해야 한다
- public String toString() : 객체 자신의 정보를 문자열로 반환
- 인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것
- 클래스 이름 + 16진수의 해시 코드 리턴
- 보통 인스턴스 변수에 저장된 값들을 문자열로 표현하기 위해 오버라이딩해서 사용
- public void notify() : 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨움
- public void notifyAll() : 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨움
- public void wait(), public void wait(long timeout), public void wait(long timeout, int nanos)
: 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다(timeout은 천 분의 1초, nanos는 10^9의 1초)
- 공변 변환타입(convariant return type)
- 오버라이딩할 때 조상 메서드의 반환타입을 자손 클래스의 타입으로 변경을 허용하는 것
- 얕은 복사와 깊은 복사
- 얕은 복사(shallow copy)
- 단순히 객체에 저장된 값을 그대로 복제
- 원본을 변경하면 복사본도 영향을 받는다
- 깊은 복사(deep copy)
- 원본이 참조하고 있는 객체까지 복제
- 원본의 변경이 복사본에 영향을 미치지 않는다
- 얕은 복사(shallow copy)
1.2 String 클래스
- String 클래스 : 문자열을 위한 클래스
- 문자열을 저장하고 이를 다루는데 필요한 메서드 함께 제공
- 변경 불가능한(immutable) 클래스
- String 클래스는 문자열을 저장하기 위해서 문자형 배열 참조변수(char[]) value를 인스턴스 변수로 정의해놓고 있다
- 한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고 변경할 수는 없다
- 생성 방법
- 문자열 리터럴 지정하기
- String 클래스의 생성자를 이용해서 만들기
- 문자열 리터럴
- 자바 소스파일에 포함된 모든 문자열 리터럴은 컴파일 시에 클래스 파일에 저장된다
- 같은 내용의 문자열 리터럴은 한번만 저장된다
- 리터럴들은 상수 저장소(constant pool)에 저장된다
- 빈 문자열(empty string)
- 길이가 0인 문자열("")
- String은 빈 문자열로 초기화하는게 보통
- String 클래스의 생성자와 메서드
- String(String s/char[] value/StringBuffer buf)
- 주어진 문자열를 갖는 인스턴스 생성
- char charAt(int index)
- 지정된 위치에 있는 문자열을 알려줌
- int compareTo(String str)
- 문자열(str)과 사전순서로 비교함
- 같으면 0, 사전순으로 이전이면 음수, 이후면 양수
- Stirng concat(String str)
- 문자열을 뒤에 덧붙임
- boolean contains(CharSequence s)
- 지정된 문자열(s)이 포함되었는지 검사
- boolean endsWith(String suffix)
- 지정된 문자열(suffix)로 끝나는지 검사
- boolean equals(Object obj)
- 매개변수로 받은 문자열(obj)과 String 인스턴스의 문자열 비교
- obj가 String이 아니거나 문자열이 다르면 false를 반환
- boolean equalsIgnoreCase(String str)
- 문자열과 String 인스턴스의 문자열을 대소문자 구분없이 비교
- int indexOf(int ch)
- 주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치를 알려준다
- 못 찾으면 -1을 반환
- int indexOf(int ch, int pos)
- 주어진 문자가 문자열에 존재하는지 지정된 위치부터 확인하여 위치를 알려준다
- 못찾으면 -1을 반환
- int indexOf(String str)
- 주어진 문자열이 존재하는지 확인하여 그 위치를 알려줌
- 없으면 -1을 반환
- String intern()
- 만자열을 상수풀(constant pool)에 등록한다
- 이미 상수풀에 같은 내용의 문자열이 있을 경우 그 문자열의 주소값을 반환한다
- int lastIndexOf(int ch/String str)
- 지정된 문자 또는 문자코드/문자열를 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다
- 못 찾으면 -1 반환
- int length()
- 문자열의 길이를 알려준다
- String replace(char old, char nw)
- 문자열 중의 문자(old)를 새로운 문자(nw)로 모두 바꾼 문자열을 반환한다
- String replaceAll(String regex, String replacement)
- 문자열 중에서 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(replacement)로 모두 변경한다
- String replaceFirst(String regex, String replacement)
- 문자열 중에서 지정된 문자열(regex)과 일치하는 것 중 첫번째 것만 새로운 문자열(replacement)로 변경한다
- String[] split(String regex)
- 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다
- String[] split(String regex, int limit)
- 문자열을 지정된 분리자(regex)로 나누어 문자열배열에 담아 반환한다
- 단 문자열 전체를 지정된 수(limit)로 자른다
- boolean startsWith(String prefix)
- 주어진 문자열로 시작하는지 검사한다
- String substring(int begin[,int end])
- 주어진 시작위치부터 끝 위치 범위에 포함된 문자열을 얻는다
- 시작위치의 문자는 범위에 포함되지만 끝 위치의 문자는 포함되지 않는다
- String toLowerCase()
- String 인스턴스에 저장되어있는 모든 문자열을 소문자로 변환하여 반환한다
- String toString()
- 문자열 반환
- String toUpperCase()
- String 인스턴스에 저장되어있는 모든 문자열을 대문자로 변환하여 반환한다
- String trim()
- 문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다
- 문자열 중간에 있는 공백은 제거되지 않는다
- static String valueOf(boolean b/char c/int i/long l/float f/double d/Object o)
- 지정된 값을 문자열로 변환하여 반환한다
- 참조변수의 경우 toString()을 호출한 결과를 반환한다
- String(String s/char[] value/StringBuffer buf)
- join()과 StringJoiner
- join() : 여러 문자열 사이에 구분자를 넣어서 결합
- split() : 구분자로 문자열을 자름
- 보충 문자(supplementary characters)
- char에서 int형으로 확장되면서 새로 추가된 문자들
- 위에 정리한 메서드 중 매개변수가 int ch인 것들은 보충 문자를 지원하는 것
- char ch는 보충 문자를 지원하지 않는 것
- 문자 인코딩 변환
- getBytes(String charsetName) : 문자열의 문자 인코딩을 다른 인코딩으로 변환할 수 있음
- String.format()
- 형식화된 문자열을 만들어내는 방법
- 기본형 값을 String으로 변환
- 숫자를 문자열로 변환
- 숫자 + 빈문자열("")
- valueOf() 사용
- 숫자를 문자열로 변환
- String을 기본형 값으로 변환
- valueOf() 사용
- parseInt() 사용
- 문자열에 공백 또는 문자가 포함되어 있는 경우 변환 시 예외(NumberFormatException)이 발생할 수 있음
- trim()을 함께 사용해주면 좋음
- 부호를 의미하는 '+'나 소수점을 의미하는 '.'와 float 형 값을 뜻하는 f와 같은 자료형 접미사는 자료형에 알맞는 변환을 하는 경우 허용
1.5 래퍼(wrapper) 클래스
- 자바에서는 8개의 기본형을 객체로 다루지 않음
- 래퍼(wrapper) 클래스
- 기본형(primitive type) 변수도 객체로 다룰 수 있게 해줌
- 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받음
- 각 자료형에 알맞는 문자열을 사용해야 됨
- 객체 생성 시에 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있음
- 래퍼 클래스의 생성자
- boolean -> Boolean
- Boolean (boolean value)
- Boolean (String s)
- char -> Character
- Character (char value)
- byte -> Byte
- Byte (byte value)
- Byte (String s)
- short -> Short
- Short (short value)
- Short (String s)
- int -> Integer
- Integer (int value)
- Integer (String s)
- long -> Long
- Long (long value)
- Long (String s)
- float -> Float
- Float (double value)
- Float (float value)
- Float (String s)
- double -> Double
- Double (double value)
- Double (String s)
- boolean -> Boolean
- 메서드
- 래퍼 클래스는 모두 equals()가 오버라이딩되어 있어 주소값이 아닌 객체가 가지고 있는 값을 비교함
- 비교 연산자는 사용할 수 없고 그대신 compareTo() 제공
- toString()도 오버라이딩되어 있음
- MAX_VALUE, MIN_VALUE, SIZE, BYTES, TYPE 등의 static 상수를 공통적으로 가지고 있음
- Number 클래스
- 추상 클래스
- 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상
- 문자열을 숫자로 변환하기 : valueOf()가 조금 더 느림
- 문자열 -> 기본형 : 타입.parse타입(String s[,int radix])
- Byte.parseByte()
- Shotr.parseShort()
- Integer.parseInt()
- Long.parseLong()
- Float.parseFloat()
- Double.parseDouble()
- 문자열 -> 래퍼 클래스 : 타입.valueOf(String s)
- Byte.valueOf()
- Short.valueOf()
- Integer.valueOf()
- Long.valueOf()
- Float.valueOf()
- Double.valueOf()
- 문자열 -> 기본형 : 타입.parse타입(String s[,int radix])
- 오토박싱 & 언박싱
- 오토박싱(autoboxing) : 기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것
- 언박싱(unboxing) : 래퍼 클래스의 객체를 기본형 값으로 변환해주는 것
2. 유용한 클래스
2.1 java.util.Objects 클래스
- Objects 클래스
- Object 클래스의 보조 클래스
- 모든 메서드가 static
- 객체의 비교나 널 체크(null check)에 유용
- 메서드
- isNull(Object obj) : 해당 객체가 널인지 확인해서 Null이면 true를 반환하고 아니면 false를 반환
- nonNull(Object obj) : isNull()과 정반대, !Objects.isNull()과 같음
- requireNonNull(T obj[, String message | Supplier<String> s]) : 해당 객체가 널이 아니어야 하는 경우에 사용
- 객체가 널이면 NullPointerException을 발생시킴
- 두 번째 매개변수로 지정하는 문자열은 예외 메세지가 됨
- compare(Object a, Object b, Comparator c) : 두 비교대상이 같으면 0, 크면 양수, 작으면 음수 반환
- equals(Object a, Object b) : 내부에서 널 검사를 해줌
- deepEquals(Object a, Object b) : 객체를 재귀적으로 비교해서 다차원 배열의 비교도 가능
- toString(Object obj[, String nullDefault]) : 내부적으로 널 검사를 해줌, 두번째 매개변수는 널일 경우 사용할 값
- hashCode(Object obj) : 내부적으로 널 감사를 해줌
- hash(Object... values) : 매개변수 가변
반응형
'study > 자바의정석' 카테고리의 다른 글
Chapter14. 람다와 스트림 (0) | 2021.08.21 |
---|---|
Chapter.15 입출력 I/O (0) | 2021.06.13 |
Chapter12. 지네릭스, 열거형, 애너테이션 (0) | 2021.06.06 |
Chapter11. 컬렉션 프레임웍(Collections Framework) (0) | 2021.06.02 |
Chapter08. 예외처리 exception handling (0) | 2021.05.17 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- docker pull limit
- back merge
- Spring
- gradle
- gasmask
- java
- 도커
- clean code
- 자바
- kotlin In Action
- 자바스크립트
- ImagePullBackOff
- 도메인주도설계
- docker
- Kubernetes
- 스프링
- 스프링부트
- 클린코드
- k8s
- cacheable
- 코틀린
- kotlin
- springboot
- ddd
- JavaScript
- docker for mac
- IntelliJ
- QuickTimePlayer
- linuxkit
- 쿠버네티스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함