quilt code

[고급자바] 컬렉션 프레임워크(4) 본문

daily/고급자바

[고급자바] 컬렉션 프레임워크(4)

김뱅쇼 2023. 2. 2. 18:27

1. PhoneBookTest

 

1) 문제


문제) 이름, 주소, 전화번호 속성을 갖는 Phone클래스를 만들고, 이 Phone클래스를 이용하여 전화번호 정보를 관리하는 프로그램을 완성하시오,
이 프로그램에는 전화번호를 등록, 수정, 삭제, 검색, 전체출력하는 기능이 있다.

전체 전화번호 정보는 Map을 이용하여 관리한다.
(Key는 '이름'으로 하고 value는 'Phone클래스의 인스턴스'로 한다.)


(실행예시)
======================================
전화번호 관리 프로그램(파일로 저장되지 않음)
======================================

메뉴를 선택해주세요.
  1. 전화번호 등록
  2. 전화번호 수정
  3. 전화번호 삭제
  4. 전화번호 검색
  5. 전화번호 전체 출력
  0. 프로그램 종료
  번호입력 >> 1      <-- 직접 입력

새롭게 등록할 전화번호 정보를 입력하세요.
이름   >>정재현     <-- 직접 입력
전화번호 >> 010-1234-5678    <-- 직접 입력
주소 >> 대전시 중구 대흥동 111  <-- 직접 입력

메뉴를 선택해주세요.
  1. 전화번호 등록
  2. 전화번호 수정
  3. 전화번호 삭제
  4. 전화번호 검색
  5. 전화번호 전체 출력
  0. 프로그램 종료
  번호입력 >> 5      <-- 직접 입력

======================================
  번호      이름              전화번호              주소
======================================
   1         정재현       010-1234-5678        대전시
    ~~~
======================================
출력완료...

메뉴를 선택해주세요.
  1. 전화번호 등록
  2. 전화번호 수정
  3. 전화번호 삭제
  4. 전화번호 검색
  5. 전화번호 전체 출력
  0. 프로그램 종료
  번호입력 >> 0     <-- 직접 입력

 프로그램을 종료합니다..

 

2) main method / 메뉴출력 & 프로그램 시작 메소드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class T09PhoneBookTest {
    private Scanner scan;
    private Map<String, Phone> phoneBook;
    
    public T09PhoneBookTest() {
        scan = new Scanner(System.in);
        phoneBook = new HashMap<>();
    }
    
    // 메뉴를 출력하는 메서드
    public void displayMenu(){
        System.out.println();
        System.out.println("메뉴를 선택하세요.");
        System.out.println(" 1. 전화번호 등록");
        System.out.println(" 2. 전화번호 수정");
        System.out.println(" 3. 전화번호 삭제");
        System.out.println(" 4. 전화번호 검색");
        System.out.println(" 5. 전화번호 전체 출력");
        System.out.println(" 0. 프로그램 종료");
        System.out.print(" 번호입력 >> ");        
    }
    
    // 프로그램을 시작하는 메서드
    public void phoneBookStart(){
        System.out.println("===============================================");
        System.out.println("   전화번호 관리 프로그램(파일로 저장되지 않음)");
        System.out.println("===============================================");
        
        while(true){
            
            displayMenu();  // 메뉴 출력
            
            int menuNum = scan.nextInt();   // 메뉴 번호 입력
            
            switch(menuNum){
                case 1 : insert();        // 등록
                    break;
                case 2 : update();        // 수정
                    break;
                case 3 : delete();        // 삭제
                    break;
                case 4 : search();        // 검색
                    break;
                case 5 : displayAll();    // 전체 출력
                    break;
                case 0 :
                    System.out.println("프로그램을 종료합니다...");
                    return;
                default :
                    System.out.println("잘못 입력했습니다. 다시입력하세요.");
            } // switch문
        } // while문
    }
cs

 

 

3) 전체 전화번호 정보 출력 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    private void displayAll() {
        System.out.println("=================================");
        System.out.println(" 번호\t이름\t전화번호\t주 소");
        System.out.println("=================================");
        
        Set<String> keySet = phoneBook.keySet();
        
        if(keySet.size() == 0) {
            System.out.println("등록된 전화번호 정보가 존재하지 않습니다.");
        } else {
            Iterator<String> it = keySet.iterator();
            int cnt = 0;
            while(it.hasNext()) {
                cnt++;
                String name = it.next();
                Phone p = phoneBook.get(name);
                System.out.println(" " + cnt + "\t" + p.getName() + "\t" + p.getTel() + "\t" + p.getAddr());
            }
        }
        System.out.println("=============================");
        System.out.println("출력 완료...");
        
    }
cs

 

 

4) 이름을 이용한 전화번호 정보 검색하는 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    private void search() {
        
        System.out.println();
        System.out.println("검색할 전화번호 정보를 입력하세요.");
        System.out.println("이름 >> ");
        String name = scan.next();
        
        Phone p = phoneBook.get(name);
        
        if(p == null) {
            System.out.println(name + "씨의 전화번호 정보가 없습니다.");
        } else {
            System.out.println(name + "씨의 전화번호 정보");
            System.out.println("이   름: " + p.getName());
            System.out.println("전화번호: " + p.getTel());
            System.out.println("주   소: " + p.getAddr());
        }
        
        System.out.println("검색 작업 완료...");
    }
cs

 

5) 새로운 전화번호 정보를 등록하는 메소드 (이미 등록된 사람은 등록되지 않는다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    private void search() {
        
        System.out.println();
        System.out.println("검색할 전화번호 정보를 입력하세요.");
        System.out.println("이름 >> ");
        String name = scan.next();
        
        Phone p = phoneBook.get(name);
        
        if(p == null) {
            System.out.println(name + "씨의 전화번호 정보가 없습니다.");
        } else {
            System.out.println(name + "씨의 전화번호 정보");
            System.out.println("이   름: " + p.getName());
            System.out.println("전화번호: " + p.getTel());
            System.out.println("주   소: " + p.getAddr());
        }
        
        System.out.println("검색 작업 완료...");
    }
cs

 

6) 이미 등록된 사람인지 검사하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        if(phoneBook.get(name) != null) {
            System.out.println(name + "씨는 이미 등록된 정보입니다.");
            System.out.println("다시 등록해 주세요.");
            return;
        }
        
        System.out.println("전화번호 >> ");
        String tel = scan.next();
        
        scan.nextLine(); //입력버퍼에 남아있는 엔터키값(빈값) 제거하기
        
        
        System.out.println("주소 >> ");
        String addr = scan.nextLine();
        
        Phone p = new Phone(name, tel, addr);
        
        phoneBook.put(name, p);
        
        System.out.println(name + "씨 정보 등록 완료.");
        
        
    }
cs

 

7) 기존 전화번호 정보를 수정하는 메소드

1
2
3
4
5
    private void update() {
        System.out.println();
        System.out.println("수정할 전화번호 정보를 입력하세요.");
        System.out.print("이름 >> ");
        String name = scan.next();
cs

 

8) 이미 등록된 사람인지 검사하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        if(phoneBook.get(name) == null) {
            System.out.println(name + "씨는 등록되지 않은 정보입니다.");
            System.out.println("다시 입력해주세요.");
            return;
        }
        
        System.out.println("전화번호 >> ");
        String tel = scan.next();
        
        scan.nextLine(); //입력버퍼에 남아있는 엔터키값(빈값) 제거하기
        
        
        System.out.println("주소 >> ");
        String addr = scan.nextLine();
        
        Phone p = new Phone(name, tel, addr);
        
        phoneBook.put(name, p);
        
        System.out.println(name + "씨 정보 수정 완료.");
        
        
    }
cs

 

9) 전화번호 정보를 삭제처리하기 위한 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    private void delete() {  //private이유? 안에서만 사용 가능 (보안 관련)  
        System.out.println();
        System.out.println("삭제할 전화번호 정보를 입력하세요.");
        System.out.println("이름>> ");
        String name = scan.next();
        
        //remove(key) => 삭제 성공하면 value값이 반환되고, 실패하면 null 반환함.
        if(phoneBook.remove(name) == null) {
            System.out.println(name + "씨는 등록된 사람이 아닙니다.");
        } else {
            System.out.println(name + "씨 정보를 삭제했습니다.");
        }
        
        System.out.println("삭제 작업 완료...");
        
    }
    
cs

 

10) 전화번호 정보를 저장할 수 있는 VO 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Phone {
    private String name;
    private String tel;
    private String addr;
    
    public Phone(String name, String tel, String addr) {
        super();
        this.name = name;
        this.tel = tel;
        this.addr = addr;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    @Override
    public String toString() {
        return "Phone [name=" + name + ", tel=" + tel + ", addr=" + addr + "]";
    }
    
    
    
    
}
cs

 

 

2. Properties

Properties는 Map보다 축소된 기능의 객체라고 할 수 있다.
Map은 모든 형태의 객체 데이터를 key와 value값으로 사용할 수 있지만,
Properties는 key와 value값으로 String만 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package kr.or.ddit.basic;
 
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
 
public class T10PropertiesTest {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        
            Properties prop = new Properties();
            
            prop.setProperty("name""정재현");
            prop.setProperty("tel""010-1111-1111");
            prop.setProperty("addr""대전");
            
            String name = prop.getProperty("name");
            String tel = prop.getProperty("tel");
            
            System.out.println("이름 : " + name);
            System.out.println("전화 : " + tel);
            System.out.println("주소 : " + prop.getProperty("addr"));
            
            // 데이터를 파일로 저장하기
            prop.store(new FileOutputStream("src/kr/or/ddit/basic/test.properties"), "코멘트(Comment)입니다.");
    }
 
}
cs

'daily > 고급자바' 카테고리의 다른 글

[고급자바] 제너릭 (2)  (0) 2023.02.03
[고급자바] 제너릭 (1)  (0) 2023.02.02
[고급자바] Student 과제  (0) 2023.02.02
[고급자바] Lotto 과제  (0) 2023.02.02
[고급자바] 컬렉션 프레임워크 (3)  (0) 2023.02.01