Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 인터프린터언어
- java최솟값구하기
- 항해99후기
- java기본자료형
- 격파르타장점
- 노베이스부트캠프
- java알고리즘문제풀이
- 코딩부트캠프후기
- java set 저장
- java list 저장
- 격파르타비전공자
- 프로그래머스
- 컴파일
- sqld자격증합격
- 항해15기
- javaJRE
- javaJVM
- java참조자료형
- java set 출력
- java map 출력
- java list 출력
- java 자료구조 활용
- java map 저장
- java map
- 격파르타후기
- 작은수제거하기
- 프로그래머스제일작은수
- 격파르타합격후기
- java알고리즘
- 비전공자sqld
Archives
- Today
- Total
코딩과 결혼합니다
230924 - 자바의 정석 chapter 09 본문
728x90
⭐Object 클래스
- equals(Object obj)
- 주소값으로 비교
- 두 개의 참조변수가 같은 객체를 참조하고 있는지, 즉 두 참조변수에 저장된 값(주소값)이 같은지를 판단
- hashCode()
- 해싱기법에 사용되는 '해시함수'를 구현
- 해싱 : 데이터관리기법 중의 하나, 다량의 데이터를 저장하고 검색하는데 유용
- 해시함수 : 찾고자 하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드를 반환
- 해싱기법을 사용하는 HashMap이나 HashSet과 같은 클래스에 저장할 객체라면 반드시 hashCode메서드를 오버라이딩해야 한다.
- System.identityHashCode(Object x) : 객체의 주소값으로 해시코드를 생성하기 때문에 모든 객체에 대해 항상 다른 해시코드값을 반환할 것을 보장한다.
- toString()
- 인스턴스에 대한 정보를 문자열로 제공할 목적
- toString()을 오버라이딩 하지 않는다면 ➡️ 16진수의 해시코드를 얻음
- 오버라이딩 할 때, Object클래스에 정의된 toString접근 제어자가 public이므로 이를 오버라이딩하는 클래스의 toString()의 접근제어자도 public으로 한다. - 조상에 정의된 접근범위보다 같거나 더 넓어야 하기 때문
- clone()
- 자신을 복제하여 새로운 인스턴스를 생성
- 단순히 인스턴스의 변수 값만 복사한다.
- clone메서드를 오버라이딩해서 새로운 배열을 생성하고 배열의 내용을 복사하도록 함
- 복제할 클래스가 Cloneable인터페이스를 구현 (이게 구현되어 있다는 것은 작성자가 복제를 허용한다는 뜻)
- clone()을 오버라이딩하면서 접근제어자를 protected에서 public으로 변경
- 공변 반환타입 : JDK1.5부터 추가. 오버라이딩할 때 조상 메서드의 반환타입을 자손 클래스의 타입으로 변경 허용
실제 반환되는 자손 객체의 타입으로 반환할 수 있어 번거로운 형변환이 줄어든다. - 얕은 복사 / 깊은 복사
- 얕은 복사 : clone()으로 복제하는 경우 원본과 복제본이 같은 객체를 공유하므로 완전한 복제로 보기 어려움
- 깊은 복사 : 원본이 참조하고 있는 객체까지 복제
- getClass()
- 자신이 속한 클래스의 Class객체를 반환하는 메서드
- 클래스 객체 : 클래스 파일을 읽어서 사용하기 편한 형태로 저장해 놓은 것
- 클래스 객체를 이용하면 클래스에 정의된 멤버의 이름이나 개수 등, 클래스에 대한 모든 정보를 얻을 수 있기 때문에 클래스 객체를 통해서 객체를 생성하고 메서드를 호출하는 등 보다 동적인 코드를 작성할 수 있다.
⭐String클래스
- 문자열을 저장하고 이를 다루는데 필요한 메서드를 제공
- 변경불가능한 클래스 : 문자열은 읽어 올 수만 있고, 변경할 수 없다.
- 문자열을 결합하는 경우 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String인스턴스가 생성되는 것
- 메모리공간을 차지하게 되므로 가능한 한 결합횟수를 줄이는 것이 좋음
- 문자열간의 결합이나 추출 등 문자열들을 다루는 작업이 많이 필요할 경우 ➡️ StringBuffer클래스 사용 추천
- 문자열의 비교
- String클래스의 생성자를 이용한 경우 new연산자에 의해서 메모리할당이 이루어지기 때문에 항상 새로운 String인스턴스가 생성
- 문자열 리터럴은 이미 존재하는 것을 재사용
- equals()를 사용 = 두 문자열의 내용을 비교 (오버라이딩 된 클래스)
- '=='로 비교했을 때는 주소값을 비교하므로 결과가 다름
- 빈 문자열
- 길이가 0인 배열이 존재할 수 있다.
- 그러나 char형 변수에는 반드시 하나의 문자를 지정해야 한다.
- join()과 StringJoiner
- join() 여러 문자열 사이에 구분자를 넣어 결합 <ㅡ> split()
- JDK1.8부터 추가됨
- 문자 인코딩 변환
- getBytes 사용
- 서로 다른 문자 인코딩을 사용하는 컴퓨터 간에 데이터를 주고받을 때는 적절한 문자 인코딩 필요.
- 기본형 값을 String으로 변환
- 빈 문자열을 더하는 방법이 간단하고 편하다. 성능향상이 필요한 경우에는 valueOf()사용
- String을 기본형 값으로 변환
- patseInt()
- 메서드의 이름을 통일하기 위해 valsuOf()가 추가 됨. 내부에서 그저 parseInt(String s)를 호출할 뿐이므로, 반환타입만 다르지 같은 메서드이다.
⭐StringBuffer클래스와 StringBuilder클래스
- StringBuffer클래스 생성자
- 인스턴스에 저장될 문자열의 길이를 고려하여 충분히 여유있는 크기로 지정하는 것이 좋다.
- 배열의 길이는 변경될 수 없으므로 새로운 길이의 배열을 생성한 후에 이전 배열의 값을 복사하는 버퍼의 크기를 증가시키는 작업이 수행된다.
- StringBuffer의 변경
- append() : 반환타입이 StringBuffer일 때. 연속적으로 호출 가능
- StringBuffer의 비교
- equls메서드를 오버라이딩하지 않아서 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.
- toString()은 오버라이딩되어 있어 담고있는 문자열을 String으로 반환한다.
- StringBuffer인스턴스에 담긴 문자열을 비교 : toString()을 호출해서 String인스턴스를 얻는다. ➡️ 여기에 equals메서드를 사용해서 비교
- StringBuilder
- StringBuffer는 멀티쓰레드에 안전하도록 동기화 되어있다. 동기화는 StringBuffer의 성능을 떨어뜨린다.
- StringBuilder는 StringBuffer에서 쓰레드의 동기화만 뺀 것이다.
⭐Math클래스
- 기본적인 수학계산에 유용한 메서드로 구성
- 접근제어자가 private으로 다른 클래스에서 Math인스턴스를 생성할 수 없도록 되어있다.
- 클래스 내에 인스턴스변수가 하나도 없어서 인스턴스를 생성할 필요가 없기 때문
- 올림, 버림, 반올림
- round() : 반올림한 값을 얻을 때 사용 - 소수점 첫째자리에서 반올림 해서 정수값을 결과로 돌려줌
- rint()
- 반환값이 double로 round와 차이가 있다.
- 두 정수의 정가운데 있는 값은 가장 가까운 짝수 정수를 반환
- 메서드 이름에 'Exact'가 포함된 메서드들 - 오버플로우 감지를 위함
- 삼각함수와 지수, 로그
- sqrt() : 제곱근 계산
- pow() : n제곱을 계산
⭐래퍼 클래스
- 자바에서는 8개의 기본형을 객체로 다루지 않는다. 객체로 다뤄야 하는 경우 래퍼클래스를 사용.
- 래퍼클래들은 모두 equls()가 오버라이딩되어 있다.
- toString()도 오버라이딩 되어 있음.
- MAX_VALUE, MIN_VALUE, SIZE, BYTESTYPE 등의 static 상수를 공통적으로 가지고 있다.
⭐Number클래스
- 추상크래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상
- 객체가 가지고 있는 값을 숫자와 관련된 기본형으로 변환하여 반환하는 메서드들을 정의하고 있다.
- 문자열을 숫자로 변환하기
- JDK1.5부터 도입된 '오토박싱' 기능 때문에 반환값이 기본형일 때와 래퍼클래스일 때의 차이가 없어졌다. 그냥 구별없이 valueOf()를 쓰는 것도 괜찮은 방법니다. 단, 성능은 valueOf()가 조금 더 느리다.
- 오토박싱 & 언박싱 - 컴파일러가 자동으로 변환하는 코드를 넣어준다.
- 오토박싱 : 기본형 값을 래퍼클래스의 객체로 자동 변환해주는 것
- 언박싱 : 반대로 변환
유용한 클래스
⭐java.util.Objects클래스
- Object클래스의 보조클래스로 모든 메서드가 'static'이다. 널 체크에 유용함
- isNull() : 해당 객체가 널인지 확인
- nonNull() : isNull()과 반대의 일을 함.
- compare() : 두 비교대상이 같으면 0, 크면 양수, 작으면 음수 반환
- Objects의 equals() : + 내부적으로 null검사
- deepEquals() : 문자열 배열을 비교
- Objects의 toString() : + 내부적으로 null검사
- Objects의 hashCode : + 내부적으로 null검사
⭐java.util.Random클래스
- 난수를 얻는 방법
- 종자값을 System.currentTimeMillis()로 하기 때문에 실행할 때마다 얻는 난수가 달라진다.
- 같은 종자값을 갖는 Random인스턴스는 시스템이나 실행시간 등에 관계 없이 항상 같은 순서로 반환할 것을 보장
⭐정규식 - java.util.regex패키지
- 미리 정의된 기호와 문자를 이용해서 작성한 문자열
- 정규식의 일부를 괄호로 묶어서 그룹화
⭐java.util.Scanner클래스
- 화면, 파일, 문자열과 같은 입력소스로부터 문자데이터를 읽어오는데 도움을 줌
Scanner in = new Scanner(System.in); // Scanner 객체 생성
byte a = in.nextByte(); // byte 형 입력 및 리턴
short b = in.nextShort(); // short 형 입력 및 리턴
int c = in.nextInt(); // int 형 입력 및 리턴
long d = in.nextLong(); // long 형 입력 및 리턴
float e = in.nextFloat(); // float 형 입력 및 리턴
double f = in.nextDouble(); // double 형 입력 및 리턴
boolean g = in.nextBoolean(); // boolean 형 입력 및 리턴
String h = in.next(); // String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽음)
String i = in.nextLine(); // String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
⭐java.util.StringTokenizer클래스
- 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 문자열로 잘라내는데 사용된다.
- StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못하기 때문에 복잡한 형태의 구분자로 문자열을 나눠야 할때는 정규식을 사용하는 메서드를 사용해야 한다.
- split()과 StringTokenizer
- split()은 빈문자열도 토큰으로 인식하나 StringTokenizer는 그렇지 않음
- split()은 데이터를 토큰으로 잘라낸 결과를 배열에 담아서 반환 / 데이터를 토큰으로 바로바로 잘라서 반환하는 StringTokenizer 보다 성능이 떨어진다.
⭐java.math.BigInteger클래스
'2세 > Java' 카테고리의 다른 글
231014 - 자바의 정석 chapter 11 (컬렉션 프레임워크) (2) | 2023.10.14 |
---|---|
230926 - 자바의 정석 chapter 10 (날짜와 시간 & 형식화) (0) | 2023.09.27 |
230921 - 자바의 정석 chapter 08 (0) | 2023.09.21 |
230919 - 자바의 정석 chapter 07 (362p ~411p) (0) | 2023.09.19 |
230918 - 자바의 정석 chapter 07 (308~361p) (0) | 2023.09.18 |