JAVA hashcode, 객체

강정우·2022년 7월 14일
0

JAVA

목록 보기
15/31
post-thumbnail

자바 뮤직플레이어 만들기

Music class

  1. 필요한 field 값들을 private으로 선언한다.
  2. 앞서배운대로 이클립스에 내장되어있는 constructor generate를 이용하여 손쉽게 생성자 메서드를 만들어준다.
  3. 필요한 getter setter method도 만들어준다.

추가공부

1. hashCode와 equals

  • Music class를 선언하는데 있어 hashcode와 equals 함수가 있는것을 보았다. 추가 정리하겠다.
  • equals : 우리가 primitive data type은 ==으로 일치여부를 확인했다. 하지만 String type은 .equals함수에서 확인할 수 있었는데 한마디로 이것도 String처럼 객체의 주소값이 같은지 확인하는 함수이다. 객체 인스턴스의 주소값을 비교한다.
  • 그러니까 String 객체도 문자열이 같으면 hashcode가 같은것이다. 그러나 equals함수를 쳤을 때 false값이 나올 수 있다.
String str1 = "hello";	// str2와 같은 hash값
String str2 = "hello";	// str1와 같은 hash값
String str3 = "java";	// str1,2와 다른 hash값

String str4 = new String("hello");	// str5와 같은 hash값
하지만 equals에서는 false
String str5 = new String("hello");	// str4와 같은 hash값
  • hashcode는 앞서 배웠던 자료구조에서 가볍게 한 번 다뤘던 개념이다. 객체를 식별하는 하나의 정수값을 말한다.
  • 그럼 equals와 hashcode를 같이 정의하는 이유는 무엇일까?
    한마디로 상호 보완을 위해서이다.
    equals는 값이 같더라고 해시주소가 다를 수 있고 그렇게 된다면 hashtable에서 저장된 bucket을 찾을 수 없다.
    또한 hashcode만 있다면 키 안에 들어있는 객체가 자신과 같은 객체인지 비교할 수 없어 원하는 객체를 찾을 수 없다.
    그러므로 hash관련 collection framework를 사용할 때 equals와 hashcode도 같이 함게 정의해서 논리적으로 완전히 같을 때만 돌일한 해시코드가 return되도록 해야한다.

2. ArrayList.addAll

ArrayList.addAll(Collection c) : Collection 객체를 받고 그 Collection 안에 있는 아이템들을 리스트에 모두 추가합니다.
ArrayList.addAll(int index, Collection c) : 위와 같지만 index를 전달하게 되는데 이 index부터 이 사이를 비집고 들어가 삽입하겠다 라는 뜻이다.

3. Collection 객체

  • 참조 : 창훈씨 블로그
  • 자바의 자료구조 중 하나로 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
  • list, ArrayList, LinkedList, Set, Map 등이 있다. 아직 자료구조와 알고리즘을 익히고 배우는 단계이기에 가볍게만 읽어보고 지나가고 자세한 내용은 나중에 포스팅 하겠다.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글