[JAVA]Object, String, StringBuffer, StringBuilder, Math, Wrapper, Calendar 클래스

ggamang·2022년 9월 17일
0

JAVA&Spring

목록 보기
7/27

Object클래스

모든 클래스의 최고 조상

오직 11개의 메서드만을 가지고 있다.

equals(Object obj)

객체 자신과 주어진 객체를 비교한다 ☞ 객체의 "주소"를 비교한다
주소가 같으면 true, 다르면 false

equals()의 오버라이딩

인스턴스 변수의 "값"을 비교하도록 equals()를 오버라이딩해야 한다.

hashCode()

객체의 해시코드(hash code)를 반환하는 메서드
Object클래스의 hashCode() 객체의 주소를 int로 변환해서 반환

public class Object {
	...
    public native int hashcode();	// OS에 작성되어 있는 메서드라 내용 작성 X
}

네이티브 메서드 : OS가 가지고 있는 메서드

equals()를 오버라이딩하면, hashCode()도 오바라이딩해야한다.
(=equals() 결과가 true인 두 객체의 해시코드는 같아야 하기 때문)

toString()

객체(=iv값)를 문자열로 변환하기 위한 메서드

String클래스

String클래스 = 데이터(char[]) + 메서드(문자열 관련)

내용을 변경할 수 없는 불변(immutable) 클래스이다
☞ + 를 이용한 문자열 결합은 성능이 떨어지므로, 문자열 결합 및 변경이 잦으면 내용이 변경가능한 StringBuffer를 사용한다

문자열의 비교

// 문자열 리터럴 "abc" 주소 str1, str2 각각 저장(같은 주소 공유)
String str1 = "abc";
String str2 = "abc";

// 새로운 String 인스턴스를 생성, 각기 다른 주소로 저장
String str3 = new String("abc");
String str4 = new String("abc");

== : 주소비교
equals() : 값 비교

문자열 리터럴

문자열 리터럴은 프로그램 실행 시 자동으로 생성된다 (Constant pool에 저장)

같은 내용의 문자열 리터럴은 하나만 만들어진다(String객체는 불변이기에 하나를 공유해도 문제되지 않는다)

빈 문자열("", empty string)

내용이 없는 문자열
크기가 0인 char형 배열을 저장하는 문자열

// char와 String의 초기화

String s = "";
char c = ' ';

String클래스의 생성자와 메서드

String(char[] value)

주어진 문자열을 갖는 String 인스턴스 생성

String(StringBuffer buf)

StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String인스턴스를 생성한다

char charAt(int index)

지정된 위치에 있는 문자를 알려준다

int compareTo(String str)

문자열을 사전순서로 비교한다. 같으면 0을, 사전순으로 이전이면 음수를, 이후면 양수를 반환한다.

String concat(String str)

문자열을 뒤에 덧붙인다

boolean contains(CharSequence s)

지정된 문자열 s가 포함되었는지 검사한다

boolean endsWith(String suffix)

지정된 문자열로 끝나는지 검사한다
⎻ cf. startWith()

boolean equals(Object obj)

매개변수 문자열과 String 인스턴스 문자열 비교

boolean equalsIgnoreCase(String str)

대소문자 구분없이 문자열 비교

int indexOf(int ch)

주어진 문자가 문자열에 존재하는지 확인하여 위치를 알려준다. 못 찾으면 -1을 반환한다

int indexOf(int ch, int pos)

문자열에 위치하는지를 지정된 위치부터 확인하여 index를 알려준다

int indexOf(String str)

주어진 문자열이 존재하는지 확인하여 그 위치를 알려준다

int lastIndexOf(int ch)

지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다(문자열 index는 고정이다)

int lastIndexOf(String str)

문자열 오른쪽 끝에서부터 찾아서 위치를 알려준다(문자열 index는 고정이다)

int length()

문자열 길이 반환

String[] split(String regex)

문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다

String[] split(String regex, int limit)

문자열을 지정된 분리자로 나누어 문자열 배열에 담아 반환한다. 단, 문자열 전체를 지정된 수로 자른다

boolean startsWith(String prefix)

주어진 문자열로 시작하는지 검사

String substring(int begin), String substring(int begin, int end)

주어진 시작위치부터 끝 위치 범위에 포함된 문자열을 얻는다. (시작위치는 문자 범위에 포함되나, 끝 위치 문자는 포함되지 않는다)

String toLowerCase()

String인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환

String toUpperCase()

모든 문자열을 대문자로 변환하여 반환한다

String trim()

문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과 반환. 중간에 있는 공백은 제거되지 않는다

static String valueOf(...)

지정된 값을 문자열로 변환하여 반환한다.
참조변수의 경우, toString()을 호출한 결과를 반환한다

join()

여러 문자열 사이에 구분자를 넣어서 결합한다

String[] arr = animals.split(",");
String str = String.join("-", arr);

문자열과 기본형 간의 변환

숫자 → 문자열

숫자 + "";
String.valueOf(i);

문자열 → 숫자

int i = Integer.parseInt("100");

Integer i = Integer.valueof("100");
int i = Integer.valueof("100");

N진법의 문자열 → 숫자

int i = Integer.parseInt("100", 2) // 4
int i = Integer.parseInt("100", 8) // 64

StringBuffer 클래스

String과 달리 내용을 변경할 수 있다

StringBuffer 생성자

StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야 한다(저장 공간이 부족하면 배열 새로 생성해야한다)

StringBuffer()

16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성

StringBuffer(int length)

지정된 개수의 문자 버퍼를 가진 인스턴스 생성

StringBuffer(String str)

지정된 문자열 값을 갖는 인스턴스 생성

StringBuffer의 변경

StringBuffer sb = new StringBuffer("abc");
sb.append("123");

append() : 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
delete() : 삭제
insert() : 삽입
☞ 반환 타입이 StringBuffer

StringBuffer의 비교

StringBuffer는 equals()가 오버라이딩 되어 있지 않다 ☞ 주소비교
❗️ 즉, String으로 변환 후에 equals로 비교를 해야 한다

StringBuffer의 메서드

StringBuffer append(...)

매개변수로 입력된 값을 문자열로 변환하여 StringBuffer 문자열의 뒤에 덧붙인다

int capacity()

버퍼크기를 알려준다

int length()

저장된 문자열의 길이를 알려준다

char charAt(int index)

지정 위치의 문자 반환

StringBuffer delete(int start, int end)

시작위치~끝위치 사이 문자 제거 (끝 위치 문자는 제외)

StringBuffer deleteCharAt(int index)

지정된 위치 문자 제거

StringBuffer insert(int pos, ...)

두번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치에 추가한다

StringBuffer replace(int start, int end, String str)

지정된 범위 문자들을 주어진 문자열로 바꾼다. end 위치는 불포함

StringBuffer reverse()

문자열 순서를 거꾸로 나열한다

void setCharAt(int index, char ch)

지정된 위치 문자를 지정 문자로 바꾼다

void setLength(int newLength)

지정된 길이로 문자열 길이를 변경한다.
길이 늘리는 경우 나머지 빈 공간을 null문자('\u0000')로 채운다

String toString()

StringBuffer → String

String substring(int start), String substring(int start, int end)

지정된 범위 문자열을 String으로 뽑아서 반환

StringBuilder 클래스

StringBuffer는 동기화 되어 있으나(=멀티쓰레드에 안전), StringBuilder는 동기화 되어 있지 않다.

멀티쓰레드 프로그램이 아닐 경우, 동기화는 불필요한 성능저하를 야기하므로, 이럴 경우 StringBuilder 대신 StringBuilder를 사용하면 성능이 향상

Math 클래스

수학관련 static 메서드의 집합

Math 클래스 메서드

abs()

주어진 값의 절대값 반환

static double ceil(double a)

주어진 값을 올림하여 반환

static double floor(double a)

주어진 값을 버림하여 반환

max(..a, ..b), min(..a, ..b)

최댓값, 최솟값 반환

static double random()

0.0~1.0 사이 임의의 double값 반환

static double rint(double a)

주어진 double과 가장 가까운 정수값을 double형으로 반환
정 가운데 값은 짝수를 반환한다

static long round(double a | float a)

소수 첫째자리에서 반올림한 정수값을 반환
정가운데 값은 항상 큰 정수를 반환

Wrapper 클래스

기본형 값을 감싸는 클래스
8개 기본형을 "객체"로 다루어야할 때 사용한다

  • boolean ➣ Boolean
  • char ➣ Character
  • byte ➣ Byte
  • short ➣ Short
  • int ➣ Integer
  • long ➣ Long
  • float ➣ Float
  • double ➣ Double

Number 클래스

모든 숫자 래퍼 클래스의 조상

오토박싱 & 언박싱

오토박싱 : 기본형 → Wrapper클래스
언박싱 : Wrapper클래스 → 기본형

JDK1.5 이전에는 기본형, 참조형 간 연산이 불가능했다

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10) // [오토박싱]컴파일러: list.add(new Integer(10));
int value = list.get(0) // [언박싱]

Date, Calendar 클래스

java.time 패키지 - Date와 Calendar 단점을 개선한 새로운 클래스 제공

Calendar 클래스

get()

추상클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다

Calendar cal = Calendar.getInstance();	//현재 날짜와 시간으로 셋팅
int thisYear = cal.get(Calendar.YEAR);
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막 날

❗️ MONTH : 월_'0'부터 시작한다

set()

날짜와 시간 지정 가능하다

Calendar date1 = Calendar.getInstance();
date1.set(2017,7,15);

Calendar time1 = Calendar.getInstance():
time1.set(Calendar.HOUR_OF_DAY,10);
time1.set(Calendar.MINUTE,20);
time1.set(Calendar.SECOND,30);

clear()

Calendar 객체의 모든 필드 초기화

  • clear() : 모든 필드 초기화
  • clear(int field) : 특정 필드 초기화

add()

필드 값을 증가 또는 감소시킨다 (다른 필드에 영향을 준다)

roll()

특정 필드 값을 증가 또는 감소시키나, 다른 필드에 여향을 주지 않는다

Date와 Calendar간의 변화

  1. Calendar → Date
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMills());
  1. Date → Calendar
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);

Decimal Format, SimpleDateFormat

java.text패키지
숫자와 날짜를 원하는 형식으로 쉽게 출력 가능하다
반대로 형식 문자열에서 숫자와 날짜를 뽑아내는 기능도 있다

Decimal Format

숫자를 형식화할 때 사용한다

double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // "1.2E6"

특정 형식의 문자열을 숫자로 변환할 때도 사용한다

DecimalFormat df = new DecimalFormat("#,###.##");
Number num - df.parse("1,234,567.89");
double d = num.doubleValue();

❗️ Integer.pareInt()는 콤마가 포함된 문자열을 숫자로 변환하지 못한다

SimpleDateFormat

날짜와 시간을 다양한 형식으로 출력할 수 있게 한다

Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);

특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다

DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2015년 11월 23일");
String result = df2.format(d);

0개의 댓글