티스토리 뷰
https://nikeisme827.tistory.com/18
[Java] 배열과 ArrayList (4) - 데이터를 읽어 들이고 배열 활용하기/ 간단한 Todolist 만들기
이 데이터를 가진 txt파일이 아래와 같이 원하는 형식으로 출력되게 할 것이다. ★ Maven project를 이용하여 project 파일 만들기 ☆ Maven이란? - 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으
nikeisme827.tistory.com
위의 게시글에서 파일 입출력을 적용하여 데이터를 읽어들였다.
하나의 class만 이용하면 한계점
1. 하나의 클래스 App.java에서 데이터 입출력, 연산, 출력 처리를 모두 다 하고 있다. ▶ God class
2. 객체가 아닌 기본 자료형을 활용 중이라 관리가 불편하다.
This step.
1. Todo 데이터를 하나로 모아서 관리해주느 별도의 클래스 Todo를 생성할 것이다.
- 진행 여부 필드 추가 : Boolean is Completed
2. 생성한 클래스 (Todo)를 활용하여 데이터를 관리한다.
3. 객체 ( Todo) 배열을 활용하여 읽은 데이터들을 Java에서 관리한다.
4. 할 일 순서 번호를 매겨 하나의 Todo를 조회하는 기능을 구현한다.
★ Todo 클래스 만들고, 데이터 하나로 모으기

맛있게 요리할 데이터는 바로 이 todo.txt이다.
Todo 데이터를 하나로 모아서 관리해주는 별도의 com.todo.model 패키지를 만들어 클래스 Todo를 생성했다.


1. Todo 데이터가 가지고 있는 멤버 변수를 보자.
멤버 ( Member ) : 해당 클래스가 가지고 있는 구성원 ( 속성, 메서드)
할 일 번호 / 할 일 제목 / 할 일 내용 / 할 일 마감기간 그리고 이번에는 진행 여부도 만들었다.
2. Contructor를 구현하여 멤버 변수의 값을 지정하고 인스턴스를 초기화 하기 위해 생성자를 직접 구현한다.
☆생성자 ( Constructor)
- 주로 멤버 변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수 값들을 초기화 하는 역할

3. getter , setter 메서드 활용하기
private로 선언한 멤버 변수를 외부 코드에서 사용하기 위해 getter,setter 메서드를 활용하여 값을 가져오고 지정한다.
getter,setter 메서드로 public을 이용하여 private에 접근할 수 있다.
★ Todo 데이터 입출력 결과 관리, 하나의 Todo 조회 해보기

1. Todo 데이터를 객체 멤버 변수 RESOURCES로 초기화 하기.
2. LocalDate를 yyyy-MM-dd 형태로 변환하기 위해 객체 멤버 변수 DATE_PATTERN으로 초기화 하기.
3. 파일 경로를 설정하고, todo data.txt 파일을 얻는다.
data가 몇 줄인지 long 타입 numberOfRows 변수로 알아보자.
값이 더 큰 타입 ▶ 작은 타입으로 변환 할때는 명시적으로 변환하려는 타입을 써야한다.
이렇게 3 줄이 나온다.
출력 화면

4. 이 3줄을 담은 Todo 배열 타입의 todos 인스턴스를 만들어보자.
List를 사용하기 위해 하나로 인스턴스화 하기 위해 java.util.List 인터페이스 클래스를 이용한다.
배열 하나로 만들기 위해 List<String>타입의 lines 인스턴스로 만들어 준다.
그럼 이렇게 배열 한 줄로 완성된다.
출력 화면


1. index를 0부터 초기화 한다.
2.각 인스턴스에 순차적으로 적용되기 위해 for each 구문을 이용한다.
각 항목 줄 바꿈 하기.
id는 Long타입으로 변환
duedate 초기화한 DATE_PATTERN 적용시키기
3. id , title, dueDate, description 매개변수가 적용된 Todo 타입의 todo 인스턴스를 생성한다.
출력 화면

4. todo의 index가 1씩 증가하도록 한다.
전체 Todos 조회를 해보자.
다시 Todo.java로 들어가자.

toString을 오버라이딩해준다.
그럼 지정한 형태로 출력할 수 있다.
출력 화면


참조변수 값 그대로 출력하면 내부적으로 toString()이 호출된다.
할 일 순서 번호(임의)로 하나의 Todo를 조회해보자.

Todo 2번을 조회해봤다.
출력 화면

개선된 부분
- 기본 자료형들을 하나의 참조 자료형(참조 타입, Todo)으로 모아서 관리하기 때문에
raw data를 건들지 않고, 별도의 클래스로 관리하게 됨 (Wrapping)
현재 한계점
- 메인 화면에 해당하는 App.java에서 데이터의 입출력과 결과 데이터를 출력 등 전부 수행하고 있음.
package com.todo;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import com.todo.model.Todo;
public class App {
private static final String RESOURCES = "src/main/resources/";
private static final DateTimeFormatter DATE_PATTERN = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static void main(String[] args) throws IOException {
final Path filePath = Paths.get(RESOURCES + "todo-data-simple.txt");
Long numberOfRows = Files.lines(filePath).count();
// System.out.println(numberOfRows.intValue());
Todo[] todos = new Todo[numberOfRows.intValue()];
List<String> lines = Files.readAllLines(filePath);
// System.out.println(lines);
int index = 0;
for (String line : lines) {
final String[] columns = line.split("\t");
final Long id = Long.parseLong(columns[0]);
final String title = columns[1];
final LocalDate dueDate = LocalDate.parse(columns[2], DATE_PATTERN);
final String description = columns[3];
// id, title, dueDate, description을 어디에 쓰지?
Todo todo = new Todo(id, title, dueDate, description);
// System.out.println(todo);
todos[index] = todo;
index++;
// todos[index++] = new Todo(Long.parseLong(columns[0]),
// columns[1],
// LocalDate.parse(columns[2], DATE_PATTERN),
// columns[3]
// );
}//forEach() 끝
// 전체 Todos 조회
// System.out.println( Arrays.toString(todos) );
for (int i = 0; i < todos.length; i++) {
// System.out.println(todos[i]); // 참조변수 값 그대로 출력하면 내부적으로 toString()이 호출됨
}
// 할 일 순서 번호(임의)로 하나의 Todo 조회
Long todoNumber = 2L;
for (Todo todo : todos) {
if(todo.getId() == todoNumber) System.out.println(todo);
}
}
}
package com.todo.model;
import java.time.LocalDate;
public class Todo {
private Long id;
private String title;
private String description;
private LocalDate dueDate;
private Boolean isCompleted;
public Todo(Long id, String title, LocalDate dueDate, String description) {
this.id = id;
this.title = title;
this.description = description;
this.dueDate = dueDate;
this.isCompleted = false; // 기본값은 false
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LocalDate getDueDate() {
return dueDate;
}
public void setDueDate(LocalDate dueDate) {
this.dueDate = dueDate;
}
public Boolean getIsCompleted() {
return isCompleted;
}
public void setIsCompleted(Boolean isCompleted) {
this.isCompleted = isCompleted;
}
@Override
public String toString() {
return "Todo [id=" + id + ", title=" + title + ", description=" + description + ", dueDate=" + dueDate
+ ", isCompleted=" + isCompleted + "]";
}
}'차곡차곡 > Java' 카테고리의 다른 글
| [Java] 데이터 파싱하는 부분을 별도의 클래스로 분리하기. (0) | 2022.05.11 |
|---|---|
| [Java] 다형성 - 상위 클래스 타입의 참조 변수로 하위 클래스의 인스턴스를 참조할 수 있다???? (0) | 2022.05.10 |
| [Java] 형 변환과 다형성 (0) | 2022.05.09 |
| [Java] 오버로딩(overloading) / 오버라이딩( overriding) (0) | 2022.05.08 |
| [Java] 상속 (inheritance) - 의미 / 오버라이딩 (overriding) / super 예약어 (0) | 2022.05.08 |
- Total
- Today
- Yesterday
- JPA애플리케이션개발코드
- tick 만들기
- Counter 만들기
- 버튼누르면전구이미지변하기
- pip 설치 오류
- 온량 서울숲점
- JPA라이브러리
- intellij 한글 깨짐
- 영주 한우
- 영속성 관리
- 커틀렛 맛집
- 로제 파스타 맛집
- JPQL이란
- React를 이용한 Counter 만들기
- fragment태그
- 꾸덕꾸덕 파스타 맛집
- React
- 리액트 엘리먼트 렌더링하기
- DDL 생성 콘솔 출력
- 엔티티매니저팩토리
- JPA 기본키 매핑 전략
- JPA
- 영주역 맛집
- react counter
- 리액트 이벤트 처리하기
- 풍기역맛집
- 데이터베이스 스키마 자동 생성
- 토마호크 맛집
- 콘솔 창 한글 깨짐
- 엘리먼트 렌더링
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
