정리/Java

자바의 정석 109~113강 ch9 java.lang 패키지와 유용한 클래스(2)

민발자 2023. 8. 13. 02:37
728x90

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); // 언박싱 컴파일러가 해주기 때문에 변환없이 꺼낼수있음
728x90