java.lang 패키지

tkppp·2021년 12월 17일
0

Java

목록 보기
3/6

java.lang Package

java.lang 패키지는 자바에서 기본이 되는 클래스를 담고 있다. 그렇기 때문에 import 없이도 전역으로 사용할 수 있다.

Object 클래스

Object 클래스는 모든 객체의 조상이 되는 클래스로 11개의 메소드가 있다. 주로 사용하는 메소드는 아래와 같다.

Methoddescription
clone() : Object객체의 얕은 복사본을 반환
equals() : Boolean객체의 주소를 비교해 같은 객체인지 판별
getClass() : Class객체 자신의 클래스 정보를 가지고 있는 Class 인스턴스를 반환
hashCode() : int객체 자신의 해시코드를 반환
toString() : String객체 자신의 정보를 문자열로 반환

clone() 메소드는 얕은 복사를 수행함에 유의해야 한다.

얕은 복사 : 객체가 참조하는 객체는 복사하지 않고 가리킨다. 즉 객체를 복사했더라도 원본과 복제 객체는 한 객체를 가리킴.

깊은 복사 : 객체가 참조하는 객체까지 모두 복사한다. 즉 원본과 복제 객체가 서로 다른 객체를 가리킴.

String 클래스

문자열을 위한 클래스로 문자열 조작을 위한 다양한 메소드를 가지고 있다.

문자열의 비교와 equals()

String 인스턴스를 초기화 하는 방법은 new 연산자를 사용하는 것과 문자열 리터럴을 사용하는 두가지 방식이 있다.

// 문자열 리터럴
String str1 = "abc"
String str2 = "abc"
// new 연산자를 사용한 생성자 호출
String str3 = new String("abc")
String str4 = new String("abc")

문자열 리터럴로 String 객체를 생성할 경우 str1과 str2를 '==' 비교 연산자로 비교할 경우 true가 나온다. 그 이유는 문자열 리터럴은 컴파일 타임에 메모리에 올라가고 같은 문자열은 단 한번만 저장되기 때문에 같은 주소를 가리키기 있다. 비교 연산자 '=='는 객체의 경우 객체의 주소를 비교하기 때문에 true 라는 결과가 나온다.

str3와 str4는 생성자로 생성한 서로 다른 객체이기 때문에 '=='로 비교시 당연히 false다. 하지만 내용은 같은 상태이다. String 객체를 비교하기 위해서는 어떻게 해야할까?

바로 equals() 메소드다. 여기서 의문을 가지는 사람도 있을 것이다. equals() 메소드는 객체의 주소를 비교하는 Object 클래스의 메소드이라고 생각했기 때문이다. 하지만 String 클래스에는 equals() 메소드를 오버라이딩하여 주소와 상관없이 문자열 값이 같은지를 비교한다. 그렇기 때문에 인스턴스의 문자열 값이 서로 같다면 true, 다르다면 false를 반환한다.

0개의 댓글