Java 개발 시 메서드 실행을 중단하고 제어권을 넘길 때 사용하는 return과 return null의 명확한 차이 및 활용법 정리
1. 반환 타입에 따른 메서드 종료 방식
- void 메서드 (return;)
- 반환값이 없는 메서드에서 사용
- 특정 조건 만족 시 메서드 실행을 즉시 중단하고 호출한 곳으로 복귀함
- 반환형이 있는 메서드 (return null; 등)
- String, Object 등 참조 타입을 반환해야 하는 경우 반드시 반환값을 명시해야 함
- 더 이상 실행할 필요가 없거나 예외 상황일 경우 null을 반환하여 종료 가능
2. Action 인터페이스에서의 return null 활용
- 프레임워크 신호 전달
- execute 메서드의 반환 타입이 String(이동할 페이지 경로)인 경우, return null;은 추가로 이동할 페이지가 없음을 의미
- 중복 처리 방지
- 메서드 내부에서 이미 response.sendRedirect()나 forward를 수행한 경우, 프레임워크가 다시 포워딩을 시도하면 에러가 발생함
- 이때 return null;을 사용하여 프레임워크의 추가적인 뷰(View) 이동 처리를 차단함
- 회원가입 로직 예시
- 성공 후 리다이렉트 처리를 완료했다면, 하단 코드 실행을 막고 명확한 종료를 위해 return null; 사용 권장
💡 추가 학습 내용: Null 처리 시 주의사항
- NullPointerException(NPE) 방지
- 메서드가 null을 반환할 수 있다면, 해당 메서드를 호출한 곳에서 반드시 null 체크 로직을 포함해야 함
- Optional 클래스 활용 (Java 8 이상)
- null을 직접 반환하는 대신 Optional.empty()를 사용하여 반환값이 없음을 명시적으로 표현하는 최신 트렌드 반영 권장
- 반환 타입별 기본값
- 기본 자료형(int, boolean 등)은 null을 반환할 수 없으므로 0 또는 false와 같은 기본값 사용 필수
💻 코드 예시: Action 클래스에서의 제어 흐름
1. Success 케이스 (정상적인 페이지 이동)
회원가입 성공 후, 결과 페이지로 이동해야 하는 경우의 코드 구성
public String execute(HttpServletRequest request, HttpServletResponse response) {
// 1. 비즈니스 로직 수행 (예: DB 저장)
boolean isSuccess = memberService.join(member);
if (isSuccess) {
// 성공 시 이동할 뷰(View)의 경로를 반환함
// 프레임워크가 이 문자열을 받아 포워딩을 수행함
return "/view/joinSuccess.jsp";
}
return "/view/error.jsp";
}
2. Failure 또는 직접 응답 케이스 (중복 이동 방지)
이미 응답(response) 처리를 완료하여 프레임워크의 추가 이동이 필요 없는 경우
public String execute(HttpServletRequest request, HttpServletResponse response) {
// 1. 유효성 검사 실패 시
if (request.getParameter("id") == null) {
// 자바스크립트로 알림창을 띄우고 직접 응답을 종료함
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert('아이디를 입력하세요.'); history.back();</script>");
// 중요: 이미 직접 응답(Response)을 처리했으므로
// 프레임워크가 또 다른 페이지로 포워딩하지 않도록 null 반환함
return null;
}
// 2. 리다이렉트를 직접 수행한 경우
// response.sendRedirect("main.do");
// return null; // 리다이렉트 후 메서드 즉시 종료 및 추가 이동 차단
}
'⏳ Time Log > 1. One Day (Daily · TIL)' 카테고리의 다른 글
| Day 29 (11/27) - 파이썬 기초 문법 및 리액트 라이프사이클 (0) | 2026.02.20 |
|---|---|
| Day 28 (11/26) - React 기초 개념 및 주요 명령어 정리 (0) | 2026.02.20 |
| Day 25 (11/21) - SQL 데이터 수정 및 리액트 개발 환경 구축 (0) | 2026.02.20 |
| Day 24 (11/20) - JSP 심화 및 이클립스 개발도구 설정 (1) | 2026.02.20 |
| Day 23 (11/19) - JSP 게시판 프로젝트: DB 연동 및 커맨드 패턴의 이해 (0) | 2026.02.19 |