#20 Java 콘솔 메모장 : String 배열에서 Memo 클래스로 변경하기

2026. 6. 21. 09:40·Project/Memo Evolution

 

이번 단계에서는 메모 하나를 String[] 배열이 아니라 Memo 클래스로 표현하도록 변경했다.

이전 단계에서는 Java 콘솔에서 메모 작성, 목록 보기, 수정, 삭제 기능을 구현했다.

그때 메모 하나는 다음처럼 문자열 배열로 저장했다.

String[] memo = {title, content};

그리고 값을 꺼낼 때는 배열 인덱스를 사용했다.

memo[0] // 제목
memo[1] // 내용

이 방식도 동작은 한다.

하지만 코드를 볼 때 memo[0]이 제목인지, memo[1]이 내용인지 계속 기억해야 한다.

그래서 이번 단계에서는 메모 하나를 더 명확하게 표현하기 위해 Memo 클래스를 만들었다.

 

기존에는 메모 하나를 String[] 배열로 다뤘다.

String[] memo = {title, content};

전체 메모 목록은 다음처럼 선언했다.

List<String[]> memos = new ArrayList<>();

이 구조에서는 메모 하나가 배열이기 때문에 제목과 내용을 인덱스로 구분해야 했다.

memo[0] // 제목
memo[1] // 내용

작은 프로그램에서는 크게 문제되지 않을 수 있다.

하지만 코드가 조금만 길어져도 memo[0]이 무엇을 의미하는지 바로 보이지 않는다.

예를 들어 목록을 출력할 때도 다음처럼 작성해야 했다.

System.out.println((i + 1) + ". " + memo[0]);
System.out.println(memo[1]);

동작은 하지만 의미가 명확하지 않았다.

 

Memo 클래스 만들기

그래서 메모 하나를 표현하는 Memo 클래스를 만들었다.

public class Memo {
    private String title;
    private String content;

    public Memo(String title, String content) {
        this.title = title;
        this.content = content;
    }

    public String getTitle() {
        return title;
    }

    public String getContent() {
        return content;
    }
}

이제 메모 하나는 단순한 문자열 배열이 아니라 Memo 객체가 되었다.

Memo
→ title
→ content

title과 content라는 이름이 생겼기 때문에, 메모가 어떤 데이터를 가지고 있는지 더 명확해졌다.

 

필드를 private으로 둔 이유

Memo 클래스 안의 필드는 private으로 만들었다.

private String title;
private String content;

private으로 두면 클래스 밖에서 필드에 직접 접근할 수 없다.

대신 값을 가져올 때는 getter 메서드를 사용한다.

public String getTitle() {
    return title;
}

public String getContent() {
    return content;
}

지금은 단순히 값을 꺼내는 정도지만, 이렇게 작성하면 나중에 클래스 내부 구조를 조금 더 안전하게 관리할 수 있다.

 

생성자의 역할

Memo 객체를 만들 때는 생성자를 사용한다.

public Memo(String title, String content) {
    this.title = title;
    this.content = content;
}

이 생성자는 제목과 내용을 받아서 Memo 객체 안에 저장한다.

예를 들어 다음 코드를 실행하면,

Memo memo = new Memo(title, content);

입력받은 title, content 값이 Memo 객체의 필드에 들어간다.

 

List 타입 변경

기존에는 문자열 배열 목록을 사용했다.

List<String[]> memos = new ArrayList<>();

이제는 Memo 객체 목록으로 변경했다.

List<Memo> memos = new ArrayList<>();

즉, memos는 이제 문자열 배열이 아니라 Memo 객체들을 저장하는 리스트다.

기존:
List<String[]>

변경 후:
List<Memo>

이 변화만으로도 코드의 의미가 더 명확해졌다.

memos 리스트 안에는 메모 객체들이 들어간다는 것을 타입만 봐도 알 수 있다.

 

메모 작성 코드 변경

기존에는 제목과 내용을 배열로 묶어서 저장했다.

String[] memo = {title, content};
memos.add(memo);

변경 후에는 Memo 객체를 생성해서 저장한다.

Memo memo = new Memo(title, content);
memos.add(memo);

흐름은 비슷하다.

제목 입력
→ 내용 입력
→ Memo 객체 생성
→ memos 리스트에 추가

차이는 메모 하나를 배열로 만들었는지, 클래스로 만들었는지다.

 

메모 목록 출력 코드 변경

기존에는 배열 인덱스로 제목과 내용을 꺼냈다.

System.out.println((i + 1) + ". " + memo[0]);
System.out.println(memo[1]);

변경 후에는 getter 메서드를 사용했다.

System.out.println((i + 1) + ". " + memo.getTitle());
System.out.println(memo.getContent());

이제 코드를 읽었을 때 의미가 더 분명하다.

memo.getTitle()
→ 메모 제목을 가져온다.

memo.getContent()
→ 메모 내용을 가져온다.

memo[0], memo[1]보다 훨씬 읽기 쉽다.

 

메모 수정 코드 변경

수정할 때도 기존에는 새 배열을 만들어 교체했다.

String[] updateMemo = {newTitle, newContent};
memos.set(index, updateMemo);

변경 후에는 새 Memo 객체를 만들어 교체했다.

Memo updateMemo = new Memo(newTitle, newContent);
memos.set(index, updateMemo);

즉, 해당 위치의 기존 메모 객체를 새 메모 객체로 바꾸는 방식이다.

수정 흐름은 이전과 같다.

수정할 번호 입력
→ index 계산
→ 새 제목 입력
→ 새 내용 입력
→ 새 Memo 객체 생성
→ memos.set(index, updateMemo)

바뀐 것은 데이터 표현 방식이다.

 

삭제 코드는 거의 그대로

삭제 기능은 크게 바뀌지 않았다.

삭제는 특정 index의 메모를 리스트에서 제거하는 작업이기 때문이다.

memos.remove(index);

기존에는 List<String[]>에서 제거했고, 이제는 List<Memo>에서 제거한다.

리스트 안에 들어 있는 타입은 바뀌었지만, 삭제 흐름 자체는 그대로다.

 

이번 단계에서 가장 크게 바뀐 점은 메모 하나를 표현하는 방식이다.

기존 방식은 다음과 같았다.

메모 하나 = String 배열

memo[0] = 제목
memo[1] = 내용

변경 후에는 다음과 같다.

메모 하나 = Memo 객체

memo.getTitle() = 제목
memo.getContent() = 내용

기능이 새로 늘어난 것은 아니지만, 코드의 의미가 더 명확해졌다.

 

처음에는 String[]만으로도 충분해 보였다.

하지만 메모에 필요한 정보가 늘어나면 배열 방식은 금방 불편해진다.

예를 들어 나중에 다음 정보가 추가될 수 있다.

id
작성일
수정일
중요 표시
카테고리

배열로 계속 관리한다면 이런 식으로 외워야 한다.

memo[0] // 제목
memo[1] // 내용
memo[2] // 작성일
memo[3] // 수정일

이렇게 되면 코드가 점점 헷갈린다.

반면 클래스를 사용하면 필드 이름으로 의미를 표현할 수 있다.

memo.getTitle()
memo.getContent()
memo.getCreatedAt()

그래서 이번 단계에서 Memo 클래스로 바꾼 것은 나중에 구조를 확장하기 위한 준비이기도 하다.

 

아직 파일 저장이나 DB 저장은 없다.
프로그램을 종료하면 메모는 사라진다.

하지만 이번 단계에서는 저장 기능보다, Java에서 데이터를 더 명확한 구조로 표현하는 데 집중했다.

다음 단계에서는 이 구조를 바탕으로 기능을 더 나누거나, 메모 저장 방식을 개선해볼 수 있을 것 같다.

'Project > Memo Evolution' 카테고리의 다른 글

#22 Tomcat으로 Servlet 실행하기  (0) 2026.06.21
#21 Java 콘솔 메모장: MemoService로 로직 분리하기  (0) 2026.06.21
#19 Java 콘솔 메모장: CRUD기능 구현하기  (0) 2026.06.20
#18 Java 콘솔 메모장 시작 중 만난 IntelliJ 설정 문제  (0) 2026.06.20
#17 Java 콘솔 메모장 시작하기  (0) 2026.06.20
'Project/Memo Evolution' 카테고리의 다른 글
  • #22 Tomcat으로 Servlet 실행하기
  • #21 Java 콘솔 메모장: MemoService로 로직 분리하기
  • #19 Java 콘솔 메모장: CRUD기능 구현하기
  • #18 Java 콘솔 메모장 시작 중 만난 IntelliJ 설정 문제
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발서적
    aws
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
#20 Java 콘솔 메모장 : String 배열에서 Memo 클래스로 변경하기
상단으로

티스토리툴바