더 많이 실패하기

코딩공부 64일차: 자바의 정석 / 자바의 정석 104~106강 / 9장 java.lang패키지와 유용한 클래스 본문

자바/자바의정석

코딩공부 64일차: 자바의 정석 / 자바의 정석 104~106강 / 9장 java.lang패키지와 유용한 클래스

김발자~ 2022. 10. 2. 20:19
반응형

Object 클래스 - equals(), hasCode(), toString() / String클래스

 

개발 공부 64일차

자바의 정석 기초편 강의

https://www.youtube.com/watch?v=oJlCC1DutbA&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

 

 

총 171개의 강의로 구성되어 있다

총 강의 시간은 80시간 정도

 

 

강의는 기초편을 기준으로 제작되어 있지만,

http://www.yes24.com/Product/Goods/24259565

 

Java의 정석 - YES24

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com

링크로 첨부한 자바의 정석 3판으로도 무리가 없다는 댓글이 있어 그대로 진행

 

 

 

 

 


ch 9 - 1~3 Object 클래스와 equals()

(3판 기준 450~453쪽)

https://www.youtube.com/watch?v=NI6QZy6juc8&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=105 


 

9장 java.lang패키지와 유용한 클래스

1. java.lang패키지

1.1 Object 클래스
모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다
notfy(), wait() 등은 쓰레드와 관련된 메서드

protected Object clone() 객체 자신의 복사본 반환
public boolean equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지(같으면 ture)
protected void finalize() 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출
이때 수행되어야 하는 코드가 있을 때 오버라이딩
(거의 사용 안 함)
public Class getClass() 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스 반환
public int hasCode() 객체 자신의 해시코드 반환
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)동안 기다리게 한다. (timeout은 천 분의 1초, nanos는 10^9분의 1초)

*protected 가 붙은 건 오버라이딩해줘야 한다

*notify ~ wait은 쓰레드 관련(13장)

 

 

equals(Object obj)
객체 자신(this)과 주어진 객체(obj)를 비교 → 같으면 true 다르면 false
Object 클래스와 equals()는 객체의 주소를 비교(참조변수 값 비교) -> 서로 다른 객체는 항상 거짓
따라서 인스턴스 변수(iv)의 값을 비교하도록 equals() 오버라이딩 필요
  -instanceof 로 형변환 가능한지 확인
  -형변환 예제: return id == ((Person) obj).id;
  -인스턴스변수 값(객체 주소x) 비교

 

 


ch 9 - 4~6 hasCode(), toString()

(3판 기준 453~456쪽)

https://www.youtube.com/watch?v=GfYg3imRZsc&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=104 


 

hasCode()

객체의 해시코드(hash code)를 반환하는 메서드
해시코드: 해싱 알고리즘(11장 컬렉션 프레임에서 다룰 예정)
Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환 - 객체의 주소는 객체마다 다르다
equals()를 오버라이딩하면 hasCode()도 오버라이딩해야 한다 - ★ equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문
(System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일)


toString()
객체(iv 집합)를 문자열(String)으로 변환하기 위한 메서드

Object클래스의 toString()은 16진수의 해시코드를 반환 → 오버라이딩하는 편이 좋다
오버라이딩할 때 보통 iv값들을 문자열로 바꾼다

 

(책에는 다른 메서드들에 대한 설명이 있지만 기초편 강의에서는 다루지 않음)

 

 

 


ch 9 - 7~10 String 클래스, 문자열 비교, 빈 문자열

(3판 기준 464~쪽)

https://www.youtube.com/watch?v=PG8kPjwWbWU&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=106 


 

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

내용 변경 불가능한(immutable) 클래스
덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐(계속 새로운 객체를 만들어야 하니까)
문자열의 결합이나 변경이 잦다면 내용 변경 가능한 StringBuffer를 사용


문자열의 비교
String str = "abc";와 String str = new String("abc");의 비교
전자는 객체 공유(문자열 리터럴), 후자는 계속 새로운 객체를 만든다(생성자 사용)
내용 변경이 불가하므로 전자의 방법이 낫다


문자열 리터럴 (리터럴 = 상수)
문자열 리터럴은 프로그램 실행시 자동으로 생성(constant pool(상수 저장소)에 저장)
같은 내용의 문자열 리터럴은 하나만 만들어진다 - String은 내옹 변경 불가하므로 한 객체를 여러 변수가 공유해도 괜찮다


빈 문자열("", empty string)
내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
문자(char)와 문자열(String)의 초기화: char c = ' '; / String s = "";

 

 

 


 

반응형
Comments