nhyunzi
Enum을 활용한 JSP 네비게이션 바 개선 본문
기존의 네비게이션 바는 JSP를 통해 동적인 메뉴 항목을 생성하고, Bootstrap을 활용하여 스타일을 적용했다.
1. 문자열 리터럴을 사용해 코드의 가독성이 떨어졌다.
2. 직접 문자열을 입력함에 따라 오타가 발생할 가능성이 있다.
3. 메뉴 항목을 수정할 때 여러 곳에서 문자열을 변경해야 했기 때문에 유지 보수가 어렵다.
이러한 단점을 개선하기 위해, 메뉴 항목을 열거형으로 정의하여 코드를 개선했다.
1. Enum을 도입하면 각 메뉴 항목을 명확히 구분할 수 있다.
2. 코드의 일관성을 유지하면서 오타 발생 가능성을 줄일 수 있다.
3. 메뉴 항목 수정 시 MenuEnum에서만 변경하면 되기 때문에 유지 보수가 더욱 용이하다.
[기존 코드 : 문자열 리터럴 사용]
<%
String menu = request.getParameter("menu");
LoginUser loginUser = (LoginUser) session.getAttribute("LOGIN_USER");
%>
<nav class="navbar navbar-expand-sm custom-navbar bottom p-0" data-bs-theme="dark">
<div class="container-fluid">
<ul class="navbar-nav ms-auto">
<%
if (loginUser == null) {
%>
<li class="nav-item">
<a class="nav-link <%= "register".equals(menu) ? "active" : "" %>" href="/user/registerform.jsp">회원가입</a>
</li>
<li class="nav-item">
<a class="nav-link <%= "login".equals(menu) ? "active" : "" %>" href="/user/loginform.jsp">로그인</a>
</li>
<%
} else {
%>
<li class="nav-item">
<a class="nav-link <%= "user".equals(menu) ? "active" : "" %>" href="/info/infohome.jsp">마이페이지</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/user/logout.jsp">로그아웃</a>
</li>
<%
}
%>
<li class="nav-item">
<a class="nav-link <%= "notice".equals(menu) ? "active" : "" %>" href="/notice/list.jsp">공지사항</a>
</li>
<li class="nav-item">
<a class="nav-link <%= "question".equals(menu) ? "active" : "" %>" href="/question/list.jsp">자주 묻는 질문</a>
</li>
</ul>
</div>
</nav>
[변경 후 코드: MenuEnum 사용]
//MenuEnum.java
package enums;
public enum MenuEnum {
REGISTER("register"),
LOGIN("login"),
USER("user"),
NOTICE("notice"),
QUESTION("question");
private final String menu;
private MenuEnum(String menu) {
this.menu = menu;
}
public String getName() {
return menu;
}
}
<%
String menu = request.getParameter("menu");
LoginUser loginUser = (LoginUser) session.getAttribute("LOGIN_USER");
%>
<nav class="navbar navbar-expand-sm custom-navbar bottom p-0" data-bs-theme="dark">
<div class="container-fluid">
<ul class="navbar-nav ms-auto">
<%
if (loginUser == null) {
%>
<li class="nav-item">
<a class="nav-link <%= MenuEnum.REGISTER.name().equals(menu) ? "active" : "" %>" href="/user/registerform.jsp"><%= MenuEnum.REGISTER.getName() %></a>
</li>
<li class="nav-item">
<a class="nav-link <%= MenuEnum.LOGIN.name().equals(menu) ? "active" : "" %>" href="/user/loginform.jsp"><%= MenuEnum.LOGIN.getName() %></a>
</li>
<%
} else {
%>
<li class="nav-item">
<a class="nav-link <%= MenuEnum.USER.name().equals(menu) ? "active" : "" %>" href="/info/infohome.jsp"><%= MenuEnum.USER.getName() %></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/user/logout.jsp">로그아웃</a>
</li>
<%
}
%>
<li class="nav-item">
<a class="nav-link <%= MenuEnum.NOTICE.name().equals(menu) ? "active" : "" %>" href="/notice/list.jsp"><%= MenuEnum.NOTICE.getName() %></a>
</li>
<li class="nav-item">
<a class="nav-link <%= MenuEnum.QUESTION.name().equals(menu) ? "active" : "" %>" href="/question/list.jsp"><%= MenuEnum.QUESTION.getName() %></a>
</li>
</ul>
</div>
</nav>