자바 뮤직플레이어 만들기
Music class
- 필요한 field 값들을 private으로 선언한다.
- 앞서배운대로 이클립스에 내장되어있는 constructor generate를 이용하여 손쉽게 생성자 메서드를 만들어준다.
- 필요한 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 등이 있다. 아직 자료구조와 알고리즘을 익히고 배우는 단계이기에 가볍게만 읽어보고 지나가고 자세한 내용은 나중에 포스팅 하겠다.