사이먼's 코딩노트
[Java] 게시판 제작(12) 본문
[게시판 제작 ~ing]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 리포지터리 주소 URL :https://github.com/psm817/full_stack_proj_2024_03
[로그아웃 기능 추가 ]
- 게시판 제작의 다음 단계는 로그아웃 기능입니다.
- 로그아웃 기능은 member logout이라는 명령어와 함께 로그아웃이 가능하도록 한다.
- 먼저 MemberController.java 에서 명령어 케이스와 기능을 구현한다.
public void doAction(String cmd, String actionMethodName) {
this.cmd = cmd;
this.actionMethodName = actionMethodName;
switch(actionMethodName) {
case "join" :
doJoin();
break;
case "login" :
doLogin();
break;
case "logout" :
doLogout();
break;
default :
System.out.println("존재하지 않는 명령어입니다.");
break;
}
}
- 현재까지 회원 관련된 기능은 회원 등록(member join), 회원 로그인(member login), 회원 로그아웃(member logout)이다.
- 그 다음은 doLogout과 관련된 메서드를 아래와 같이 구현한다.
private void doLogout() {
if(isLogined() == false) {
System.out.println("로그인 상태가 아닙니다.");
return;
}
loginedMember = null;
System.out.println("로그아웃 되었습니다.");
}
- doLogout() 메서드의 구현은 생각보다 간단하다.
- isLogined()는 return 형식이 boolean인 메서드이면 로그인이 되어있는지를 확인하는 역할을 한다.
- 만약 누군가가 로그인이 되어있지 않다면, 출력문을 통해 로그인 상태가 아니다라고 출력한다.
- 로그인이 되어있는 상태라면 loginedMember를 null로 비워놓고 로그아웃이 완료되었다는 출력문을 출력하는데, 이 때 loginedMember는 로그인 된 회원의 정보를 담아놓은 Controller에서 생성된 변수이다.
- loginedMember는 doLogin() 메서드를 통해 로그인이 성공하면 해당 member를 loginedMember와 연결시키기 때문에 doLogin() 메서드에서도 수정이 필요하다.
- 다음은 수정된 MemberController.java 클래스의 doLogin() 메서드다.
private void doLogin() {
if(isLogined()) {
System.out.println("이미 로그인되어 있습니다.");
return;
}
System.out.printf("ID : ");
String loginId = sc.nextLine();
System.out.printf("Password : ");
String loginPw = sc.nextLine();
Member member = getMemberByLoginId(loginId);
if(member == null) {
System.out.println("입력하신 ID는 등록되지 않은 ID입니다. 다시 시도해주세요.");
return;
}
if(member.loginPw.equals(loginPw) == false) {
System.out.println("비밀번호가 일치하지 않습니다. 다시 시도해주세요.");
return;
}
loginedMember = member;
System.out.printf("로그인 성공!! %s 님 환영합니다.\n", loginedMember.name);
}
- 일단 메서드 실행 시 최초로 isLogined()를 통해 로그인 여부를 파악하고, 로그인이 되어있는 상태라면 이미 로그인이 되어있다는 출력문을 출력한다.
- 로그인 기능의 절차를 다 지나 로그인이 완료됐다면, 출력문을 출력하기 전 loginedMember에 해당 member를 연결시킨다.
- 다음은 isLogined()와 loginedMember가 생성된 Controller.java 클래스이다.
abstract public class Controller {
public static Member loginedMember;
public static boolean isLogined() {
return loginedMember != null;
}
abstract public void doAction(String cmd, String actionMethodName);
abstract public void makeTestData();
}
- 로그인 된 회원 즉, loginedMember는 공공재로서 어디서든 프로그램에서 공용으로 쓰여지기 때문에 static으로 변수를 생성한다.
- isLogined() 메서드도 마찬가지로 로그인이 되었는 지 체크하는 기능은 모두가 동일하기 때문에 static으로 메서드를 생성한다.
[게시물 작성 접근 제한]
- 게시판 제작의 다음 단계는 게시물 작성 시 접근 제한이다.
- 간단하게 말해 게시물을 작성(article write) 할 때 로그인이 되어있지 않다면 해당 명령어를 입력해도 수행할 수 없으며, 반드시 로그인 된 상태에서만 수행할 수 있다.
- 추가로 로그인 된 회원이 게시물을 작성하게 되면 해당 게시물의 작성자는 로그인 된 회원이 된다.
- 먼저 ArticleController.java 클래스의 doAction() 메서드에서 doWrite() 메서드를 실행하기 전 접근 제한을 둔다.
public void doAction(String cmd, String actionMethodName) {
this.cmd = cmd;
this.actionMethodName = actionMethodName;
switch(actionMethodName) {
case "write" :
if(isLogined() == false) {
System.out.println("로그인 후 이용해주세요.");
break;
}
doWrite();
break;
case "list" :
showList(cmd);
break;
case "detail" :
showDetail(cmd);
break;
case "modify" :
doModify(cmd);
break;
case "delete" :
doDelete(cmd);
break;
default :
System.out.println("존재하지 않는 명령어입니다.");
break;
}
}
- 만약 isLogined() 메서드를 통해 로그인이 되어있지 않다면 로그인 후 이용해주세요라는 출력문과 함께 해당 명령어의 실행을 제한한다.
- 다음은 로그인 된 회원이 게시물을 작성할 때 doWrite() 메서드를 수정하였다.
public void doWrite() {
int id = articles.size() + 1;
String regDate = Util.getNowDateTime();
System.out.printf("제목 : ");
String title = sc.nextLine();
System.out.printf("내용 : ");
String body = sc.nextLine();
Article article = new Article(id, title, body, regDate, loginedMember.id);
articles.add(article);
System.out.printf("%d번 게시물이 등록되었습니다.\n", id);
}
- 로그인에 성공했다면 Controller.java에서 생성한 loginedMember에 로그인 된 회원의 정보가 연결되었으니, 다음은 doWrite() 메서드에서 공공재인 loginedMember의 id를 호출하여 Article 생성자 인자에 추가한다.
- 그렇게 되면, 로그인 된 작성자가 article write를 하게 되었을 때 작성자는 해당 회원이 된다.
- 현재까지 작성 및 수정된 코드를 실행하면 다음과 같이 게시판이 동작한다.
반응형
'프로젝트 > [Java] 게시판 제작' 카테고리의 다른 글
[Java] 게시판 제작(14) (0) | 2024.03.25 |
---|---|
[Java] 게시판 제작(13) (0) | 2024.03.25 |
[Java] 게시판 제작(11) (0) | 2024.03.10 |
[Java] 게시판 제작(10) (0) | 2024.03.07 |
[Java] 게시판 제작(9) (0) | 2024.03.04 |