[JAVA]java.lang 패키지&유용한 클래스

yoon·2023년 12월 7일
0

java

목록 보기
9/19
post-thumbnail

✅ Object 클래스

모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능

✔ equals()

두 객체의 같고 다름을 참조변수의 값(주소)으로 판단한다.
그렇기 때문에 서로 다른 두 객체를 equals로 비교하면 항상 false를 반환한다.

주소값이 아니라 객체가 가지고 있는 값(value)을 비교하려면 equals메서드를 오버라이딩해야한다. String클래스는 같은 문자열을 가지면 true를 반환하도록 오버라이딩되어있다.

✔ hashCode()

해싱(hashing)기법에 사용되는 해시함수를 구현한 것이다.
해싱은 데이터 관리기법 중의 하나인데 다량의 데이터를 저장하고 검색하는데 유용하다.
해시 함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드를 반환한다.

✔ toString()

오버라이딩하지않으면 기본적으로 클래스이름@주소값을 반환한다.
String클래스는 오버라이딩되어 있기 때문에 담고있는 문자열 내용을 반환해준다.

✅ String 클래스

변경불가능한 (immutable) 클래스이다.
한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수 없다.

String a = "a";
String b = "b";
a = a+b;

예를 들어 위와 같이 +연산자를 이용하여 a = "ab";를 만들어보자
이때, 인스턴스내의 문자열이 바뀌는 것이 아니라 새로운 문자열("ab")이 담긴 String 인스턴스가 생성된다.
그렇기 때문에 메모리 공간을 위해 결합 횟수는 줄이는 것이 좋다.

✔ 문자열 비교

String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

// == : 등가 연산자로 주소를 비교한다.
System.out.println(str1.equals(str2)); //true
System.out.println(str1==str2); //true
System.out.println(str3.equals(str4)); //true
System.out.println(str3==str4); //false

String클래스의 생성자를 이용한 경우에는 new연산자에 의해서 메모리 할당이 이루어지기 때문에 항상 새로운 인스턴스가 생성된다. 하지만 "abc"처럼 문자열 리터럴은 이미 존재하는 것을 재사용한다.

→ 즉, str1과 str2가 가리키는 주소값은 "abc"를 저장하고 있는 주소로 같은 값을 가진다.
   하지만 str3과 str4는 각각 다른 주소값을 가르킨다.

✔ 문자열 리터럴

문자열 리터럴은 한번만 저장된다. 문자열은 immutable하기 때문에 내용을 변경할 수 없으니 하나의 인스턴스를 공유해도 괜찮기 때문이다.

✔ 빈 문자열(empty string)

String s = ""; //빈 문자열로 초기화 (char[] chArr = new char[0];)
char ch = ' '; //공백으로 초기화

문자열은 길이가 0일 수 있지만 char는 불가능하다.

✔ join()과 StringJoiner

1. join

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

2. StringJoiner

StringJoiner sj = new StringJoiner(",","[","]");
String[] arr = {"aaa","bbb","ccc"};

for (String s: arr)
	sj.add(s.toUpperCase());
System.out.println(sj.toString()); // [AAA,BBB,CCC]

✔ 문자열과 기본형 형변환

int i = 100;
String str1 = i+"";
String str2 = String.valueOf(i);

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

✅ StringBuffer 클래스

String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼를 가지고 있다.
버퍼의 크기는 인스턴스를 생성할 때 지정해줄 수 있는데 편집할 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다. 기본 크기는 16이다.

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

✔ equals(),toString()

StringBuffer클래스는 equals메서드를 오버라이딩하지 않아서 주소값으로 비교한다.
toString메서드는 오버라이딩되어 있기때문에 담고 있는 문자열의 내용을 반환한다.
그래서 두 문자열의 내용을 비교하고 싶다면 두 메서드를 조합해서 사용해야한다.

StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

String s1 = sb1.toString();
String s2 = sb2.toString();

System.out.println(s1.equals(s2));

✅ StringBuilder 클래스

멀티 쓰레드로 작성된 프로그램이 아닌 경우, StringBuffer의 성능을 떨어뜨린다.
그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuilder가 새로 추가되었다.

✅ Math 클래스

1. ceil() : 올림
2. floor() : 버림
3. round() : 반올림
4. abs() : 절댓값
5. max,min() : 두 수 중 최대, 최소
6. random() : 랜덤

✅ Wrapper 클래스

기본형 변수를 객체로 다룰 때 사용하는 클래스이다.
래퍼 클래스들은 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.

Integer i = new Integer(100);

✔ 박싱 & 언박싱

  • 오토박싱 : 10 > new Integer(10) → 기본 데이터 타입 > 객체
  • 언박싱 : new Integer(10) > 10 → 객체 > 기본 데이터 타입
//auto-boxing
Integer i = 10;

//unboxing
System.out.println(i.intValue());

//auto-unboxing
int b = i;
profile
하루하루 차근차근🌱

0개의 댓글