Class를 나누어서 작업
BoardMain , BoardDTO , BoardService , BoardRepository로 나누어서 작업을 했다.
BoardMain : 컨트롤러
BoardDTO : 각 변수들 getter and setter
BoardService : 호출받으면 BoardRepository에서 리스트를 받아 출력
BoardRepository : 데이터베이스
BoardDTO
public class BoardDTO { //
private static int number = 100;
private final static DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yy/MM/dd hh:mm:ss");
private String bno;
private String title;
private String writer;
private int cnt;
private String postDate;
public BoardDTO () {
this.bno = "B"+number++;
this.postDate = DTF.format(LocalDateTime.now());
}
public String getBno() {
return bno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public int getCnt() {
return cnt;
}
public void increaseCnt() {
this.cnt++;
}
public String getPostDate() {
return postDate;
}
public void print () {
System.out.printf("%s\t%s\t%s\t%d\t%s\n",bno,title,writer,cnt,postDate);
}
}
DateTimeFormatter DTF는 변하지 않는 상수이면서 공유하는 것이기 때문에 final , static이 붙게된다.
number는 100으로 설정하고 Bno(글번호이면서 Primary Key)에서 추가시킬것이기 때문에 static을 붙인다.
BoardMain
package day11;
import java.util.Scanner;
public class BoardMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
BoardService service = new BoardService();
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("======게시판======");
System.out.println("1.게시글등록 2.리스트 3.읽기 4.수정 5.삭제 0.종료");
System.out.print("메뉴입력 >");
int menu = sc.nextInt();
if(menu == 1) {
service.save();
}else if(menu == 2) {
service.findAll();
}else if(menu == 3) {
service.findById();
}else if(menu == 4) {
service.update();
}else if(menu == 5) {
service.delete();
}else if(menu == 0) {
break;
}else {
System.out.println("다시 입력");
}
System.out.println();
}
System.out.println("프로그램 종료");
}
}
service class의 메소드를 이용해야 하기 때문에 service 객체를 new로 생성해준다.
그후에 각 메뉴마다 service 메소드를 호출하여 작업한다.
BoardService
public class UserService {
Scanner sc = new Scanner(System.in);
UserRepository repository = new UserRepository();
public void save() {
System.out.print("이메일> ");
String email = sc.next();
System.out.print("비밀번호> ");
String password = sc.next();
System.out.print("이름> ");
String name = sc.next();
System.out.print("나이> ");
int age = sc.nextInt();
UserDTO userDTO = new UserDTO(email,password,name,age);
if(repository.save(userDTO)) {
System.out.println("회원가입 성공");
}else {
System.out.println("회원가입 실패");
}
}
public void findAll() {
List<UserDTO> list = repository.findAll();
System.out.println("이메일\t\t비밀번호\t이름\t나이\t가입일");
System.out.println("-------------------------------------------------------");
for(UserDTO userDTO : list) {
System.out.println(userDTO.toString());
}
}
public boolean loginCheck() {
System.out.print("로그인 할 이메일 입력>");
String email = sc.next();
System.out.print("로그인 할 비밀번호 입력>");
String password = sc.next();
if(repository.loginCheck(email,password)) {
System.out.println("로그인 성공!");
return true;
}else {
System.out.println("로그인 실패!");
return false;
}
}
}
save 메소드를 이용하여 Main class에서 save를 호출받으면
email과 비밀번호 , 이름 , 나이를 받아서 UserDTO 객체에 담고
if문으로 repository class에 있는 save문 ( service class의 메소드 save와 다르다 ) 을 호출하여
성공하면 boolean = true , 실패하면 boolean = false 로 결과값이 나와 ( 회원가입 성공,실패 ) 가 나뉘게된다.
findAll 메소드는 회원리스트를 출력하고 싶을때 Main class에서 호출받아서 사용할 수 있다.
List<UserDTO> list를 repository class의 findAll ( service class의 메소드 findAll와 다르다 ) 을 호출하여
리턴값으로 list를 받아와
for문으로 리스트를 출력할 수 있다.
BoardRepository
public class BoardRepository {
private List<BoardDTO> list = new ArrayList<>();
public boolean save (BoardDTO boardDTO) {
return list.add(boardDTO);
}
public List<BoardDTO> findAll(){
return list;
}
public BoardDTO findById (String bno) {
for(BoardDTO boardDTO : list) {
if(boardDTO.getBno().equals(bno)) {
return boardDTO; //
}
}
return null;
}
public boolean update(BoardDTO boardDTO , String bno) {
for(BoardDTO b : list) {
if(b.getBno().equals(bno)) {
b.setTitle(boardDTO.getTitle());
b.setWriter(b.getWriter());
return true;
}
}
return false;
}
public boolean delete (String bno) {
for(BoardDTO b : list) {
if(b.getBno().equals(bno)) {
list.remove(b);
return true;
}
}
return false;
}
}
BoardRepository는 데이터를 저장하는 곳으로 ,
Main > service 호출 > Repository 리턴 > service 출력 의 흐름으로 진행된다.
이 Class에서는 데이터를 저장할 것이기 때문에 ArrayList를 만들어준다.
Repository의 save 메소드는
리턴타입은 boolean , 매개변수는 Board 객체의 boardDTO를 받고 ,
return list.add(boardDTO) 는 아래와 같다.
boolean a = list.add(boardDTO)
return a;
list에 추가하는 add 는 리턴타입이 boolean이기 때문이다.
데이터를 service에서 받아서 repository에는 list에 넣어주는 메소드.
findById 메소드는 String 값 bno ( 글번호 ) 를 받아서
for문으로 반복해 BoardDTO의 list를 계속해서 boardDTO에 담아
만약 담아낸 list의 값이 받은 bno와 같다면 리턴값으로 그 list의 배열을 리턴하게 된다.
하지만 list에 받은 글번호가 모두 같지 않다면 리턴값으로 null을 리턴한다.
BoardService의 findById 메소드로 돌아와서 만약 boardDTO의 값이 null이면
찾을 수 없는 글입니다. 가 출력되게 되고 ,
그렇지 않다면 Cnt ( 조회수 ) 가 1 증가하는 increaseCnt 메소드가 호출되고 , print 메소드를 호출하여
리스트가 출력되게 된다.
'Java > Java icia 11일차' 카테고리의 다른 글
접근제한자 public , protected , private의 차이의 정리 (0) | 2023.03.08 |
---|---|
static , final , final static의 차이의 정리 (0) | 2023.03.08 |
Class를 이용하여 유저시스템 만들기 (0) | 2023.03.08 |
DTO 의 뜻 , 사용하는 이유 (0) | 2023.03.08 |