게시판 작업

1.클래스 구성

1) 게시판 데이터 1개를 저장할 클래스(글번호, 제목, 내용)

2) 게시판 작업을 위한 클래스

  • 게시판 전체 목록을 리턴하는 메소드
  • 글 번호를 받아서 글 번호에 해당하는 데이터 1개를 리턴하는 메소드
  • 게시판 데이터를 매개변수로 받아서 저장하는 메소드
  • 게시판 데이터를 매개변수로 받아서 수정하는 메소드
  • 글 번호를 받아서 글 번호에 해당하는 데이터를 삭제하는 메소드

  • 이러한 5가지 작업을 CRUD(Create, Read, Update, Delete)라고 합니다.

3) 실행 클래스(나중에는 UI를 담당하는 부분(View)과 이벤트를 처리하는 부분(EventHandler , Controller)으로 분할)

2.게시판 데이터를 저장할 클래스를 생성

  • 글번호, 제목, 내용을 저장하는 클래스
  • 글번호는 1번부터 순서대로 자동으로 생성
  • 출력하는 메소드에 인스턴스를 대입하면 인스턴스의 내용을 출력해주도록 하는 메소드
public class Board {
    //저장할 항목을 private 변수로 생성
    //글번호, 제목, 내용
    private int num;
    private String title;
    private String content;

    //인스턴스 변수 사용을 위한 접근자 메소드
    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;
    }

    //디버깅을 위한 메소드
    //출력하는 메소드에 인스턴스를 대입했을 때 호출되는 메소드
    //자바는 인스턴스를 출력하는 메소드에 대입하면 toString 이라는 메소드가 호출됩니다.
    //인스턴스 변수의 값을 전부 확인하고자 할 때  일일이 get 메소드를 부르는 것은 코드의 낭비
    //이런 경우에는 toString()을 호출해서 한번에 확인
    @Override
    public String toString() {
        return "Board [num=" + num + ", title=" + title + ", content=" + content + "]";
    }
}

3.Java 단위 테스트

  • Java Application을 실행할려면 main 메소드를 갖는 클래스가 필요
  • Java Web Application을 실행할려면 WAS 가 필요
  • 부분적으로 로직을 만들고 로직을 테스트하기 위해서 main을 만드는 것이나 WAS를 이용해서 실행하는 것은 자원의 낭비
  • Java 로직을 테스트하기 위한 라이브러리가 이클립스에서 제공되는데 이름은 JUnit
  • JUnit 라이브러리를 추가하고 클래스를 만든 후 메소드 위에 @Test라고만 붙이면 단위 테스트가 가능

1) JUnit 라이브러리를 프로젝트에 추가(Java 버전 변경도 동일한 메뉴)

  • 프로젝트 선택하고 마우스 오른쪽을 클릭하고 [Build Path] - [Configure Build Path]를 선택
  • Libraries 탭에서 [add library] 버튼을 클릭하고 JUnit을 선택
  • 4나 5 버전을 선택하고 Apply

2) 테스트를 위한 클래스를 생성 - 클래스이름은 Test 만 아니면 됩니다.

public class BoardTest {

    //테스트 메소드 만들기
    @Test
    public void testMethod() {
        Board board = new Board();
        System.out.println(board);
    }
}

3) 테스트를 할 때는 클래스 내부 아무곳에나 커서를 두고 마우스 오른쪽을 클릭하고 [Run As] - [JUnit Test]를 클릭하면 됩니다. 현재 결과는 num=0 title=null content=null로 출력

4.static 변수와 생성자를 이용해서 num의 값을 일련번호로 대입

  • static 변수는 1번 만들어지면 소멸되지 않고 계속 사용할 수 있습니다.
  • instance 변수는 instance가 생성될 때 마다 별도로 생성됩니다.
  • Board 클래스에 코드를 작성하고 Test 메소드를 수정한 후 확인

1) Board 클래스에 코드 추가

//일련번호 생성을 위한 static 변수를 1개 생성
private static int sequence;

//생성자
public Board() {
    //static 변수는 이전에 수정한 내용을 가지고 있기 때문에 1씩 증가
    sequence = sequence + 1;
    //num은 인스턴스 변수라서 생성자를 호출할 때 마다 매번 새로 생성
    //새로 생성되는 num에 sequence의 값을 대입하면 일련번호가 됩니다.
    num = sequence;
}

2) Test 메소드 수정하고 실행

//테스트 메소드 만들기
@Test
public void testMethod() {
    Board board = new Board();
    System.out.println(board);

    Board board1 = new Board();
    System.out.println(board1);
}

5.작업을 위한 클래스 - BoardService

//게시판 작업을 위한 메소드
public class BoardService {
    //Board 100개를 저장할 수 있는 공간을 100개 생성해서 이름을 list라고 붙임
    Board [] list = new Board[100];

    //전체 목록이나 일부 목록을 리턴하는 메소드
    //리턴 타입은 배열이나 List
    //일부 목록을 가져올 때는 매개변수로 페이지 번호를 갖는 경우가 많습니다.
    public Board[] getList() {
        return list;
    }

    //페이지 번호에 해당하는 데이터를 가져오는 메소드
    public Board[] getList(int pageNo) {
        Board [] r = new Board[10];
        //한 페이지에 10개씩 있다고 가정
        //pageNo가 1일 때는 0과 9, pageNo가 2일 때는 10과 19
        int start = (pageNo-1) * 10;
        int end =pageNo * 10 - 1;

        for(int i=0; i<10; i=i+1) {
            r[i] = list[start + i];
        }
        return r;
    }

    //글번호에 해당하는 데이터를 1개 가져오는 메소드
    //기본키를 매개변수로 받아서 처리
    //상세보기를 처리하는 메소드
    public Board getBoard(int num) {
        //list에서 num이라는 글번호를 가진 데이터를 찾아서 리턴
        Board board = null;

        //list를 순회하면서 num 과 같은 글번호를 가진 데이터를 board 에 대입
        for(Board temp : list) {
            if(temp != null) {
                //동일한 글번호를 찾으면 더 이상 반복문을 수행할 필요가 없어서 break
                if(temp.getNum() == num) {
                    board = temp;
                    break;
                }
            }
        }
        //동일한 글번호가 없으면 null을 리턴
        return board;
    }

    //글쓰기를 처리하는 메소드
    //데이터 삽입을 처리하는 메소드
    //수행 결과를 알려주고자 할 때는 boolean 이나 int 로 리턴
    //수행 결과를 알려주지 않고자 할 때는 void(실패는 없다라는 가정)
    //매개변수는 데이터 1개

    //현재 작성된 글의 개수를 저장하기 위한 변수 - List를 사용하게 되면 필요없음
    private int cnt;
    public boolean insertBoard(Board board) {
        //맨 마지막 위치에 데이터를 대입
        list[cnt] = board;
        cnt = cnt + 1;
        return true;
    }

    //글 수정을 처리하는 메소드
    //리턴 타입은 삽입과 동일
    //매개변수도 삽입과 동일
    //수정을 할 때는 기본키(글번호)의 값이 자동으로 설정되는 것이 다릅니다.
    public boolean updateBoard(Board board) {
        //글번호에 해당하는 데이터를 찾아서 데이터를 찾으면 board로 대체
        for(int i=0; i<cnt; i=i+1) {
            Board imsi = list[i];
            //글번호 비교
            if(imsi != null) {
                if(imsi.getNum() == board.getNum()) {
                    list[i] = board;
                    break;
                }
            }
        }

        return true;
    }

    //삭제를 처리하는 메소드
    //삭제를 할 때는 데이터 전체가 필요하지 않고 일반적으로 기본키만 필요합니다.
    public boolean deleteBoard(int num) {
        //list에 모든 데이터를 순회해서 글번호가 num 인 데이터를 찾아서 그 위치에 null을 대입
        for(int i=0; i<cnt; i=i+1) {
            Board imsi = list[i];
            //글번호 비교
            if(imsi != null) {
                if(imsi.getNum() == num) {
                    list[i] = null;
                    break;
                }
            }
        }
        return true;
    }
}

6.실행 클래스를 만들어서 실행

  • main 메소드를 소유한 클래스를 생성

results matching ""

    No results matching ""