자바의 정석 109~113강 ch9 java.lang 패키지와 유용한 클래스(2)
ch 9-15~18 StringBuffer클래스
1. StringBuffer클래스
문자형 배열 char[] 을 내부적으로 가지고 있음
String과 다르게 내용 변경 가능 mutable
append() : 문자열을 추가할 수 있음
2. StringBuffer의 생성자
배열을 이용해 문자열을 다루기 때문에 배열의 길이가 부족하면 새로운 배열을 생성해야 함 → 저장할 문자열 길이를 고려해 생성
크기 미설정시 기본 크기 16
3. StringBuffer의 변경
append() : 지정된 내용 추가 후 StringBuffer 참조 반환
StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("zz");
// append()메서드는 StringBuffer의 참조를 반환하기 때문에
4. StringBuffer의 비교
equals() 오버라이딩 되어있지 않음 → 주소를 비교함
값 비교를 원하는 경우 String으로 변환 후 equals()로 비교
ch 9-15~18 StringBuffer 클래스의 메서드
메서드 | 설명 |
StringBuffer() | 16문자 담을 수 있는 StringBuffer 인스턴스 생성 |
StringBuffer(int length) | length만큼 담을 수 있는 StringBuffer 인스턴스 생성 |
StringBuffer(String str) | str을 갖는 StringBuffer 인스턴스 생성 |
StringBuffer append(boolean b) StringBuffer append(char c) StringBuffer append(char[] str) StringBuffer append(double d) StringBuffer append(float f) StringBuffer append(int i) StringBuffer append(long l) StringBuffer append(object obj) StringBuffer append(string str) |
매개변수로 입력된 값을 문자열로 변환해 StringBuffer 문자열 뒤에 추가 |
int capacity() | 버퍼 크기를 알려줌(length는 문자열 길이) |
char charAt(int index) | index위치의 문자 반환 |
StringBuffer delete(int start, int end) | start~end 사이 문자 제거, end index는 포함하지 않음 |
StringBuffer deleteCharAt(int index) | index위치의 문자 제거 |
StringBuffer insert(int pos, boolean b) StringBuffer insert(int pos, char c) StringBuffer insert(int pos, char[] str) StringBuffer insert(int pos, double d) StringBuffer insert(int pos, float f) StringBuffer insert(int pos, int i) StringBuffer insert(int pos, long l) StringBuffer insert(int pos, object obj) StringBuffer insert(int pos, String str) |
지정 위치 pos에 두 번째 매개변수 문자열로 변환하여 추가 |
int length() | 문자열 길이 반환 |
StringBuffer replace(int start, int end, String str) | start~end의 문자열을 str로 변경, end index는 포함되지 않음 |
StringBuffer reverse() | 문자열 순서를 거꾸로 나열 |
void setCharAt(int index, char ch) | index위치의 문자를 ch로 변경 |
void setLength(int newLength) | newLength로 문자열 길이 변경 → 빈공간은 널문자 '\u0000'으로 채움 |
String toString() | StringBuffer 문자열을 String으로 변환하여 반환 |
String subString(int start) String subString(int start, int end) |
지정된 범위의 문자를 String으로 뽑아서 반환, end index는 포함되지 않음 start만 있으면 start~끝까지 |
ch 9-21~24 StringBuilder, Math 클래스
1. StringBuilder
StringBuffer → 동기화, 멀티 쓰레드에 안전(thread-safe)
StringBuilder → 동기화 안됨
멀티 쓰레드 아닌 경우 동기화는 불필요한 성능 저하 → 싱글 쓰레드인 경우 StringBuilder 사용시 성능 향상
동기화 여부, 이름만 다르고 메서드 모두 동일
+)
싱글 쓰레드 : 한 번에 1개 작업
멀티 쓰레드 : 한 번에 여러 개 작업, 데이터 공유
2. Math클래스
수학 관련 static 메서드 집합
메서드 | 설명 |
static double abs(double a) static float abs(float f) static int abs(int f) static long abs(long f) |
주어진 값의 절대값 반환 양수 → 양수 음수 → 양수 |
static double ceil(double a) | 주어진 값 올림하여 반환 |
static double floor(double a) | 주어진 값 버림하여 반환 |
static double max(double a, double b) static float max(float a, float b) static int max(int a, int b) static long max(long a, long b) |
주어진 두 값 비교하여 큰 쪽 반환 |
static double min(double a, double b) static float min(float a, float b) static int min(int a, int b) static long min(long a, long b) |
주어진 두 값 비교하여 작은 쪽 반환 |
static double random() | 0.0~1.0범위의 임의의 double값 반환 |
static double rint(double a) | 주어진 값과 가장 가까운 정수값 double형으로 반환 정수 가운데 값 1.5, 2.5 등 짝수 반환 Math.rint(3.5), Math.rint(4.5) → 모두 4.0 반환 오차를 줄일 수 있음 |
static long round(double a) static long round(float a) |
소수점 첫째자리에서 반올림한 정수값long 반환 정수 가운데 값 1.5, 2.5 등 큰 정수 반환 Math.round(3.5) → 4 Math.round(4.5) → 5 |
ch 9-25~17 래퍼클래스, Number 클래스
1. 래퍼wrapper 클래스
기본형 값을 감싸는 클래스, 8개 기본형을 객체로 다루기 위해 사용하는 클래스
기본형 | 래퍼클래스 |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
2. Number 클래스
모든 숫자 래퍼 클래스의 조상
래퍼객체를 기본형으로 변경해주는 메서드를 가지고 있음 intValue(), longValue(), ...
ch 9-28~31 문자열과 숫자 변환, 오토박싱 & 언박싱
1. 문자열을 숫자로 변환하기
// 문자열 → 기본형
byte b = Byte.parseByte("100");
short s = Short.parseShort("100");
int i = Integer.parseInt("100");
long l = Long.parseLong("100");
float f = Float.parseFloat("3.14");
double d = Double.parseDouble("3.14");
// 문자열 → 래퍼 클래스
Byte b = Byte.valueOf("100");
Short s = Short.valueOf("100");
Integer i = Integer.valueOf("100");
Long l = Long.valueOf("100");
Float f = Float.valueOf("3.14");
Double d = Double.valueOf("3.14");
2. n진법의 문자열을 숫자로 변환하는 방법
Integer.parseInt("100", 2); // 4
Integer.parseInt("100", 8); // 64
Integer.parseInt("100", 16); // 256
Integer.parseInt("FF", 16); // 255
3. 오토 박싱&언박싱
오토박싱 : 기본형 → 래퍼클래스
언박싱 : 래퍼클래스 → 기본형
JDK1.5이전 기본형과 참조형간의 연산 불가능했지만 1.5 이후 컴파일러가 자동으로 박싱&언박싱해줘 연산 가능
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(100)); // list에는 객체만 추가 가능
list.add(100); // JDK1.5이후 자동으로 박싱해서 기본형으로 넣을 수 있음
Integer i1 = list.get(0); // list에 있는 객체 꺼냄
int i2 = list.get(0).intValue(); // Integer를 기본형 int로 변환하여 꺼냄
int i3 = list.get(0); // 언박싱 컴파일러가 해주기 때문에 변환없이 꺼낼수있음