JUINTINATION

카카오테크 부트캠프 1주차 과제 회고 본문

카카오테크 부트캠프

카카오테크 부트캠프 1주차 과제 회고

DEOKJAE KWON 2025. 2. 1. 15:45
반응형

설 연휴 때문에 기간이 2주가 넘었던 1주차 과제가 드디어 끝났다. 처음에 제출했던 과제의 리드미 내용은 아래와 같다.

1주차 과제 내용

CLI 프로그램 제작 (동기 프로그램)

  • 콘솔 형태의 프로그램은 어떠한 종류라도 상관 없음
  • 과제는 다음 순서대로 진행
    1. 프로그램 클래스 설계도(다이어그램) 작성
      1. 속성, 메서드, 상속의 관계를 먼저 정의
    2. 2차 상속은 최소 하나 이상
      • UML 프로그램 사용 금지, 손으로 그리세요!
        • 이유: 툴 학습법 익힐 시간 없음
        • 제출 방법: 사진을 찍어 제출
    3. 설계도 기반 콘솔 프로그램 제작
      • 사용자에게 입력을 받고 진행이 되는 형태

프로그램 설명

  • CLI 기반의 간단한 작업 관리 프로그램
    • 사용자는 해야 할 작업을 등록하고 관리할 수 있다.
  • 진행중인 작업 PendingTask와 완료된 작업 CompletedTask는 기본 작업 BasicTask를 상속받는다.
    • 긴급하게 해야 할 작업 UrgentTask는 PendingTask를 상속받는다.

클래스 다이어그램

입출력 예시

  • 사용자 이름 입력
Please enter your name: jay
  • 작업 목록이 비어있는 경우
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
1
There are no tasks to view.
  • 작업 추가
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
2
Enter the title of the task: Sample title
Enter the description of the task: Sample description
  • 작업 상태(완료 여부) 변경
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
3
Which task would you like to modify?
1. "Sample title - Sample description" is pending.
2. "Sample Title 2 - Sample Description 2" is pending.
3. "Sample Title 3 - Sample Description 3" is pending.
0. Go back
Enter the number of the task: 1
What would you like to do with the task?
1. Change status
2. Change priority
3. Change title
4. Change description
0. Go back
1
  • 작업 중요도 변경
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
3
Which task would you like to modify?
1. "Sample title - Sample description" is completed.
2. "Sample Title 2 - Sample Description 2" is pending.
3. "Sample Title 3 - Sample Description 3" is pending.
0. Go back
Enter the number of the task: 2
What would you like to do with the task?
1. Change status
2. Change priority
3. Change title
4. Change description
0. Go back
2
  • 작업 제목 및 내용 변경
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
3
Which task would you like to modify?
1. "Sample title - Sample description" is completed.
2. [URGENT] "Sample Title 2 - Sample Description 2" is pending.
3. "Sample Title 3 - Sample Description 3" is pending.
0. Go back
Enter the number of the task: 3
What would you like to do with the task?
1. Change status
2. Change priority
3. Change title
4. Change description
0. Go back
3
Enter the title of the task: Modified Title

Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
3
Which task would you like to modify?
1. "Sample title - Sample description" is completed.
2. [URGENT] "Sample Title 2 - Sample Description 2" is pending.
3. "Modified Title - Sample Description 3" is pending.
0. Go back
Enter the number of the task: 3
What would you like to do with the task?
1. Change status
2. Change priority
3. Change title
4. Change description
0. Go back
4
Enter the description of the task: Modified Description
  • 모든 작업 목록 출력
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
1
What would you like to do?
1. View every tasks
2. View pending tasks
3. View urgent tasks
4. View completed tasks
0. Go back
1
Every tasks...
1. "Sample title - Sample description" is completed.
2. [URGENT] "Sample Title 2 - Sample Description 2" is pending.
3. "Modified Title - Modified Description" is pending.
  • 진행중인 작업 목록 출력
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
1
What would you like to do?
1. View every tasks
2. View pending tasks
3. View urgent tasks
4. View completed tasks
0. Go back
2
Pending tasks...
2. [URGENT] "Sample Title 2 - Sample Description 2" is pending.
3. "Modified Title - Modified Description" is pending.
  • 작업 삭제
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
4
Which task would you like to remove?
1. "Sample title - Sample description" is completed.
2. [URGENT] "Sample Title 2 - Sample Description 2" is pending.
3. "Modified Title - Modified Description" is pending.
0. Go back
Enter the number of the task: 1
  • 프로그램 종료
Hi, jay! Welcome to CLI Task Manager. What would you like to do?
1. View tasks
2. Add a task
3. Modify tasks
4. Remove a task
0. Exit
0
Goodbye, jay!

구현할 기능 목록

  • 사용자 이름 입력
  • 작업 목록 출력 기능
  • 작업 추가 기능
  • 작업 내용 수정 기능
    • 작업 완료 여부 변경
    • 작업 중요도(일반, 긴급) 변경
    • 작업 제목 변경
    • 작업 내용 변경
  • 작업 삭제 기능

개발 환경

  • IDE: IntelliJ
  • 언어: JAVA21

사실 처음에 예시 영상을 보고 CLI 서점을 생각했는데, 코드를 작성하다가 예시 데이터를 만들기 너무 귀찮아서 TODO 쪽으로 생각하다가 CLI 작업 관리자를 하기로 했다.


피드백

나만의 생각일 수 있겠지만 케빈과의 긍정적인 답변이 오갔다. 만약 현재 구조라면 요구사항에 따라 계속해서 새로운 클래스로 상태와 우선 순위를 나타낸다면 클래스의 구조가 복잡해질 수도 있을것 같아서 속성으로 Task의 상태를 나타내는게 더 자연스럽고 열려 있는 설계같다고 하셨다.

또 import java.io.*; 와 같은 와일드카드 기호 사용의 문제점, byte를 사용한 이유(메모리 절약), 입력 검증 로직 분리 등을 제안하셨고, 추가로 내가 기술적으로 관심이 많고 객체지향에 대해서 신경쓰려고 한게 긍정적으로 보인다고 하셨는데, 그런데 나중에 기획이 바뀔 수 있어서 ocp 원칙을 너무 고수하기보다 좀 더 유연하게 가져가는 것도 좋아보인다고 하셨다.


사실 내가 설계했지만, 처음 코드를 작성하면서 굳이 Task 클래스의 상태를 변경할 때 이렇게 다단계 상속을 이용해야 하는지에 대한 의문이 들긴 했다. 스테이트(State) 패턴을 참고하여 설계를 했다고는 했지만 Task 클래스와 State 인터페이스를 분리하지 않았는데, 실제로 처음 과제를 시작할 때 인터페이스까지 진도를 나가지 않아서 "너무 오버하는 것 아닌가" 하는 생각에 이와 같이 설계한 것이었다. 그런데 생각해보면 1주차동안 느낀 가장 큰 주제는 "스스로 공부하는 법" 이었기 때문에 내가 기존에 알고 있던 다른 지식을 사용해도 큰 문제가 없었던 것이다. 그래서 아래와 같이 리팩토링을 진행한 후에 과제 승인을 받았다.

프로그램 설명

  • CLI 기반의 간단한 작업 관리 프로그램
    • 사용자는 해야 할 작업을 등록하고 관리할 수 있다.
  • 각 작업은 작업의 상태를 의미하는 TaskState를 속성으로 가진다.
    • 진행중을 의미하는 Pending과 완료됨을 의미하는 Completed는 TaskState를 상속받는다.
    • 긴급하게 해야 함을 의미하는 Urgent는 Pending을 상속받는다.

클래스 다이어그램

최종 과제 제출 링크

https://github.com/100-hours-a-week/2-jay-kwon-cli-task-manager

 

GitHub - 100-hours-a-week/2-jay-kwon-cli-task-manager: 카카오테크 부트캠프 1주차 과제를 위한 저장소

카카오테크 부트캠프 1주차 과제를 위한 저장소. Contribute to 100-hours-a-week/2-jay-kwon-cli-task-manager development by creating an account on GitHub.

github.com


결론

사실 미리 다 완성해놓고 설 연휴 과제를 마무리한다고 미루다가 29일에 제출을 완료했는데 검토자 설정을 안 해놔서 검사를 31일에 받았다.. 미뤘던 제출에 대한 검사를 더 미룬 것이다. 다음 과제부터는 미리미리 검토자 설정을 해두고 피드백을 빨리 받아서 더 완성도있는 과제를 작성해야겠다는 생각이 들었다.

728x90
Comments