Java153 [Java] 람다식 / 함수형 인터페이스 / @FunctionalInterface 함수형 인터페이스 @FunctionalInterface: 일반적으로 구현해야 할 추상 메서드가 하나만 정의된 인터페이스를 가르킨다. 자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메서드가 선언되면 에러를 발생시킨다. @FunctionalInterface//구현해야 할 메소드가 한개이므로 Functional Interface이다. public interface Math { public int Calc(int first, int second); } @FunctionalInterface//구현해야 할 메소드가 두개이므로 Functional Interface가 아니다. (오류 사항) public interface Math { public int Calc(int first, int second).. 2023. 3. 24. [Java] DAO 클래스의 리팩토링(inser, update 쿼리) 너무나도 많은 중복이 발생하는 UserDao 클래스 개발자라면 누구나 한번쯤은 JDBC 라이브러리를 사용한 적이 있을 것이다. 주로 Dao 클래스에서 이를 사용한다. 데이터베이스 쿼리 하나를 실행하기 위해서 개발자가 구현해야 할 코드가 굉장히 많다. 구현할 코드가 각 쿼리마다 다른 부분이라 개발자가 구현할 수 밖에 없다면 모르겠지만 대부분의 구현은 매번 반복되는 부분이다. 반복적인 부분이 있는 코드는 공통 라이브러리를 만들어 제거할 수 있다. 우선 리팩토링 전 아래 코드를 잠깐 훑어보자. public class UserDao { public void insert(User user) throws SQLException { Connection con = null; PreparedStatement pstmt .. 2023. 3. 22. [Java] MVC 프레임워크 구현 모든 클라이언트의 요청은 DispatcherServlet이 받음 모든 요청을 서블릿 하나가 받을 수 있도록 URL을 매핑함. @WebServlet( name="dispatcher", urlPatterns = "/", loadOnStartup = 1) public class DispatcherServlet extends HttpServlet { [...] } Controller 인터페이스를 구현하자. public interface Controller { String execute( HttpServletRequest request, HttpServletResponse response ) throws Exception; } excute() 메서드의 반환 값은 리다이렉트 방식으로 이동할 경우 redirect: .. 2023. 3. 21. [Java] static 블록 / 초기화 블럭 초기화 블럭(initialization block) public class RequestMapping { private static Map controllers = new HashMap(); static { controllers.put("/user/create", new UserCreateController()); controllers.put("/user/login", new UserLoginController()); controllers.put("/user/list", new UserListController()); } public static Controller getController( String requestUrl ) { return controllers.get(requestUrl); } } 클.. 2023. 3. 21. [Java] 세션(HttpSession) 구현 / 세션은 HTTP 쿠키를 기반으로 동작 클라이언트와 서버 간에 주고 받을 고유한 아이디 생성. 고유한 아이디는 쉽게 예측할 수 없어야 하며, 예측하기 쉬우면 쿠키 값을 조작해 다른 사용자처럼 속일 수 있음. 위에서 생성한 고유 아이디의 세션을 클라이언트 마다 무조건 하나를 배정받게 된다. 이를 확인하는 방법으로는, 클라이언트의 요청 헤더를 확인 후 JSESSIONID라는 Key에 대응하는 Value가 없다면 응답 헤더의 쿠키로 담아서 전달한다. if( request.getCookies().getCookies("JSESSIONID") == null) { response.addHeader("Set-Cookie", "JSESSIONID=" + UUID.randomUUID()); } 모든 클라이언트에게 전달한 세션 값을 서버측에서 관리할 수 있는 클.. 2023. 3. 21. [Java] 다형성을 활용해 클라이언트 요청 URL에 대한 분기 처리를 제거 run() 메서드의 복잡도는 아직 상당히 높다. public void run() { log.debug("New Client Connect! Connected IP : {}, Port : {}", connection.getInetAddress(), connection.getPort()); try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) { HttpRequest request = new HttpRequest(in); String requestURL = request.getPath(); HttpResponse response = new HttpResponse(out); if( re.. 2023. 3. 20. 이전 1 ··· 5 6 7 8 9 10 11 ··· 26 다음