2020년 9월 21일 월요일

(추천자바강의/자바교육)자바의 Object 클래스, toString(), equals(), hashcode(), 실습(자바동영상/자바강좌/자바/JAVA)

자바강의/자바교육)자바의 Object 클래스, toString(), equals(), hashcode(), 실습(자바동영상/자바강좌/자바/JAVA)


ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=757

불러오는 중입니다...


https://youtu.be/Mdp6rq4v0_o



1. Object 클래스


모든 클래스의 최상위 클래스

모든 객체는 Object의 하위 객체, 즉 소스에서 아무것도 상속 받지 않았다면 컴파일러에 의해 java.lang.Object를 상속하는 클래스로 선언 된다.(extends Object)

Object 타입의 변수는 어떠한 객체도 가리킬 수 있다. 또한 유형을 모르는 객체를 참조하려 할 때 유용하다.

Object obj = new int[10];

Object obj = new StringBuffer(“abc”);


Object obj = getObject();   //어떤 객체가 리턴될지 모르는 경우


객체의 내용을 String 으로 변환

String toString()

모든 객체를 System.out으로 출력할 때 toString() 메소드가 간접적으로 호출되도록 되어있다.

객체의 내용으로 비교

boolean equals(Object obj)

Hash code 생성

int hashCode()

복제된 객체 생성

protected Object clone() throws CloneNotSupportedException

객체가 소멸될 때 불리는 함수

finalize() throws Throwable



2. 객체의 내용 비교 (equality test)


boolean equals(Object obj)

두 객체가 같은지 비교

실질적으로 두 객체의 내용이 같은지를 검사 하려면 equals() 메소드를 오버라이드 해서 객체가 포함하고 있는 내용을 비교해야 한다.

Object 클래스의 equals() 메소드는 객체의 참조값(주소값)이 같은지 비교한다.

Java.lang.Object.equals() 메소드를 살펴보면

public boolean equals(Object obj) {

return (this == obj);//결국 equals()를 overriding하지                            //않는 한 equals()와 ==의 차이는 없다.

}

Java.lang.String 의 경우는 equals() 메소드를 재정의 하여 다음과 같이 문자열이 같은 경우 같다고 정의하고 있다. 

 public boolean equals(Object anObject) :  Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.



3. 해시코드(HashCode)


해시 코드

해시 코드는 객체에 대한 서명, 또는 checksum과 같은 것으로 보통 객체의 내용을 바탕으로 만들어진 난수처럼 보이는 객체 인식용 정수이다.

객체가 서로 다른 내용을 포함한다면 반드시 달라야 하며 ,객체의 내용이 같다면 일반적으로 같은 값을 가진다.


해시코드는 객체를 Hashtable에 저장하는 경우에 사용한다. 해시코드는 객체를 골고루 저장할 수 있도록 식별자로 활용 할 수 있고 따라서 자료를 찾을 때도 빠르게 찾을 수 있도록 도와 준다.


실행 중 두번 이상 같은 객체의 해시코드가 호출 되는 경우 항상 같은 정수 값을 return 한다.



4. 실습


package javatest;


class Person extends Object {

String name;

Person(String name) {

this.name = name;

}


@Override

public boolean equals(Object obj) {

return this.name.equals(((Person)obj).name);

}

}


public class ObjectTest {

public static void main(String[] args) {

Person p1 = new Person("오라클자바커뮤니티");  

Person p2 = new Person("오라클자바커뮤니티");


//먼저 p1, p2 객체참조변수를 출력해 보자.

//객체명@hashCode를 16 진수로 변환한값 출력

System.out.println("p1.toString() --> " + p1);//javatest.Person@15db9742

System.out.println("p2.toString() --> " + p2);//javatest.Person@6d06d69c


//hashCode 값 출력(int형으로 출력)

//p1, p2는 힙 메모리의 서로 다른 객체이므로 해시코드가 다르다.

System.out.println("p1.hashCode() --> " + p1.hashCode());//366712642

System.out.println("p2.hashCode() --> " + p2.hashCode());//1829164700


System.out.println("p1 == p2 --> " + (p1 == p2));  //false


System.out.println("p1.equals(p2) --> " + p1.equals(p2)); //false


//hashCode 값을 16 진수로 바꾸어서 한번 찍어보자.

System.out.println(Integer.toHexString(p1.hashCode()));//15db9742

System.out.println(Integer.toHexString(p2.hashCode()));//6d06d69c

System.out.println();



//new String() 하는 경우 값이 같아도 다른 메모리 공간에 생성된다.(주소가 다름)

String s1 = new String("abc");

String s2 = new String("abc");


//hashCode 값 출력(문자열값이 같으므로 같은 hashCode, String은 Object의 hashcode()를 재정의)

//String클래스는 equals를 재정의(문자열이 같으면 true)

System.out.println("s1.hashCode() --> " + s1.hashCode());//96354

System.out.println("s2.hashCode() --> " + s2.hashCode());//96354


System.out.println("s1.equals(s2) --> " + s1.equals(s2));//true


System.out.println("s1 == s2      --> " + (s1 == s2));//false

System.out.println();


//new String()이 아닌 문자열 생성은 값이 같으면 "문자열 상수 풀에"서 공유한다.

String s3 = "abc";

String s4 = "abc";


//hashCode 값 출력(문자열값이 같으므로 같은 hashCode)

System.out.println("s3.hashCode() --> " + s3.hashCode());//96354

System.out.println("s4.hashCode() --> " + s4.hashCode());//96354

System.out.println("s3.equals(s4) --> " + s3.equals(s4));//true

System.out.println("s3 == s4      --> " + (s3 == s4));//true

System.out.println();

}

}



[실행결과]

p1.toString() --> javatest.Person@15db9742

p2.toString() --> javatest.Person@6d06d69c

p1.hashCode() --> 366712642

p2.hashCode() --> 1829164700

p1 == p2 --> false

p1.equals(p2) --> true

15db9742

6d06d69c


s1.hashCode() --> 96354

s2.hashCode() --> 96354

s1.equals(s2) --> true

s1 == s2      --> false


s3.hashCode() --> 96354

s4.hashCode() --> 96354

s3.equals(s4) --> true

s3 == s4      --> true


#자바Object, #Object란, #해시코드, #객체비교, #객체지향, #자바동영상#자바강의#자바교육#자바강좌#자바#JAVA#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바실습   


댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...