TIL5 -(자바) enum switch문으로 리팩토리

김지인·2022년 7월 9일
0
post-thumbnail

페이지의 로그인기능을 구현하고 있는 중이었다.

NoticeBoardDAOService noticeBoardDaoImpl = new NoticeBoardDAOImpl();
int check = noticeBoardDaoImpl.GetTokenOfLoginCheck(userId, userPwd);
(로그인성공 1, 비밀번호 틀림2, 아이디정보없음 -1, 데이터베이스오류 -2)

		if (check ==1) { 
			out.println("<script>");
			out.println("location.href='main.jsp'");
			out.println("</script>");

		} 
			else if (check ==2) {
			out.println("<script>");
			out.println("alert('비밀번호가 틀립니다')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
		}
			else if (check == -1) {
			out.println("<script>");
			out.println("alert('아이디가 없습니다')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
		}

			else {
			out.println("<script>");
			out.println("alert('오류')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
		}
  • noticeBoardDaoImpl의 인스턴스의 함수 GetTokenOfLoginCheck(userId, userPwd)를 거쳐 토큰을 받아 check에 담기
  • check에 담긴 숫자로 구분하여 해당하는 로직 실행

이렇게 만들고 보니깐 switch문이 더 직관적이어서 수정했다.

NoticeBoardDAOService noticeBoardDaoImpl = new NoticeBoardDAOImpl();
int check = noticeBoardDaoImpl.GetTokenOfLoginCheck(userId, userPwd);
(로그인성공 1, 비밀번호 틀림2, 아이디정보없음 -1, 데이터베이스오류 -2)

	switch(check){
		case 1:  
			out.println("<script>");
			out.println("location.href='main.jsp'");
			out.println("</script>");
			break;
		
		case 2: 
			out.println("<script>");
			out.println("alert('비밀번호가 틀립니다')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
			break;
        
        case -1:   
			out.println("<script>");
			out.println("alert('아이디가 없습니다')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
			break;

		default:
			out.println("<script>");
			out.println("alert('오류')");
			out.println("location.href='loginPage.jsp'");
			out.println("</script>");
			break;
	}

그런데 이렇게 수정하고 보니 한가지 문제가 보였다.
남이 보았을때는 저 숫자가 무엇을 의미하는지 모르지 않는가?

그래서 check를 명시적으로 볼 수 있게 하는 클래스를 하나 만들었다.

LoginTokencheck 번호를 받아와서 getTokenName()에서 해당하는 번호의 String형을 출력해주는 식으로 수정했다.


그래서 다른사람이 보거나, 미래의 내가 봣을때 알아볼 수 있게 명시적으로 케이스를 나눴다.
그런데 이렇게 하고 보니깐 다음 문제는 해당 로직에만 사용할 수 밖에 없는 클래스가 생긴 것이다. 그래서 자바의 enum을 활용하기로 했다.


Token이라는 enum을 하나 만들어줬다.


그리고 로그인을 체크하는 로직에 출력타입을 enum인 Token으로 설정하고 해당 enum의 상수들을 반환해주는 식으로 수정했다.

그렇게 받은 Token타입의 상수들을 이용해서 switch case 문으로 수정했다.
이는 추후에 가독성이나 확장성에 도움이 될 것이다.

profile
에러가 세상에서 제일 좋아

0개의 댓글