사이먼's 코딩노트

[Java] 게시판 제작(12) 본문

프로젝트/[Java] 게시판 제작

[Java] 게시판 제작(12)

simonpark817 2024. 3. 25. 21:25

[게시판 제작 ~ing]

 

GitHub - psm817/full_stack_proj_2024_03

Contribute to psm817/full_stack_proj_2024_03 development by creating an account on GitHub.

github.com

 

[로그아웃 기능 추가 ]

  • 게시판 제작의 다음 단계는 로그아웃 기능입니다.
  • 로그아웃 기능은 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를 하게 되었을 때 작성자는 해당 회원이 된다.

 

  • 현재까지 작성 및 수정된 코드를 실행하면 다음과 같이 게시판이 동작한다.

개선된 게시판 동작 5

 

반응형

'프로젝트 > [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