이제 웹의 기본적인 기능인 CRUD(Create,Read,Update,Delete)를 사용해서 motivation 앱을 만드는 수업을 받았다.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
private Scanner sc;
public App(Scanner sc) {
this.sc = sc;
}
public void run() {
System.out.println("== motivation execution ==");
int lastId = 0;
// Motivation motivation0 = null;
// Motivation motivation1 = null;
// Motivation motivation2 = null;
// Motivation[] motivations = new Motivation[3];
List<Motivation> motivations = new ArrayList<>();
while (true) {
System.out.print("commend) ");
String cmd = sc.nextLine().trim();
if (cmd.equals("exit")) {
System.out.println("== motivation end ==");
break;
} else if (cmd.length() == 0) {
System.out.println("명령어를 입력해주세요.");
continue;
}
if (cmd.equals("add")) {
int id = lastId + 1;
System.out.print("motivation :");
String body = sc.nextLine();
System.out.print("source :");
String source = sc.nextLine();
Motivation motivation = new Motivation(id,body,source);
motivations.add(motivation);
// motivations[id - 1] = motivation;
// if (motivation.id == 1) {
// motivation0 = motivation;
// }else if (motivation.id == 2) {
// motivation0 = motivation;
// }else if (motivation.id == 3) {
// motivation1 = motivation;
// }
System.out.printf("%d번 motivation 이 등록 되었습니다.\n", id);
lastId++;
} else if(cmd.equals("list")) {
System.out.println("== motivation list ==");
System.out.printf(" id // motivation // source \n");
System.out.println("=".repeat(40));
// for(Motivation motivation : motivations) {
// System.out.println(motivation.toString());
// }
if (motivations.size() == 0) {
System.out.println("등록된 motivation 없음.");
} else {
System.out.println("있음.");
System.out.println("등록된 motivation 개수 : " + motivations.size());
}
}
}
}
}
class Motivation {
int id;
String body;
String source;
public Motivation(int id, String body, String source) {
this.id = id;
this.body = body;
this.source = source;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
@Override
public String toString() {
return "Motivation{" +
"id=" + id +
", body='" + body + '\'' +
", source='" + source + '\'' +
'}';
}
}
이렇게 구현중이고 list로 데이터를 불러오는 것을 구현하고 있다.
public class App {
private Scanner sc;
public App(Scanner sc) {
this.sc = sc;
}
public void run() {
System.out.println("== motivation execution ==");
int lastId = 0;
List<Motivation> motivations = new ArrayList<>();
while (true) {
System.out.print("commend) ");
String cmd = sc.nextLine().trim();
if (cmd.equals("exit")) {
System.out.println("== motivation end ==");
break;
} else if (cmd.length() == 0) {
System.out.println("명령어를 입력해주세요.");
continue;
}
if (cmd.equals("add")) {
int id = lastId + 1;
System.out.print("motivation :");
String body = sc.nextLine();
System.out.print("source :");
String source = sc.nextLine();
Motivation motivation = new Motivation(id, body, source);
motivations.add(motivation);
System.out.printf("%d번 motivation 이 등록 되었습니다.\n", id);
lastId++; //마지막 번호 증가
} else if (cmd.equals("list")) {
System.out.println("== motivation list ==");
System.out.printf(" id // motivation // source \n");
System.out.println("=".repeat(40));
if (motivations.size() == 0) {
System.out.println("등록된 motivation 없음.");
} else {
System.out.println("있음.");
System.out.println("등록된 motivation 개수 : " + motivations.size());
}
}
}
}
}
리팩토링과정을 거쳐서, Motivation 클래스도 보면,
class Motivation {
int id;
String body;
String source;
public Motivation(int id, String body, String source) {
this.id = id;
this.body = body;
this.source = source;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
@Override
public String toString() {
return "Motivation{" +
"id=" + id +
", body='" + body + '\'' +
", source='" + source + '\'' +
'}';
}
}
이렇게 데이터를 저장하고 불러오기 위해 생성자와 getter setter까지 준비해서 데이터를 불러올 수 있게 되었다.
이제는 입력한 정보가 제대로 나오도록 만들어야한다.
if (motivations.size() == 0) {
System.out.println("등록된 motivation 없음.");
continue;
}
System.out.println("== motivation list ==");
System.out.printf(" id // source // body \n");
System.out.println("=".repeat(40));
// System.out.println("있음.");
// System.out.println("등록된 motivation 개수 : " + motivations.size());
for (int i = motivations.size() - 1; i >= 0; i--) {
Motivation motivation = motivations.get(i);
if (motivation.getSource().length() > 7) {
System.out.printf(" %d // %s // %s \n", motivation.getId(), motivation.getSource().substring(0, 5) + "...", motivation.getBody());
continue;
}
System.out.printf(" %d // %s // %s \n", motivation.getId(), motivation.getSource(), motivation.getBody());
}
}
}
}
}
이렇게 해결 한 다음에 유지보수에 관련한 내용을 듣게 되었다. 유지보수를 쉽게 다른 사람도 할 수 있게끔 (또는 협업을 위한) 모듈 분리와 패키지 이동리팩토링에 대해서 배웠다. 항상 개발을 할 때는 유지 보수를 하기 쉬운 형태로 만들어야한다. 그래서 우리는 클래스를 일단 5개로 나누게 되었다.
public class Main
public class App
public class SystemController
public class MotivationController
public class Motivation
이렇게 5개로 나눈 후 지금까지 구현했던 것들을 하나하나 옮기면서 확인하는 작업을 거치게 되었다.
그리고 컨테이너 클래스를 만들어서 구조를 더 개선 시켰다.
public class Container {
private static Scanner sc;
// 공유자원을 모아두는 공간 초기화
public static void init() {
sc = new Scanner(System.in);
}
// 공유 자원을 모아두는 공간 해제
public static void close() {
sc.close();
}
public static Scanner getScanner() {
return sc;
}
}
main 클래스의 스캐너를 지우고 컨테이너를 만들어 스캐너를 여기서 다 담당하도록 만들었다.
이후 각 기능이 정상작동하게끔하기 위해 코드 수정을 거치고 삭제기능을 만들기 시작했다.
삭제기능을 구현하면서 파싱(parsing)의 개념도 함께 배우면서 구현했다.
else if (cmd.startsWith("delete")) {
//parsing
String[] cmdBits = cmd.split("\\?", 2);
String actionMethod = cmdBits[0]; //delete
Map<String, String> params = new HashMap<>();
String[] paramBits = cmdBits[1].split("&");
for (String paramStr : paramBits) {
String[] paramStrBits = cmdBits[1].split("=", 2);
String key = paramStrBits[0];
String value = paramStrBits[1];
params.put(key, value);
}
motivationController.delete(cmd);
}
그렇게 수업이 끝났다.
'Coding History' 카테고리의 다른 글
MVC 패턴이란? (0) | 2024.07.01 |
---|---|
국비 지원 IT(웹앱개발) 취업반 강의 18일차 (motivation 앱 만들기) (1) | 2024.07.01 |
2024. 06. 27. 시험 문제 풀이 (0) | 2024.06.27 |
국비 지원 IT(웹앱개발) 취업반 강의 16일차 (다항식 계산기 만들기 과정) (0) | 2024.06.27 |
레드벨벳 dumb dumb, 덤을 몇번 불렀을까? (코딩 심심풀이) (0) | 2024.06.27 |