java.lang패키지와 유용한 클래스
1. Object 클래스
java.lang패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
그러므로 java.lang패키지의 클래스들은 import문이 없어도 사용할 수 있다.
java.lang패키지의 여러 클래스 중에서 자주 사용되는 클래스에 대해 확인하자.
Object클래스는 모든 클래스의 최고 조상이기 때문에
Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다.
Object클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고 있다. (쓰레드와 관련된 건 우선 생략)
Object 클래스의 메서드 | 설명 |
protected Object clone() | 객체 자신의 복사본을 반환한다 |
public boolean equals(object obj) | 객체 자신과 객체 obj 가 같은 객체인지 알려준다. 같으면 true |
protected void finalize() | 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 이때 수행돼야하는 코드가 있을 때 오버라이딩 한다. |
public Class getClass() | 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환한다 |
public int hashCode() | 객체 자신의 정보를 해시코드로 반환한다 |
public String toString() | 객체 자신의 정보를 문자열로 반환한다 |
cf. protected는 오버라이딩해서 public으로 변경해야 한다.
1) Object 클래스의 메서드 - equals()
equals메서드는 참조변수의 주소값으로 비교하기 때문에,
v1, v2 의 멤버변수 value의 값이 동일하더라도, equals 메서드를 비교한 결과는 false일 수밖에 없다.
equals 메서드로 참조변수의 주소값이 아닌,
Value인스턴스가 가지고 있는 value값을 비교하도록 할 수는 없을까?
Value 클래스에서 euqals메서드를 오버라이딩하여
주소가 아닌 객체에 저장된 내용을 비교하도록 변경하면 된다.
즉, 인스턴스 변수(iv)의 값이 비교되도록 equals를 오버라이딩 해야 한다.
2) Object 클래스의 메서드 - hashCode()
Object클래스의 hashcode()는 객체의 주소를 정수로 변환해서 반환한다.
equals를 오버라이딩하면 , hashcode()도 오버라이딩해야 한다
왜냐하면 equals의 결과가 true인 두 객체의 해시코드는 같아야하기 때문이다
cf. System.identiyHashCode(Object x)객체마다 고유한 해시코드 반환
String클래스는 문자열의 내용이 같으면
동일한 해시코드를 반환하도록 hashCode메서드가 오버라이딩되어 있기 때문에,
문자열의 내용이 같은 str1과 str2에 대해 hashCode()를 호출하면 항상 동일한 해시코드값을 얻는다.
3) Object 클래스의 메서드 - toString()
toString : 객체를 문자열(String)으로 변환하기 위한 메서드
클래스를 작성할 때 toString()을 오버라이딩하지 않으면,
클래스이름과 16진수의 해시코드를 얻게 된다.
2. String 클래스
1) String 클래스
자바에서는 문자열을 위한 클래스를 제공한다. 그것은 바로 ‘String 클래스’이다.
String 클래스는 내용을 변경할 수 없는 불변(immutable)클래스이다.
한번 생성된 String인스턴스가 갖고 있는 문자열은 읽을 수만 있고, 변경할 수는 없다.
String a = “a”;
String b =”b”;
a=a+b;
위와 같이 ‘+’연산자를 이용해 문자열을 결합하는 경우,
인스턴스내의 문자열이 바뀌는 게 아니라
새로운 문자열(“ab”)이 담긴 String인스턴스가 생성된 것이다.
String클래스가 덧셈 연산자를 통해 문자열을 결합할 경우 성능이 떨어진다는 단점이 있다.
따라서 문자열의 결합이나 변경이 잦다면 StringBuffer클래스를 사용하는 것이 좋다.
Stringbuffer클래스는 내용 변경이 가능하다.
2) 문자열을 만드는 방법
① 문자열 리터럴을 지정하는 방법
② String 클래스의 생성자를 사용하는 방법
String str1 = “abc”; //문자열 리터럴 “abc”의 주소가 str1에 저장됨
String str2 =”abc”; //문자열 리터럴 “abc”의 주소가 str2에 저장됨
String str3 = new String(); //새로운 String인스턴스를 생성
String str4 = new String(); //새로운 String인스턴스를 생성
String클래스의 생성자를 이용할 경우 new 연산자에 의해
메모리 할당이 이루어지므로 항상 새로운 String클래스가 생성된다.
그러나 문자열 리터럴은 이미 존재하는 것을 재사용하는 것이다.
equals는 두 문자열의 리터럴을 비교하는 것이기에 모두 true이다.
그러나 주소를 비교하는 ‘==’연산자를 사용할 경우는 결과가 다르다.
cf. 빈 문자열(“”, empty string)
문자 그대로 내용이 없는 문자열을 의미한다.
크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
String str = “”; //str을 빈 문자열로 초기화
char[] chArr = new char[0] //길이가 0인 char배열 생성;
int[] iArr= {}; //길이가 0인 int배열
String s = “”; //빈 문자열로 초기화
char c = ‘ ‘; //공백으로 초기화
3) String클래스의 생성자와 메서드
String클래스의 생성자와 메서드 위의 정리된 표는
beekei의 블로그에서 허락받고 가져 왔습니다.
이미지에 블로그 주소 적혀있는 점 참고 부탁드립니다.
4) 문자열 자르기와 결합하기
join()은 구분자를 통해 문자열을 결합한다. 또한 StringJoiner를 통해 문자열 결합할 수 있다.
split()은 구분자를 통해 문자열을 자른다.
①문자열 결합하기 -방법1
②문자열 결합하기-방법2
5) 문자열과 기본형간의 변환
→숫자를 문자열로 변환하는 방법
① 숫자 + “”
② valueOf()
→문자열을 숫자로 변환하는 방법
① parseInt()
② valueOf()
'Java' 카테고리의 다른 글
Java 컬렉션 프레임웍 - (1) (0) | 2022.04.26 |
---|---|
Java 날짜와 시간 & 형식화 (0) | 2022.04.18 |
Java 예외처리 (0) | 2022.04.14 |
re : Java 객체지향 프로그래밍Ⅱ (0) | 2022.04.13 |
re: Java 객체지향 프로그래밍Ⅰ (0) | 2022.04.12 |