목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

      ⏳ Time Log/TIL · 하루

      Day 26 (11/24) - 팀프로젝트 및 JSP Action 패턴 및 메서드 반환

      this.Serena 2026. 2. 20. 11:48
      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; // 리다이렉트 후 메서드 즉시 종료 및 추가 이동 차단
      }