사이먼's 코딩노트
[Java] 게시판 제작(3) 본문
[게시판 제작 ~ing]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 리포지터리 주소 URL : https://github.com/psm817/full_stack_proj_2024_03
[게시물 상세보기 기능 구현]
- 게시물을 고유 번호에 따라 리스트에 저장했다면 이번에는 "article detail 고유번호" 명령어를 통해 원하는 고유 번호 게시물의 상세내용을 볼 수 있도록 만들어보자.
- 아래 코드는 기존 작성된 코드 중 Main 메서드의 무한루프 안에 작성하였다.
else if(cmd.startsWith("article detail ")) {
String[] cmdBits = cmd.split(" ");
int id = Integer.parseInt(cmdBits[2]);
Article foundArticle = null;
for(int i = 0; i < articles.size(); i++) {
Article article = articles.get(i);
if(article.id == id) {
foundArticle = article;
break;
}
}
if(foundArticle == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
continue;
}
System.out.printf("번호 : %d\n", foundArticle.id);
System.out.printf("제목 : %s\n", foundArticle.title);
System.out.printf("내용 : %s\n", foundArticle.body);
}
- "article detail" 명령어는 "article detail 1" 과 같이 끝에 게시물 번호를 작성해야 명령어가 실행된다.
- 기존의 cmd를 특정 문자열과 비교할 때는 equals를 사용하였지만 이번에는 "article detail" 이라는 문장으로 시작됐을 때 동작해야되기 때문에 startsWith() 메서드를 사용하였다. [cmd.startsWith("article detail ")]
- 몇 번째 게시물의 상세보기를 원하는지 구분하는 방법은 게시물의 고유 번호를 통해서다. 고유 번호를 체크하는 방법은 입력된 cmd에서 공백 " " 을 기준으로 배열 공간을 나눠 체크할 수 있다.
- 예를 들어 "article detail 2" 라고 명령어를 치면 공백을 기준으로 총 3개의 문자열이 나눠지고 0번부터 2번까지 배열 공간에 해당 문자열을 각각 저장하고 배열의 2번째에 위치한 숫자를 찾는다.
- 공백을 기준으로 배열을 구분하는 방법은 split() 메서드를 사용하는 것이다. [String[] cmdBits = cmd.split(" ")]
- cmdBits[2]에 사용자가 입력한 게시물의 고유 번호가 저장되어 있고 해당 숫자를 id라는 변수를 만들어 넣어준다. 이 때 String 타입을 int 타입으로 바꿔주기 위해 Integer.parseInt() 메서드를 사용한다.
- 그 다음은 게시물이 있는지 없는지 확인하기 위해 foundArticle 이라는 변수를 하나 만들고 기본 세팅을 null 값을 준다.
- 만약 foundArticle이 null 이면 게시물이 존재하지 않는다는 출력문을 출력하도록 한다.
- 게시물이 있을 때는 반복문을 통해 게시물이 담겨있는 articles의 크기만큼 반복하여 저장된 게시물을 차례대로 가져오고 게시물의 고유 번호가 사용자가 직접 입력한 번호와 일치한다면 foundArticle에 해당 게시물 정보를 저장한다.
- 이 과정을 모두 거친 후 게시물이 존재한다면 가장 아래에서 출력문을 통해 상세보기를 원하는 게시물의 고유 번호, 제목, 내용을 출력한다.
[게시물 최초등록날짜 저장]
- 게시물을 최초 작성했을 때의 현재 날짜를 저장하고 "article detail"을 통해 최초등록날짜를 표시하기 위해선 저번에 Util.java에 생성했던 getNowDateStr() 메서드를 호출한다.
class Article {
int id;
String regDate;
String title;
String body;
Article(int id, String regDate, String title, String body) {
this.id = id;
this.regDate = regDate;
this.title = title;
this.body = body;
}
}
- 먼저 Article 클래스에 regDate라는 String 변수를 추가하고, 생성자에도 매개변수로 regDate를 받는다.
else if(cmd.equals("article write")) {
int id = lastArticleId + 1;
System.out.printf("제목 : ");
String title = scanner.nextLine();
System.out.printf("내용 : ");
String body = scanner.nextLine();
lastArticleId = id;
String regDate = Util.getNowDateStr();
Article article = new Article(id, regDate, title, body);
articles.add(article);
System.out.printf("%d번 글이 작성되었습니다.\n", id);
}
else if(cmd.startsWith("article detail ")) {
String[] cmdBits = cmd.split(" ");
int id = Integer.parseInt(cmdBits[2]);
Article foundArticle = null;
for(int i = 0; i < articles.size(); i++) {
Article article = articles.get(i);
if(article.id == id) {
foundArticle = article;
break;
}
}
if(foundArticle == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", id);
continue;
}
System.out.printf("번호 : %d\n", foundArticle.id);
System.out.printf("최초등록날짜 : %s\n", foundArticle.regDate);
System.out.printf("제목 : %s\n", foundArticle.title);
System.out.printf("내용 : %s\n", foundArticle.body);
}
- regDate를 Article 클래스에 추가했다면 Main 메서드로 이동하여 게시물을 작성하는 부분인 "article write" 와 게시물의 상세정보를 볼 수 있는 "article detail" 부분의 수정이 필요하다.
- "article write" 에서는 작성과 동시에 현재 날짜를 담는 변수인 regDate를 생성해주고 현재 날짜는 Util.java에 있는 getNowDateStr() 메서드를 호출한다. [String regDate = Util.getNowDateStr()]
- 그 다음은 article 객체를 생성할 때 생성자에 날짜 인자를 추가한다. [Article article = new Article(id, regDate, title, body)]
- "article detail" 에서는 최초등록날짜를 출력할 수 있도록 출력문을 수정한다.
- 현재까지 작성된 코드를 실행하면 다음과 같이 게시판이 동작한다.
반응형
'프로젝트 > [Java] 게시판 제작' 카테고리의 다른 글
[Java] 게시판 제작(6) (0) | 2024.02.23 |
---|---|
[Java] 게시판 제작(5) (0) | 2024.02.22 |
[Java] 게시판 제작(4) (0) | 2024.02.21 |
[Java] 게시판 제작(2) (0) | 2024.02.21 |
[Java] Scanner / 게시판 제작(1) (0) | 2024.02.19 |