ArticleManager 구현을 들어갔다. 직역하면 게시판 관리인인데 바로 전에 했던 motivation 앱과 거의 동일하다.
package com.koreait;
import java.util.Scanner;
public class App {
private final Scanner sc;
public App(Scanner sc) {
this.sc = sc;
}
public void run() {
System.out.println("== 프로그램 시작 ==");
while (true) {
System.out.print("명령어) ");
String cmd = sc.nextLine().trim();
if (cmd.equals("exit")) {
System.out.println("== 프로그램 종료==");
break;
} else if (cmd.isEmpty()){
System.out.println("명령어를 입력해주세요");
}
if (cmd.equals("article write")) {
System.out.print("제목 : ");
String title = sc.nextLine().trim();
System.out.print("내용 : ");
String body = sc.nextLine().trim();
System.out.println("1번 글이 생성되었습니다.");
}
}
}
}
우선 순차적으로 기능들을 구현중이다.
package com.koreait;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
int id;
int lastArticleId;
private final Scanner sc;
List<Article> articles;
private Article foundArticle;
private Article article;
public App(Scanner sc) {
this.sc = sc;
this.articles = new ArrayList<>();
this.lastArticleId = 0;
}
public void run() {
id = lastArticleId;
//List<Article> articles = new ArrayList<>();
System.out.println("== 프로그램 시작 ==");
makeTestData();
//printArticles();
while (true) {
System.out.print("명령어) ");
String cmd = sc.nextLine().trim();
if (cmd.equals("exit")) {
System.out.println("== 프로그램 종료==");
break;
} else if (cmd.isEmpty()) {
System.out.println("명령어를 입력해주세요");
}
if (cmd.equals("article write")) {
System.out.println("==게시글 작성==");
int id = lastArticleId + 1;
String regDate = Util.getNow();
String updateDate = regDate;
System.out.print("제목 : ");
String title = sc.nextLine();
System.out.print("내용 : ");
String body = sc.nextLine();
Article article = new Article(id, regDate, updateDate, title, body);
articles.add(article);
System.out.println(id + "번 글이 생성되었습니다");
lastArticleId++;
} else if (cmd.startsWith("article list")) {
System.out.println("==게시글 목록==");
String[] cmdParts = cmd.split(" ");
String keyword = cmdParts.length == 3 ? cmdParts[2] : "";
List<Article> filteredArticles;
if (keyword.isEmpty()) {
filteredArticles = articles;
} else {
filteredArticles = new ArrayList<>();
for (Article article : articles) {
if (article.getTitle().contains(keyword)) {
filteredArticles.add(article);
}
}
}
if (filteredArticles.isEmpty()) {
System.out.println("아무것도 없어");
} else {
System.out.println(" 번호 / 날짜 / 제목 / 내용 ");
for (int i = filteredArticles.size() - 1; i >= 0; i--) {
Article article = filteredArticles.get(i);
if (Util.getNow().split(" ")[0].equals(article.getRegDate().split(" ")[0])) {
System.out.printf(" %d / %s / %s / %s \n", article.getId(), article.getRegDate().split(" ")[1], article.getTitle(), article.getBody());
} else {
System.out.printf(" %d / %s / %s / %s \n", article.getId(), article.getRegDate().split(" ")[0], article.getTitle(), article.getBody());
}
}
}
} else if (cmd.startsWith("article detail")) {
System.out.println("==게시글 상세보기==");
doSplit(cmd);
System.out.println("번호 : " + foundArticle.getId());
System.out.println("작성날짜 : " + foundArticle.getRegDate());
System.out.println("수정날짜 : " + foundArticle.getUpdateDate());
System.out.println("제목 : " + foundArticle.getTitle());
System.out.println("내용 : " + foundArticle.getBody());
} else if (cmd.startsWith("article delete")) {
System.out.println("==게시글 삭제==");
doSplit(cmd);
articles.remove(foundArticle);
System.out.println(id + "번 게시글이 삭제되었습니다");
} else if (cmd.startsWith("article modify")) {
System.out.println("==게시글 수정==");
doSplit(cmd);
System.out.println("기존 제목 : " + foundArticle.getTitle());
System.out.println("기존 내용 : " + foundArticle.getBody());
System.out.print("새 제목 : ");
String newTitle = sc.nextLine();
System.out.print("새 내용 : ");
String newBody = sc.nextLine();
foundArticle.setTitle(newTitle);
foundArticle.setBody(newBody);
foundArticle.setUpdateDate(Util.getNow());
System.out.println(id + "번 게시글이 수정되었습니다");
} else {
System.out.println("사용할 수 없는 명령어입니다");
}
}
System.out.println("==프로그램 종료==");
sc.close();
}
private void makeTestData() {
System.out.println("==테스트데이터==");
for (int i = 1; i < 4; i++) {
articles.add(new Article (++lastArticleId, Util.getNow(), Util.getNow(),"제목 " + i, "내용 " + i));
}
}
private void doSplit(String cmd) {
int id = Integer.parseInt(cmd.split(" ")[2]);
for (Article article : articles) {
if (article.getId() == id) {
foundArticle = article;
break;
}
}
if (foundArticle == null) {
System.out.println("해당 게시글은 없습니다");
}
}
}
쓰는 과정에 중복코드를 제거하는 작업을 거쳐봤는데 나는 doSplit메서드를 만들어서 해결했다. 근데 아마 이게 올바른 해결법은 아닐 것이다.
private static Article findArticleById(int id) {
for(int i = 0; i < articles.size(); i++){
if(articles.get(i).getId() == id){
return article;
}
}
return null;
}
근데 강사님이 하시는거 보니까 나랑 비슷하긴 한데 나는 저렇게 쓰니까 뭔가 조금씩 이상한 부분이 있었다. 근데 이렇게 쓰니까 그런 부분이 없었다. 무슨 차이인지.. 솔직히 잘 못찾겠다 ㅠ
아무튼 하루종일 뭔가 시키시는걸 구현하는데 시간을 다 썼다.
시간들 들여서 천천히 하다보면 조악하지만 어떻게든 완성이 되는데 도대체 내가 어떻게 완성 시켰는지 정확히 이해가 되지 않는다. 할 때는 뭔가 알고 하는데 나중에 시간이 지나서 코드를 확인하면 내가 어떤 의도로 썼는지 좀 가물가물하고 다시 찬찬히 들여다 봐야지 조금씩 기억이 난다. 원래 이런게 맞는건지 불안하다.
import java.util.List;
import java.util.Scanner;
public class Member {
private final Scanner sc;
private int id;
private String loginId;
private String loginPw;
private String name;
static List<Member> memberList;
public Member(Scanner sc) {
this.sc = sc;
}
public void signUp() {
System.out.println("회원가입 ");
System.out.print("id 입력) ");
loginId = sc.nextLine().trim();
System.out.print("pw 입력) ");
loginPw = sc.nextLine().trim();
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public void setLoginPw(String loginPw) {
this.loginPw = loginPw;
}
public boolean logIn(String loginId, String loginPw) {
if (this.loginId != null && this.loginPw != null) {
if (this.loginId.equals(loginId) && this.loginPw.equals(loginPw)) {
System.out.println("로그인 성공!");
return true;
} else {
System.out.println("로그인 실패. ID 또는 비밀번호가 틀렸습니다.");
return false;
}
} else {
System.out.println("회원 정보가 없습니다. 먼저 회원가입을 해주세요.");
return false;
}
}
}
아무튼 지금은 이렇게 회원가입 기능을 만들어 보고 있는데 어떻게 하다 보니까 회원 가입은 된다. 이제 중복 회원을 잡아내면 되는데 이걸 잘 모르겠다.
오늘 하루는 배운 것을 반복하는 것이 주된 목표였던 것 같다. 그래서 뭔가 단계별로 쓰면 굉장히 많은데 집중하느라 git에는 기록을 남겼는데 여기에는 하나하나 쓰지 못한 점 양해 바란다..
'Coding History' 카테고리의 다른 글
국비 지원 IT(웹앱개발) 취업반 강의 20일차 (ArticleManager) (0) | 2024.07.03 |
---|---|
2024. 07. 02. 문제풀이 (1) | 2024.07.02 |
2024. 07 .01 문제풀이 (0) | 2024.07.01 |
MVC 패턴이란? (0) | 2024.07.01 |
국비 지원 IT(웹앱개발) 취업반 강의 18일차 (motivation 앱 만들기) (1) | 2024.07.01 |