본문 바로가기
JAVA

[JAVA] 컬렉션 프레임워크 - Map

by happenstance 2021. 7. 27.

Map

   - key값, value값을 한 쌍으로 관리하는 객체

   - key값은 중복을 허용하지 않고, 순서가 없다. (Set의 특징을 갖는다.)

   - value값은 중복을 허용한다.

 

자료 추가하기

   - key값이 순서가 없기 때문에 자료를 저장한 순서와 다르게 출력됨

 

자료 수정하기

   - 데이터를 추가할 때 key 값이 같으면 나중에 추가한 값이 저장된다.

 

자료 삭제하기

   - key값이 같은 자료를 찾아서 삭제한다.

   - 반환값 : 삭제된 자료의 value값

 

자료 읽기

   - key값과 함께 저장된 value값을 반환한다.

   - 해당 key값이 없으면 null 반환한다.

 

key값의 존재 유무 확인하기

   - containsKey(key값) 메소드를 이용한다.

   - 지정한 key값이 있으면 true, 없으면 false를 리턴한다.

 

Map에 저장된 모든 데이터 가져오기 (주로 1, 2번 방법을 사용함)

 

   방법1) keySet() 메소드 이용하기

            Map의 모든 key값을 읽어와 Set형으로 반환한다.

            Set형 데이터는 순서가 없기 때문에 iterator() 메소드를 이용한다.

   방법2) 향상된 for문 이용하기

   방법3) value값만 읽어와서 처리하기 -> values() 메소드 이용

   방법4) entrySet() 메소드를 이용하기

      - Map에는 Entry라는 내부 class가 만들어져 있다.

        이 Entry 클래스에는 key라는 변수와 value라는 변수로 구성되어 있다.

        Map에서는 이 Entry 클래스를 Set형으로 저장하여 관리한다.

      - Entry 객체 전체를 가져오기(가져온 Entry 객체는 Set 형식으로 되어있다.)

        entrySet() 메소드를 이용한다.

 

  문제) 이름, 주소, 전화번호를 멤버로 갖는 Phone 클래스를 만들고
    Map을 이용하여 전화번호 정보를 관리하는 프로그램을 작성하시오.
    (Map의 구조는 key값으로 '이름'을 사용하고 value값으로 'Phone 클래스의 인스턴스'로 한다.)
     
     아래 메뉴의 기능을 구현하시오.
     ==> 삭제, 검색은 '이름'을 입력받아서 처리한다.
    
     실행 예시)
      
        1. 전화번호 등록
        2. 전화번호 수정
        3. 전화번호 삭제
        4. 전화번호 검색
        5. 전화번호 전체 출력
        0. 프로그램 종료
     -------------------------
      번호 입력 >>

풀이 1.

Phone 클래스 생성

실행 결과

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 1

등록할 정보를 입력해 주세요.
이름 >> 가
전화번호 >> 010-4564-4564
주소 >> 서울시

정상 등록되었습니다.

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 1

등록할 정보를 입력해 주세요.
이름 >> 나
전화번호 >> 010-7897-7897
주소 >> 경기도

정상 등록되었습니다.

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 5

번호	이름	전화번호		주소
──────────────────────────────────────────────
1	가	010-4564-4564		서울시
2	나	010-7897-7897		경기도

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 4

검색할 이름을 입력해 주세요 : 가

번호	이름	전화번호		주소
──────────────────────────────────────────────
1	가	010-4564-4564		서울시

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 2

수정할 이름을 입력해 주세요 : 가

수정할 전화번호를 입력해 주세요 : 010-1231-1231

수정할 주소를 입력해 주세요 : 대전시

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 5

번호	이름	전화번호		주소
──────────────────────────────────────────────
1	가	010-1231-1231		대전시
2	나	010-7897-7897		경기도

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 3

삭제할 이름을 입력해 주세요 : 나
'나'의 정보가 삭제되었습니다.

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 5

번호	이름	전화번호		주소
──────────────────────────────────────────────
1	가	010-1231-1231		대전시

──────────────────────────────────────────────
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
──────────────────────────────────────────────

번호 입력 >> 0

프로그램을 종료합니다.

 

풀이 2.

 

Phone 클래스 생성

 

 

 

 

Properties

   - Properties 객체는 Map보다 축소된 기능의 객체라고 할 수 있다.

   - Map은 key값과 value값에 모든 형태의 객체를 사용할 수 있지만,
    Properties 객체는 key와 value에 String만 사용할 수 있다.

   - Map은 put(), get() 메소드로 데이터를 입출력 하지만
    Properties는 setProperty(), getProperty() 메소드를 통하여
    입출력 한다.
 
   - Properties는 데이터를 파일로 입출력할 수 있다.


 

문제) 호텔 객실을 관리하는 프로그램을 작성하시오.

   조건1)  호텔 객식을 나타내는 Room클래스는 방번호, 방종류, 투숙객이름 필드로 구성되어 있고			     
           방번호와 방종류는 다음과 같다.
           - 201~209 : 싱글룸
           - 301~309 : 더블룸
           - 401~409 : 스위트룸

   조건2) 전체 객실 관리는 Map을 이용한다.
          (Map의 key값은 방번호로 하고 value값은 Room의 인스턴스로 한다.)
          생성자에서는 방번호와 방종류를 초기화한다.
   
   구현할 기능
   1. 체크인    2. 체크아웃    3. 객실상태    4. 업무종료

 

실행 결과

*********************************************
     호텔문을 열었습니다. 어서오십시오.
*********************************************

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 1

─────────────────────────────────────────────
              체크인 작업
─────────────────────────────────────────────
 * 201 ~ 209 : 싱글룸
 * 301 ~ 309 : 더블룸
 * 401 ~ 409 : 스위트룸
─────────────────────────────────────────────
방 번호 입력 >> 101
101호 객실은 존재하지 않습니다.

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 1

─────────────────────────────────────────────
              체크인 작업
─────────────────────────────────────────────
 * 201 ~ 209 : 싱글룸
 * 301 ~ 309 : 더블룸
 * 401 ~ 409 : 스위트룸
─────────────────────────────────────────────
방 번호 입력 >> 201
누구를 체크인 하시겠습니까?
이름 입력 >> 홍길동
홍길동님, 체크인이 완료되었습니다.

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 3

─────────────────────────────────────────────
             현재 객실 상태
─────────────────────────────────────────────
방 번호    방 종류       투숙객 이름
─────────────────────────────────────────────
201	   싱글룸	       홍길동
202	   싱글룸	         -
203	   싱글룸	         -
204	   싱글룸	         -
205	   싱글룸	         -
206	   싱글룸	         -
207	   싱글룸	         -
208	   싱글룸	         -
209	   싱글룸	         -
301	   더블룸	         -
302	   더블룸	         -
303	   더블룸	         -
304	   더블룸	         -
305	   더블룸	         -
306	   더블룸	         -
307	   더블룸	         -
308	   더블룸	         -
309	   더블룸	         -
401	  스위트룸	         -
402	  스위트룸	         -
403	  스위트룸	         -
404	  스위트룸	         -
405	  스위트룸	         -
406	  스위트룸	         -
407	  스위트룸	         -
408	  스위트룸	         -
409	  스위트룸	         -
─────────────────────────────────────────────

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 2

─────────────────────────────────────────────
              체크아웃 작업
─────────────────────────────────────────────
체크아웃 할 방의 번호를 입력해 주세요.
방 번호 >> 203
203호 객실에는 체크인 한 고객이 없습니다.

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 2

─────────────────────────────────────────────
              체크아웃 작업
─────────────────────────────────────────────
체크아웃 할 방의 번호를 입력해 주세요.
방 번호 >> 201
201호 객실의 홍길동님
체크아웃을 완료하였습니다.

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 3

─────────────────────────────────────────────
             현재 객실 상태
─────────────────────────────────────────────
방 번호    방 종류       투숙객 이름
─────────────────────────────────────────────
201	   싱글룸	         -
202	   싱글룸	         -
203	   싱글룸	         -
204	   싱글룸	         -
205	   싱글룸	         -
206	   싱글룸	         -
207	   싱글룸	         -
208	   싱글룸	         -
209	   싱글룸	         -
301	   더블룸	         -
302	   더블룸	         -
303	   더블룸	         -
304	   더블룸	         -
305	   더블룸	         -
306	   더블룸	         -
307	   더블룸	         -
308	   더블룸	         -
309	   더블룸	         -
401	  스위트룸	         -
402	  스위트룸	         -
403	  스위트룸	         -
404	  스위트룸	         -
405	  스위트룸	         -
406	  스위트룸	         -
407	  스위트룸	         -
408	  스위트룸	         -
409	  스위트룸	         -
─────────────────────────────────────────────

─────────────────────────────────────────────
 어떤 업무를 하시겠습니까?
 1.체크인 2.체크아웃 3.객실상태 4.업무종료
─────────────────────────────────────────────
선택 >> 4
안녕히 가십시오.