일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 알고리즘
- 포인터
- 남양주맛집
- 건대입구맛집
- removetooltip
- DOM
- pipenv
- richtext
- BeautifulSoup
- 성수동카페
- 자바
- 추상클래스
- Python
- 장고
- 강원도속초맛집
- 노마드코더
- popupmenubutton
- Django
- 속초여행
- 부스트코스
- 정렬알고리즘
- 컴퓨터과학
- 아스키코드
- 가상환경
- JavaScript
- FLUTTER
- 상속
- c언어문자열
- python3
- 코딩독학
- Today
- Total
YUYANE
Java/ Object 클래스와 메서드(toString(), equals(),hashCode()) 본문
Java/ Object 클래스와 메서드(toString(), equals(),hashCode())
YUYA 2020. 12. 23. 20:27Object클래스와 메서드
- 일반화의 끝판왕
- java의 클래스는 모두 Object로부터 상속받음
- 따라서 Object에 있는 메서드들은 어떤 클래스에서도 오버라이딩 가능
1) toString() 메서드
- 사람이 읽기 편하게 해당 개체를 문자열로 표현
- print 할 떄 내부적으로 toString()을 호출하여 어떤 개체든 그것을 문자열로 표현한 모습을 출력 할 수 있다
- 자바 공식 문서는 모든 클래스에서 이 메서드를 오버라이딩하라 권장(근데 사실 잘 안함..)
2) equals()메서드
- 문자열의 동치 비교할 때 이미 본 메서드
- Object 클래스 안의 기본 구현
- 단순한 주소 비교 : this == obj
- 실제 개체 속의 데이터를 일일이 비교하지 않음
- 문자열의 경우에는 두 문자열이 같은지 문자열 하나하나 확인해줘야 하기 때문에 string 클래스에서 equals() 메서드를 오버라이딩 해버린 것.
- 각 클래스마다 같다는 의미가 다를 수 있음. 클래스 속 데이터를 비교해야 한다면 오버라이딩 필요
- String 클래스도 오버라이딩했음
- 이때 hashCode()도 반드시 같이 오버라이딩해야 함
Person person0 = new Person("Pope","Kim");
Person person1 = new Person("Pope","Kim");
Person person2 = person0;
System.out.println(person0.equals(person1)); //false
System.out.println(person0.equals(person2)); //true
3) hashCode() 메서드
- 어떤 개체를 대표하는 해시값을 32비트 정수로 반환
- 동치인 두 개체는 해시값이 같음
- 동치가 아닌 두 개체도 해시값이 같을 수 있음 (해시 충돌)
두 데이터가 같으면 해시값이 같다
두 데이터가 다르면 해시값이 같을수도/다를수도 있다
- Object 클래스 안의 기본 구현
- 개체의 주소를 int로 반환
- 주목적 : Java가 자체 제공하는 HashMap 클래스에서 사용하기 위함
- 키(key)로 사용하는 개체의 해시값이 필요
- 뜻밖의 이득?
- 빠른 비교용으로 사용 가능(클래스가 메서드를 제대로 구현했을 경우에만)
- 단, 두 개체가 같지 않음만 빠르게 판단 가능(해쉬코드가 같아도 두 개체는 다를 수 있으니깐)
'Programming Languages > JAVA' 카테고리의 다른 글
Java/ Exception (0) | 2021.01.05 |
---|---|
Java/ 추상 메서드, 클래스 (0) | 2020.12.28 |
Java/ final (0) | 2020.12.22 |
Java/ 다형성(polymorphism) (0) | 2020.12.22 |
Java/ 상속 vs 컴포지션 (0) | 2020.12.16 |