JAVA

JAVA - 전화번호부 예제

로픽 2016. 9. 27. 08:58
300x250

자료구조 HashMap을 이용한 전화번호부 만들기

자바의 관련된 여러 개의 자료구조 중 HashMap이라는 것이 있습니다.


map인터페이스를 상속받아 만들어진 HashMap은 key와 value로 구성되어 있습니다.


한 가지 예를 들면 영어사전에서 영단어를 key라고 하면 해석을 value라고 할 수 있습니다

(저는 이런 방식이 이해가 잘가더라고요 ㅋㅋㅋ)


이런 HashMap의 성질을 이용하여 만든 전화번호부 예제는 2개의 클래스로 구성하였습니다.



-----------------------------------------------------------------------------------------------------------------


** Phone.java

자바


-----------------------------------------------------------------------------------------------------------------


Phone 클래스 전화번호 사용자에 대한 정보를 저장하는 클래스입니다.


여기서 중요한 점이 Phone클래스가 HashMap의 value가 된다는 점입니다.


다음에 나오는 PhoneBookApp.java에서 HashMap에 대한 선언이 나와 있습니다.


HashMap<String, Phone> map = new HashMap<String, Phone>();


<> -> 제네릭(Type 매개변수)라고 하는 이 부분에는 객체만 넣을 수 있기 때문


그래서 Phone클래스가 value가 될 수 있고 이름,전화번호,주소를 입력 가능합니다.


-----------------------------------------------------------------------------------------------------------------


** PhoneBookApp.java

자바


-----------------------------------------------------------------------------------------------------------------


name은 hashmap에 저장되어 있는 value값을 찾아내는 key값입니다.

switch문을 이용하여 입력받은 숫자에 따라서 각각 다른 함수가 사용됩니다.

-----------------------------------------------------------------------------------------------------------------


hashmap


-----------------------------------------------------------------------------------------------------------------


전화번호부에 추가로 삽입하는 경우는 중복을 제거하기 위해서 if문을 통해서 중복되는 경우

저장하지 않고 함수를 빠져나갑니다.

그리고 map.put(name, new Phone(name, telnum, address)); 는 hashmap에 key와 value를 저장하는 값을 저장하는 문장입니다. 

객체를 넣어야하므로 new Phone()으로 객체를 생성하였습니다.

name의 경우는 String은 기본 자료형이 아닌 객체이므로 문제가 없습니다.

-----------------------------------------------------------------------------------------------------------------


자바


-----------------------------------------------------------------------------------------------------------------


Set<String> keylist = map.keySet();의 set 또한 자바의 자료구조입니다.

중복을 허용하지 않고 순서의 상관없이 데이터를 저장하는데 allnum()함수에서는 map의 키값을 저장하는 역활입니다.

그 후 Iterator<String> itr = keylist.iterator();를  이용하여 keylist에 저장된 값을 순차 나열하여 검색할 수 있게 만듭니다.

itr.hasNext() = 다음 값이 있는 경우 true반환,   itr.next() = itr이 가리키는 다음 값을 반환하여 

순차적으로 key을 뽑아내어 map.get(name)을 통해서 value값을 뽑아냅니다.

-----------------------------------------------------------------------------------------------------------------


java


-----------------------------------------------------------------------------------------------------------------


3번 전체보기에서 이름, 전화번호, 주소가 출력 가능한 이유는 Phone 클래스에서 toString을 오버라이딩하고

map.get(name)통해서 출력을 했기 때문입니다.

map.get(name) == phone
(** map.put(name, new Phone(name, telnum, address))


반응형