728x90
- java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
때문에 import문 없이도 사용가능하다. - String, System 클래스를 별도의 import 없이 사용할 수 있었던 이유가 java.lang 패키지에 속한 클래스이기 때문이다.
- Object 클래스 또한 java.lang에 포함된 클래스이며 모든 클래스의 조상이기 때문에 Object의 멤버는 모든 클래스에서 사용가능하다.
- Object클래스는 멤버변수는 없고 11개의 메서드만 가지고 있다.
- protected Object clone() - 객체 자신의 복사본을 반환한다.
- public boolean equals(Object obj) - 객체 자신과 객체 obj가 같은 객체인지 알려준다.(같으면 true)
- protected void finalize() - 객체가 소멸될 때 GC에 의해 자동적으로 호출된다. 이때 수행되어야 하는 코드가 있을 때 오버라이딩한다.
- public Class getClass() - 객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다.
- public int hashCode() - 객체 자신의 해시코드를 반환한다.
- public String toString() - 객체 자신의 정보를 문자열로 반환한다.
- public void notify() - 객체 자신을 사용하려고 기다리는 쓰레드 하나만 깨운다.
- public void notifyAll() - 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다.
- public void wait()
public void wait(long timeout)
public void wait(long timeout, int nanos) - 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos) 동안 기다리게 한다.
- equals(Object obj) 는 참조변수의 주소값으로 같은지 비교하기 때문에 서로 다른 두 객체를 비교하면 결괏값은 항상 false이다.
객체의 주소값이 아닌 변수값으로 비교하고 싶다면 해당 함수를 오버라이딩해서 값을 비교하도록 수행과정을 변경해 주면 된다. - String 클래스에서는 equals(Object obj)를 오버라이딩 했기 때문에 값이 같으면 true라는 결과가 반환된다.
- toString()의 경우 오버라이딩 하지 않는다면 "클래스명@16진수 해시코드"의 값을 얻을 수 있다.
- 한번 생성된 String인스턴스가 갖고 있는 문자열은 읽기만 가능하고 쓰기는 불가능하다.
덧셈연산자(+)를 이용해서 문자를 결합하는 것은 인스턴스 내의 문자열이 변경되는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되는 것이다. - 문자열의 결합은 매 연산 시 마다 새로운 String 인스턴스가 생성되기 때문에 문자열의 결합이나 추출 등의 기능이 많이 사용되는 경우에는 StringBuffer 클래스를 사용하는 것이 좋다.
- 문자열을 만들 때는 두가지 방법이 있다.
- 문자열 리터럴 지정 - String str = "str";
- String클래스 생성자 사용 - String str = new String("str");
- String 클래스 생성자를 사용하면 new 연산자에 의해서 메모리 할당이 이루어지기 때문에 항상 새로운 String 인스턴스가 생성된다.
하지만 문자열 리터럴은 이미 존재하는 것을 재사용한다. - 자바 소스파일을 컴파일할 때 같은 내용의 문자열 리터럴은 한 번만 저장된다.
String클래스는 한번 생성되면 수정이 불가능 하기 때문에 같은 인스턴스를 공유하면 되기 때문이다. - 클래스 파일이 클래스 로더에 의해 메모리에 올라갈 때, 클래스 파일의 리터럴들이 JVM내에 있는 '상수 저장소(constant pool)'에 저장된다.
'독후감 > Java의 정석-기초편' 카테고리의 다른 글
Java의 정석 기초편 독후감 (11) - 컬렉션 프레임웍 (0) | 2025.03.15 |
---|---|
Java의 정석 기초편 독후감 (10) - 날짜와 시간&형식화 (0) | 2025.03.12 |
Java의 정석 기초편 독후감 (8) - 예외처리 (0) | 2025.03.09 |
Java의 정석 기초편 독후감 (7) - 객체지향 프로그래밍 II (0) | 2025.03.09 |
Java의 정석 기초편 독후감 (6) - 객체지향 프로그래밍 I (1) | 2025.03.09 |