[자바]_전화번호부_3

Kingyj·2025년 1월 2일

전화번호부의 기능

뭐든지 큰 틀을 잡고 그 안의 세부적인 내용들을 정리하는 편이다.

전화번호부의 기능은 무엇이 있어야 할까?

  • (등록) - 최소한 이름과 전화번호를 등록해야겠지?
  • (목록) - 내가 등록한 전화번호 목록을 봐야 전화번호부라 할 수 있다.
  • (리스트화) - 여러 개의 전화번호가 저장되었다면, 몇 개가 저장되있는지 확인도 하고, 수정 / 삭제 시 유용하게 고유 번호를 지정하면 편리할 것이다.
  • (삭제) - 등록이 가능하다면 삭제도 가능해야한다.
  • (수정) - 오타나 여러 이후로 삭제 후 재등록하지 않고 수정으로 해결하면 역시 편리하다.

이 기능들만 있으면 최소한 전화번호부로써 기능은 할 수 있다.

! 본 프로젝트는 자바 복습을 위한 것으로 전화번호 검색기능 등은 구현하지 않았다. !


전화번호 삭제

public class Main {
    public static void main( String[] args){
        App app = new App();
        app.run();
    }
}

class WiseSaying {
    int id;
    String content;
    String author;

    public WiseSaying(int id, String content, String author) {
        this.id = id;
        this.content = content;
        this.author = author;
    }
}
//(생략...)
 else if (cmd.equals("목록")) {
                System.out.println("번호 / 이름 / 전화번호");
                System.out.println("===================");
                for (int i = wiseSayings.size() - 1; i >= 0; i--) {
                    WiseSaying wiseSaying = wiseSayings.get(i);
                    System.out.println("%d / %s / %s".formatted(wiseSaying.id, wiseSaying.author, wiseSaying.content));
                }
            } else if (cmd.equals("삭제")) {
                System.out.print("삭제할 번호 : ");
                int deleteId = Integer.parseInt(scanner.nextLine());
                boolean found = false;

                for (int i = 0; i < wiseSayings.size(); i++) {
                    if (wiseSayings.get(i).id == deleteId) {
                        wiseSayings.remove(i);
                        System.out.println("%d번 전화번호가 삭제되었습니다.".formatted(deleteId));
                        found = true;
                        break;
                    }

WiseSaying이라는 클래스로 묶어서 생성자를 생성했다.

! 기존에 명언등록기능을 활용해서 무의식적으로 클래스명을 그대로 사용했다. 오히려 해당 클래스명은 코드와 상관없는 단순 이름이다라고 생각하니 이해가 쉬워서 수정않고 그대로 사용했다. !

사용자가 삭제를 입력하면 삭제할 번호를 묻고 해당 번호를 삭제하는 코드를 진행했다.


전화번호 삭제 (없는 번호 예외처리)

//(생략...)
   for (int i = 0; i < wiseSayings.size(); i++) {
                  if (wiseSayings.get(i).id == deleteId) {
                      wiseSayings.remove(i);
                      System.out.println("%d번 전화번호가 삭제되었습니다.".formatted(deleteId));
                      found = true;
                      break;
                  }
              }
              if (!found) {
                  System.out.println("해당 번호에 저장된 전화번호가 없습니다.");
              } else {
                  for (int i = 0; i < wiseSayings.size(); i++) {
                      wiseSayings.get(i).id = i + 1;
                  }
              }

비교적 간단하다. else if로 삭제를 했는데, 만약 사용자가 입력한 번호에 등록된것이 없다면 해당 번호에는 등록된 번호가 없다는 텍스트를 표기해준다.


전화번호 수정

//(생략...)
 } else if (cmd.equals("수정")) {
             
               System.out.print("수정할 번호 : ");
               int updateId = Integer.parseInt(scanner.nextLine());
               boolean found = false;
               
               for (int i = 0; i < wiseSayings.size(); i++) {
                   if (wiseSayings.get(i).id == updateId) {
                       
                       System.out.print("새로운 이름 : ");
                       String newContent = scanner.nextLine();
                       System.out.print("새로운 전화번호 : ");
                       String newAuthor = scanner.nextLine();
                        wiseSayings.get(i).author = newAuthor;
                       wiseSayings.get(i).content = newContent;
                       System.out.println("%d번 전화번호가 수정되었습니다.".formatted(updateId));
                       found = true;
                       break;
                   }
               }
               if (!found) {
                   System.out.println("해당 번호에 저장된 전화번호가 없습니다.");
               }

삭제와 로직자체는 비슷하다.
사용자가 "수정"을 입력하면 수정할 번호값을 입력받는다.
그리고 수정할 이름과 전화번호를 입력받는다.
해당 번호에 저장된 전화번호가 없다면 역시 예외처리를 해준다.


TEST





모든 기능이 정상적으로 작동한다.


같은 기능으로 처음에는 앞서 짧게 설명했지만, 명언 등록기능을 구현했다. 폴더를 나누고 코드가 조금 더 복잡했지만, 계속 시도하여 최대한 간결하고 짧은 코드로 압축해서 이번 전화번호부 기능을 구현해봤다.

0개의 댓글