티스토리 뷰
https://nikeisme827.tistory.com/30
이 게시글에서는 메인 화면에 해당하는 App.java에서 데이터 입출력, 결과 화면 출력, 연산 등을 전부 수행하고 있다.
이 글에서는
1. 읽어들인 데이터를 parsing해주는 코드를 별도의 클래스인 TodoTSVParser.java로 분리
2. 분리한 클래스가 위치한 패키지 명은 data (data 접근 역할에 해당하는 부분이기 때문에)
3. App.java에서 조회에 해당하는 코드도 별도의 메서드로 분리
를 하겠다 탕탕탕!!
★ TodoTSVParser 클래스 만들어 따로 데이터 파싱하기
☆ parsing이란?
- 데이터를 분해, 분석하여 원하는 형태로 조립하고 다시 빼내는 프로그램을 말한다.
웹 상에서 주어진 정보를 내가 원하는 형태로 가공하여 서비스에서 다시 불러들이는 것이다.
이러한 parsing기법은 XMLparsing과 JSONparsing이 있다.

이 데이터를 맛나게 요리해보자.
대략적인 순서는 이렇다.
1. 데이터의 입출력
2. 입출력데이터 파싱(Parsing)
3. 결과값 출력(findAll, findById)
일련의 과정을 거칠 것이다.
메인 클래스인 App.java 에서 데이터를 읽어들인다.

1. final이 다른 곳에서 오버라이딩을 하지 못하게 하는 메서드라는 것을 상기하자.
data가 있는 경로를 불러들인다.
2. 데이터 행 번호를 메기는 numberOfRows 인스턴스를 생성한다.
3. 이 데이터들을 List<String>타입으로 생성한다.
자, 이제 이 글을 시작하는 이유.
데이터를 파싱하는 부분을 만들어준다.
용이한 데이터 관리를 하기 위해 TodoTSVParser라는 외주업체와 계약을 맺는다 생각하면 된다.
TodoTSVParser클래스를 생성하여 별도의 메서드를 작성해야한다.
우선 하나의 Todo 데이터를 파싱하는 메서드를 작성한다. Todo 인스턴스를 반환해준다.

class A : 왼쪽 창은 저번 단계의 모든 과정을 처리했던 Main class
class B : 오른쪽 창은 읽어드린 데이터를 파싱해주는 TodoTSVParsing class
1. class A에서 for each 구문을 이용해 lines를 파싱해주었지만,
메인이 아닌 class B에서 데이터 파싱을 하기 때문에 ParseFromTSV 내부에 넣어준다.
2. 메서드에 넣을 인자 값 String line을 넣어준다
3. Todo 타입의 todo 인스턴스를 만들어 id, title, dueDate, dsecription이 담아지도록 하고,
결과적으로 todo 인스턴스를 반환하도록 한다.
Class A에서 반복문을 가져오는게 아닌 메서드만 가져왔다.
결과적으로 반복문을 가져오지 않았기 때문에 Class B에서는 한 줄씩 파싱이 될 것이다.
이제, 이 Class B에서 배열에 추가하는 메서드를 만들어보자. 그리고 파싱이 완료된 todo 배열을 반환해보자.

1. todos 배열 선언 및 초기화를 한다.
배열 안에는 데이터의 수만큼 배열을 만들어야 하니까 numberOfRows를 입력한다.
2. index 변수를 초기화한다.
3. 배열 안에 인스턴스를 넣기 위해 반복문을 작성한다.
todos의 각 index에 todos를 넣어야 한다.
때문에 parseFromTSV의 파싱한 line을 넣어줘야한다.
index가 1씩 증가하도록 한다.
4. 결과적으로 todos를 반환하도록 한다.
지금까지 만든 TodoTSVParser를 써야한다.
Main 클래스로 넘어가 데이터를 파싱하는 부분을 별도의 클래스 TodoTSVParser.java로 분리하도록 한다.

1. App.java에 있는 parseLinesFromTSV를 불러오기 위해서 TodoTSVParser 메서드의 접근제어자를 public으로 해준다.

2. App.java가 데이터 파싱을 parseLinesFromTSV에게 부탁했다.
그럼 반복문을 실행한다.
3. 이와 동시에 parseFromTSV의 메서드가 실행된다.
4. 이는 todos를 반환한다.

5. parseLinesFromTSV의 반환 타입이 배열이기 때문에 Todo[ ] todos를 앞에 입력해준다.
파싱된 데이터를 활용하여 데이터를 출력해보는 part를 만들어보자.

1. 전체 Todo를 조회하기 위해 findAll 메서드를 사용한다.
2. 2L = 두번째 라인을 호출하고, 위와 같은 형태로 출력하도록한다.
3. findAll를 생성해보자
public static이 없으면 App 클래스의 인스턴스 메서드가 되고, 인스턴스 멤버는 객체를 생성한 후에 접근이 가능하기 때문에 꼭 입력해줘야한다.
4. Todo findById 는 할 일 순서 번호로 하나의 Todo를 조회하는 것이다.
todoNumber값과 일치하는 값을 찾기 위한 for each문을 입력한다.
대망의 결과가 나온다.
출력 화면

★ TodoTSVParser 클래스를 따로 생성하므로써 개선된 부분
1. 데이터 파싱하는 부분을 별도의 클래스로 관심사(역할)을 분리함을써 관리가 용이해진다.


'차곡차곡 > Java' 카테고리의 다른 글
| [Java] 인터페이스 - 인터페이스의 역할 (0) | 2022.05.15 |
|---|---|
| [Java] 추상 클래스 - (1) 추상 클래스 (0) | 2022.05.15 |
| [Java] 다형성 - 상위 클래스 타입의 참조 변수로 하위 클래스의 인스턴스를 참조할 수 있다???? (0) | 2022.05.10 |
| [Java] 배열 응용해보기 - Todo 데이터를 관리하는 별도의 Todo 클래스 생성하기 (0) | 2022.05.10 |
| [Java] 형 변환과 다형성 (0) | 2022.05.09 |
- Total
- Today
- Yesterday
- JPA 기본키 매핑 전략
- 데이터베이스 스키마 자동 생성
- DDL 생성 콘솔 출력
- pip 설치 오류
- 리액트 엘리먼트 렌더링하기
- tick 만들기
- React를 이용한 Counter 만들기
- 영속성 관리
- 커틀렛 맛집
- Counter 만들기
- JPA애플리케이션개발코드
- 토마호크 맛집
- 온량 서울숲점
- 풍기역맛집
- 영주역 맛집
- 콘솔 창 한글 깨짐
- 리액트 이벤트 처리하기
- fragment태그
- 엘리먼트 렌더링
- 영주 한우
- react counter
- JPQL이란
- 버튼누르면전구이미지변하기
- React
- 로제 파스타 맛집
- intellij 한글 깨짐
- 꾸덕꾸덕 파스타 맛집
- JPA
- 엔티티매니저팩토리
- JPA라이브러리
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
