이번 단계에서는 Main.java에 있던 메모 관리 로직을 MemoService 클래스로 분리했다.
기능을 새로 추가한 것은 아니다.
이미 구현되어 있던 메모 작성, 목록 보기, 수정, 삭제 기능의 위치를 나누는 작업이다.
기존에는 Main.java 안에서 입력 처리와 메모 데이터 관리가 모두 이루어졌다.
이번에는 Main은 사용자 입력과 출력 흐름을 담당하고, MemoService는 메모 데이터를 관리하도록 역할을 나누었다.
기존 구조의 문제
기존에는 Main.java가 너무 많은 일을 하고 있었다.
메뉴 출력
사용자 입력 받기
메모 저장
메모 목록 출력
메모 수정
메모 삭제
즉, Main이 사용자 입력 흐름도 처리하고, 메모 데이터 관리도 직접 하고 있었다.
예를 들어 이전에는 Main.java 안에서 직접 리스트를 가지고 있었다.
List<Memo> memos = new ArrayList<>();
그리고 직접 메모를 추가하거나 수정하거나 삭제했다.
memos.add(memo);
memos.set(index, updateMemo);
memos.remove(index);
이 방식도 동작은 한다.
하지만 기능이 늘어날수록 Main.java가 계속 길어지고, 어떤 코드는 사용자 입력 처리인지, 어떤 코드는 메모 데이터 처리인지 구분하기 어려워질 수 있다.
그래서 이번 단계에서는 메모 관리 로직을 별도 클래스로 분리했다.
분리 후 구조
이번 단계에서는 메모 관리 로직을 MemoService로 옮겼다.
역할은 다음처럼 나누었다.
Main
→ 사용자 입력과 출력 담당
MemoService
→ 메모 데이터 관리 담당
파일 구조는 다음과 같다.
java-console-memo/src/
├─ Main.java
├─ Memo.java
└─ MemoService.java
Memo는 메모 하나의 데이터를 표현하고,
MemoService는 여러 메모를 저장하고 관리한다.
MemoService 만들기
MemoService는 메모 목록을 직접 가지고 있다.
import java.util.ArrayList;
import java.util.List;
public class MemoService {
private List<Memo> memos = new ArrayList<>();
}
이제 memos 리스트는 Main이 아니라 MemoService 안에 있다.
Main이 직접 메모 목록을 관리하지 않는다.
MemoService가 메모 목록을 관리한다.
이렇게 하면서 Main의 책임을 줄이고, 메모 데이터 관리 책임을 MemoService로 옮겼다.
메모 추가 로직 분리
기존에는 Main에서 직접 메모 객체를 만들고 리스트에 추가했다.
Memo memo = new Memo(title, content);
memos.add(memo);
이제는 MemoService 안에 메모 추가 메서드를 만들었다.
public void addMemo(String title, String content) {
Memo memo = new Memo(title, content);
memos.add(memo);
}
Main에서는 직접 리스트에 추가하지 않고, 메서드를 호출만 한다.
memoService.addMemo(title, content);
흐름은 다음처럼 바뀌었다.
Main
→ 제목과 내용을 입력받는다.
→ memoService.addMemo(title, content)를 호출한다.
MemoService
→ Memo 객체를 만든다.
→ memos 리스트에 저장한다.
메모 목록 조회
목록을 출력하려면 Main에서 메모 목록을 가져와야 한다.
그래서 MemoService에 getMemos()를 만들었다.
public List<Memo> getMemos() {
return memos;
}
Main에서는 이 메서드를 통해 메모 목록을 가져온다.
Memo memo = memoService.getMemos().get(i);
현재는 getMemos()로 리스트를 그대로 반환하고 있다.
나중에는 외부에서 리스트를 직접 수정하지 못하게 구조를 더 다듬을 수도 있겠지만, 지금 단계에서는 역할 분리를 먼저 연습하는 데 집중했다.
메모 수정 로직 분리
기존에는 Main에서 직접 리스트의 특정 위치를 교체했다.
Memo updateMemo = new Memo(newTitle, newContent);
memos.set(index, updateMemo);
이제는 MemoService에 수정 메서드를 만들었다.
public void editMemo(int index, String newTitle, String newContent) {
Memo updatedMemo = new Memo(newTitle, newContent);
memos.set(index, updatedMemo);
}
Main에서는 이렇게 호출한다.
memoService.editMemo(index, newTitle, newContent);
즉, Main은 “몇 번째 메모를 어떤 값으로 수정할지”만 전달하고, 실제 리스트 교체는 MemoService가 처리한다.
메모 삭제 로직 분리
삭제도 마찬가지다.
기존에는 Main에서 직접 삭제했다.
memos.remove(index);
이제는 MemoService에 삭제 메서드를 만들었다.
public void deleteMemo(int index) {
memos.remove(index);
}
Main에서는 이렇게 호출한다.
memoService.deleteMemo(index);
삭제할 index는 Main에서 사용자 입력을 받아 계산하고, 실제 삭제 처리는 MemoService에게 맡긴다.
비어 있는지 확인, 크기 확인
Main에서는 메모가 비어 있는지 확인하거나, 메모 개수를 알아야 한다.
예를 들어 목록을 출력할 때 메모가 하나도 없으면 안내 문구를 보여줘야 한다.
수정이나 삭제를 할 때도 입력한 번호가 유효한지 확인하려면 전체 개수가 필요하다.
그래서 MemoService에 다음 메서드도 만들었다.
public boolean isEmpty() {
return memos.isEmpty();
}
public int size() {
return memos.size();
}
이제 Main은 직접 리스트를 가지고 있지 않지만, 필요한 정보는 MemoService에게 물어볼 수 있다.
memoService.isEmpty()
memoService.size()
Main.java의 변화
이제 Main.java에서는 List<Memo>를 직접 만들지 않는다.
기존에는 다음처럼 작성했다.
List<Memo> memos = new ArrayList<>();
변경 후에는 MemoService 객체를 만든다.
MemoService memoService = new MemoService();
그리고 각 기능을 실행할 때 memos를 직접 넘기는 대신 memoService를 넘긴다.
addMemo(scanner, memoService);
printMemos(memoService);
editMemo(scanner, memoService);
deleteMemo(scanner, memoService);
즉, Main은 메모 목록 자체를 직접 다루기보다, MemoService를 통해 메모 기능을 사용한다.
역할 분리 후 흐름
메모 작성 흐름은 이렇게 바뀌었다.
Main
→ 제목과 내용을 입력받는다.
→ memoService.addMemo(title, content)를 호출한다.
MemoService
→ Memo 객체를 만든다.
→ memos 리스트에 저장한다.
메모 수정 흐름은 다음과 같다.
Main
→ 수정할 번호와 새 제목/내용을 입력받는다.
→ memoService.editMemo(index, newTitle, newContent)를 호출한다.
MemoService
→ 해당 index의 메모를 새 Memo 객체로 교체한다.
메모 삭제 흐름도 마찬가지다.
Main
→ 삭제할 번호를 입력받는다.
→ memoService.deleteMemo(index)를 호출한다.
MemoService
→ 해당 index의 메모를 삭제한다.
각 기능에서 실제 데이터 처리는 MemoService가 담당하고, Main은 사용자와 주고받는 흐름에 집중한다.
현재 상태
현재 Java 콘솔 메모장은 다음 구조를 가진다.
Main.java
→ 메뉴 출력, 사용자 입력, 결과 출력
Memo.java
→ 메모 하나의 데이터 표현
MemoService.java
→ 메모 목록 관리, 추가, 수정, 삭제
기능은 이전과 같다.
메모 작성
메모 목록 보기
메모 수정
메모 삭제
프로그램 종료
하지만 기능이 들어 있는 위치가 정리되었다.
'Project > Memo Evolution' 카테고리의 다른 글
| #23 Servlet에서 JSP로 forward하기 (0) | 2026.06.21 |
|---|---|
| #22 Tomcat으로 Servlet 실행하기 (0) | 2026.06.21 |
| #20 Java 콘솔 메모장 : String 배열에서 Memo 클래스로 변경하기 (0) | 2026.06.21 |
| #19 Java 콘솔 메모장: CRUD기능 구현하기 (0) | 2026.06.20 |
| #18 Java 콘솔 메모장 시작 중 만난 IntelliJ 설정 문제 (0) | 2026.06.20 |