Java로 콘솔 게시판 제작 중 boardInsert() 게시글 추가 오류

조회수 962회

안녕하세요. 제가 java로 콘솔 게시판을 만드는 데 어려움을 겪어서 조언을 듣고 싶습니다.

글을 게시판에 추가하는 과정에서 제대로 추가가 되지 않고 있습니다. 이미지

첫번째 글을 추가하면 게시판에 글이 하나 출력됩니다.

두번째 글을 추가하게 되면 첫번째 글은 사라지고 두번째 글이 두번 출력되게 됩니다.

아래는 코드입니다. 모두 같은 프로젝트, 같은 패키지 안에 있습니다. 총 3개입니다.

BoardVO.java

package sec15;

public class BoardVO { // 게시글 객체
    private int num;
    private String title;
    private String content;
    private String writer;
    private String registDate;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getWriter() {
        return writer;
    }

    public void setWriter(String writer) {
        this.writer = writer;
    }

    public String getRegistDate() {
        return registDate;
    }

    public void setRegistDate(String registDate) {
        this.registDate = registDate;
    }

}

BoardDAO.java

package sec15;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class BoardDAO { // 게시판 기능
    Scanner scanner = new Scanner(System.in);
    BoardVO vo = new BoardVO(); // 게시글 객체 생성
    List<BoardVO> boardList = new ArrayList<>(); // 게시글 객체를 저장할 List

    public void getBoardList() { // 게시판 목록 불러오기
        System.out.println("                     << 게시판 >>");
        System.out.println("번호        제목                   작성자     작성일   ");
        System.out.println("-------------------------------------------------------------------");
        for (int i = 0; i < boardList.size(); i++) {
            vo = boardList.get(i);
            System.out.printf(" %-3d |  %-15s  |  %3s  |  %-10s\n", vo.getNum() + 1, vo.getTitle(), vo.getWriter(),
                    vo.getRegistDate());
        }
        System.out.println("-------------------------------------------------------------------");
        System.out.println("(1. 새로쓰기, 2. 상세보기, 3. 수정, 4. 삭제 5. 종료)>> ");
    }

    public void boardInsert() { // 게시글 새로쓰기
        if (boardList.size() == 0) {
            System.out.println("첫 글을 작성합니다.!!!\n");
        }

        System.out.print("글제목(취소 : quit): ");
        String title = scanner.nextLine();
        if (title.equals("quit")) {
            System.out.println("작성이 취소되었습니다.");
            return;
        }

        System.out.print("작성자(취소 : quit): ");
        String writer = scanner.nextLine();
        if (title.equals("quit")) {
            System.out.println("작성이 취소되었습니다.");
            return;
        }

        System.out.print("글내용(취소 : quit): ");
        String content = scanner.nextLine();

        if (title.equals("quit")) {
            System.out.println("작성이 취소되었습니다.");
            return;
        }

        vo.setNum(boardList.size()); // 게시글 개수로 번호 저장
        vo.setTitle(title); // 글 제목 저장
        vo.setWriter(writer); // 글 작성자 저장
        vo.setContent(content); // 글 내용 저장
        // 현재 날짜 저장
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String registDate = sdf.format(new Date());
        vo.setRegistDate(registDate);
        boardList.add(vo); // List에 현재 작성한 게시글 저장
        System.out.println("글이 추가되었습니다.\n");
    }

    public void boardDetail(int select) { // 게시글 상세보기
        vo = boardList.get(select - 1);
        System.out.println("No. " + vo.getNum());
        System.out.println("제목    : " + vo.getTitle());
        System.out.println("작성자 : " + vo.getWriter());
        System.out.println("---------------------------------------------------------");
        System.out.println(vo.getContent());
        System.out.println("---------------------------------------------------------");
        System.out.println("(1. 수정, 2. 삭제, 3. 목록) : ");

    }

    public void boardUpdate(int select) { // 게시글 수정
        select = vo.getNum(); // 받아온 select를 게시글 번호로 변경
        vo = boardList.get(select - 1);

        if (boardList.isEmpty()) { // 게시판이 비어있는 경우
            System.out.println("게시판이 비어있습니다.");
        } // 선택한 게시글이 있을 경우
        if (select > boardList.size()) { // 전체 게시글의 개수보다 높은 수를 입력한 경우
            System.out.println("해당 게시글이 존재하지 않습니다.");
        } else { // 해당 게시글이 있는 경우

            System.out.print("글제목(취소 : quit): "); // 제목 수정
            String title = scanner.nextLine();
            if (title.equals("quit")) {
                System.out.println("수정이 취소되었습니다.");
                return;
            }

            System.out.print("작성자(취소 : quit): "); // 작성자 수정
            String writer = scanner.nextLine();

            if (title.equals("quit")) {
                System.out.println("수정이 취소되었습니다.");
                return;
            }

            System.out.print("글내용(취소 : quit): "); // 글 내용 수정
            String content = scanner.nextLine();

            if (title.equals("quit")) {
                System.out.println("수정이 취소되었습니다.");
                return;
            }
            // 수정 취소를 하지 않았을 경우 값을 저장
            vo.setTitle(title);
            vo.setWriter(writer);
            vo.setContent(content);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd(수정됨)");
            String registDate = sdf.format(new Date());
            vo.setRegistDate(registDate); // 등록 날짜를 수정 날짜로 변경

            boardList.set(select - 1, vo); // 저장되있던 게시글 객체를 수정된 글로 변경
            System.out.println("글이 수정되었습니다.\n");

        }
    }

    public void boardDelete(int select) { // 게시글 삭제
        select = vo.getNum();
        vo = boardList.get(select - 1);

        if (boardList.isEmpty()) { // 게시판이 비어있는 경우
            System.out.println("게시판이 비어있습니다.");
            return;
        } // 선택한 게시글이 있을 경우
        if (select > boardList.size()) { // 게시글의 개수보다 높은 숫자를 입력한 경우
            System.out.println("해당 게시글이 존재하지 않습니다.");
        } else { // 선택한 게시글이 있는 경우
            boardList.remove(select - 1);
            System.out.println(select + "번 글이 삭제되었습니다.");
        }
    }
}

BoardServiceExample.java

package sec15;
import java.util.Scanner;

public class BoardServiceExample { // 게시판 프로그램
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in); // 입력 받는 객체
        BoardDAO dao = new BoardDAO(); // 게시판 접근 객체

        while (true) {
            dao.getBoardList(); // 게시판 목록 불러오기
            int answer = scanner.nextInt();
            scanner.nextLine(); // 개행문자를 상쇄하기 위해 작성

            if (answer == 1) { // 새글작성
                dao.boardInsert();
            } 
            else if (answer == 2) { // 상세보기
                System.out.println("보고 싶은 게시글 번호를 선택하세요 : ");
                int select = scanner.nextInt();
                dao.boardDetail(select); // 선택한 글의 상세페이지 출력
            } 
            else if (answer == 3) { // 수정하기
                System.out.println("수정할 글 번호를 선택하세요.");
                int select = scanner.nextInt();
                dao.boardUpdate(select); // 선택한 글 수정
            } 
            else if (answer == 4) { // 삭제하기
                System.out.println("삭제할 글 번호를 선택하세요.");
                int select = scanner.nextInt();
                dao.boardDelete(select); // 선택한 글 삭제
            } 
            else if (answer == 5) { // 종료
                break;
            } 
            else { // 그 외의 버튼을 누른 경우
                System.out.println("잘못 입력하였습니다.");
                continue;
            } 
            // while문 밖
        }
        System.out.println("게시판 프로그램이 종료되었습니다.");
    }
}

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    boardInsert 메소드에서 vo 객체를 새로 만들어주셔야 해요

    public void boardInsert() { 
    --중략--
            BoardVO vo2 = new BoardVO(); // @-->
            vo2.setNum(boardList.size()); 
            vo2.setTitle(title); 
            vo2.setWriter(writer);
            vo2.setContent(content); 
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String registDate = sdf.format(new Date());
            vo2.setRegistDate(registDate);
            boardList.add(vo2); 
            System.out.println("글이 추가되었습니다.\n");
    }
    
    • 감사합니다. 해결했습니다. 객체를 안만들어서 오류가 났었네요. SUNGCHIHUN 2021.7.8 09:42

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)