전체 글(61)
-
Two Sum - LeetCode
[목차] 1. 문제 2. 문제 설명 3. 문제 풀이 4. code 5. 배운점 1. 문제 Two Sum - LeetCode 2. 문제설명 예제 2를 보자 [3, 2, 4] , target = 6 output = [1, 2] 저 집합에서 더해가지고 6이 나오는 원소를 구하는 문제이다. 저기 보면 output(정답)은 1, 2이다. 즉 1번째인 2와 2번째인 4를 더해서 6이 나온다. (여기서 1번째=2 인것을 이해 못하신 분은 컴퓨터에서는 첫번째가 0으로 시작한다.즉 0번째 3, 1번째 2, 2번째 4 이다. ) 3. 문제풀이 3.1 첫번째 풀이 (Brute Force 방식) example2 [3, 2, 4] , target = 6 output = [1, 2] 위에 그림처럼 하나의 원소가 기준이 되고 오른..
2024.01.25 -
Template Callback Pattern(템플릿 콜백 패턴) - 견본 /회신 패턴
[목차] 1. 게시물을 작성한 이유 2. 설명 3. 예제 4. Refactoring 5. 결론 6. 추가 : System.out.println(제외하기) 1. 게시물을 작성한 이유 회사에서 운영을 하면서 여러가지 요구조건이 있을때 참으로 아쉬운 점이 많았다. 그 아쉬운점은 여러가지 요구사항을 듣고 그것을 패턴화를 못했기 때문이다. 물론 지식적인 부분에 부족한 점이 있을 수 있지만, 공부를 한 부분도 딱 떠오르지가 않았다. 마침 '스프링 객체지향과 원리' 라는 책을 읽었는데 거기서 스프링이 자주 사용하는 템플릿콜백 패턴이라고 해서 블로그 글을 작성하려고 한다. 2. 설명 템플릿 콜백 패턴에 대해서 설명하겠다. 스프링의 3대 프로그래밍 모델 중 하나인 DI에서 사용하는 특별한 형태의 전략패턴이다. 템플릿 콜..
2024.01.11 -
스프링 MVC 서블릿 컨테이너 초기화 지원
지난 포스팅에서 하나하나 서블릿 컨테이너와 디스패쳐 서블릿을 연결하고 그거를 또 스프링컨테이너랑 연결하는 작업을 해보았다. 해보았을 때 느낀점은 진짜 많은 일을 해줘야하고, 이걸 다 기억 언제하지? 라는 생각이 들었다. 지난 과정을 보면 1) ServletContainerInitializer interface를 구현해서 서블릿 컨테이너 초기화 코드를 만들었음. 2) 어플리케이션 초기화를 위해서 @HandlesTypes annotation을 적용함 3) /META-INF/services/jakarta.servlet.ServletContainerInitializer 파일에 서블릿 컨테이너 초기화 클래스 경로를 지정함 이렇게 해줘야하는데 너무 번거롭고 힘들다. 그래서 개발자들이 힘든것을 알았는데 스프링MVC에..
2023.11.27 -
스프링 컨테이너 등록
번 시간에는 WAS와 스프링을 통합하는 작업을 할 것이다. [목차] 1) 스프링 컨테이너 만들기 2) 컨트롤러를 스프링컨테이너에 빈등록 3) 디스패처 서블릿을 서블릿 컨테이너로 등록 이렇게 3가지 과정을 거칠것이다. 1) 스프링 컨테이너 만들기 일단 위에 프로젝트 파일 구조이다. 위 그림처럼 서블릿에 Dispatcher Servlet을 등록하는 과정을 해야한다. 그리고 스프링 컨테이너를 위해서 build.gradle에 스프링 라이브러리 추가가 필요하다. //스프링MVC implementation 'org.springframework:spring-webmvc:6.0.9' 위에 저 문장을 build.gradle에 추가한다. 추가하면 아래 소스처럼 될것이다. plugins { id 'java' id 'war'..
2023.11.26 -
서블릿 컨테이너 초기화2
서블릿 컨테이너 초기화 하는 두번째 방법을 소개하겠다. 지난 포스팅에서 아래 그림 처럼 서블릿 컨테이너 초기화에 대해서 소개하였다. 서블릿은 서블릿 초기화를 위해서 Servlet interface(ServletContainterInitializer)를 제공한다. 그래서 onStartup method로 초기화를 하였다. public interface ServletContainerInitializer { public void onStartup(Set
2023.11.26