목록전체 글 (43)
tlov
#개발 기존에는 MVC 패턴이 그저 스프링 개발 시에 웹의 기능을 분리해주기 위해 사용하는 '특정한' 디자인 패턴인 줄 알았습니다. 웹 개발 시에 사용하는 디자인 패턴 정도로 생각이 갇혀있던 겁니다. 근데, 우테코 6기 '코딩해듀오' 팀 분들의 페어 프로그래밍 행사에 참여했다가 MVC(Model-View-Controller) 패턴에 대한 생각이 확장되었습니다. 그래서 다시 한번 MVC를 정리해보고자 이 글을 작성합니다. MDN의 정의MVC는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직, 화면을 구분하는데 중점을 두며, 이러한 '관심사 분리'로 더 나은 업무의 분리와 향상된 관리를 제공합니다. 즉, 어플리케이션을 모델, 뷰, ..
#개발/자바/모던자바인액션 동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있습니다. 동작 파라미터란? 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록이다. 예를 들어, 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있습니다. 결과적으로 코드 블록에 따라 메서드의 동작이 파라미터화 됩니다. 이를 이해하기 위해 책에 있는 하나의 예제를 통해 알아보겠습니다. 기존의 농장 재고목록 어플리케이션에 리스트에서 녹색 사과만 필터링 하는 기능을 추가한다고 가정합시다.enum Color { RED, GREEN }public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple..
Bean스프링 공식 문서에 따르면, 어플리케이션의 백본을 형성하고 Spring IoC 컨테이너에 의해 관리되는 객체들을 Bean이라고 부릅니다. 즉, Spring IoC 컨테이너에 의해 관리되고 인스턴스화되고 조립되는 객체를 의미합니다. 단순하게는 현재 어플리케이션 속 수많은 객체들 중 하나가 Bean이라고 생각하면 됩니다. Spring IoC Container스프링 IoC 컨테이너는 제어의 역전(Inversion of Control, IoC) 개념을 가지며 이는 Bean을 인스턴스화 하고, 구성하며 조립(assemble)하는 역할을 합니다. 그 중에서도 IoC의 특수한 형태(Specialized form of IoC)인 의존성 주입(Dependency Injection, ID)은 생성자, 클래스 속성 ..
펜윅트리는 이진트리기반의 자료구조이며, 세그먼트 트리의 원리를 가지고 있습니다. 세그먼트 트리?여러 개의 데이터가 존재할 때 특정 구간의 합 혹은 최소값, 최대값 등을 구하는데 사용하는 이진 트리 형태의 자료구조입니다. 저는 이것을 어떻게 써야할지 단번에 이해가지 않아서 BOJ BOOK의 설명에 따라 그림과 함께 이해하였습니다. 만약, 이러한 문제가 있다고 합시다.크기가 n인 정수 배열 a가 있으며, 다음 연산을 최대 m번 수행합니다. 1. 구간 l, r이 주어졌을 때, a[l] + ... + a[r] 합 출력하기 2. i번째 수를 v로 바꾸기int[] a = {4, 6, 2, 1, 7, 5, 8}; 주어진 a 배열은 위와 같습니다. 일단 문제에서 구간 l, r이 주어졌을 때의 구간합을 구한다라고 하면 ..
네이버 쇼핑이나 지메일을 들어가 보면 이러한 페이지 목록들을 확인할 수 있다. 이러한 기능을 구현하는 기법을 페이징이라고 한다. 정확하게 말하면 전체 데이터에서 사용자가 요청한 일부 데이터를 원하는 정렬 방식으로 보여주는 것이다. 페이징이 없으면 우리는 대용량의 데이터를 모두 받아서 하나의 웹 페이지에 다 표현해야 한다. 네이버 쇼핑에서 모니터를 검색하면 약 500만 개의 모니터 구매처가 나오는데 이를 하나의 웹 페이지 모두 불러온다면 웹 페이지를 불러오는 시간도 늘어날뿐더러 그만큼 네트워크 트래픽도 증가한다. 또한, 많은 양의 모니터를 보여주다 보니 스크롤 길이도 상당할 것이다. 그렇기에 우리는 페이징 기법으로 웹 페이지에 전체 데이터 중 일부만을 가져와 사용자에게 보여주는 것이다. 기본적으로 페이징 ..
문제를 잘 읽으면서 봄, 여름, 가을, 겨울을 하나씩 구현해보면 구현 자체는 쉽다. 이 문제에서 가장 어려운 점은 0.3초라는 시간제한을 뚫기위해 어떻게든 시간을 줄여야 한다는 점이다. 그래서 다음에 이러한 구현 문제를 풀 때 도움도 될겸 문제를 풀면서 찾은 시간을 줄이는 방법들을 정리해보는 것이다. 처음에 코드는 이렇게 구성했다.for (int year = 0; year () { @Override public int compare(tree o1, tree o2) { return o1.old - o2.old; } }); // spring ArrayDeque stk = new ArrayDeque(); for (tree t..
개인적인 공부를 위해 쓴글이므로 이해가 안될 수도 있습니다. 처음에 문제를 보고 DP 배열을 3차원으로 정의했다. DP[c][n][m] 이렇게 정의하면, c가 0일 때 경우의 수를 먼저 구해놓고, c가 1일 경우 DFS로 계속 탐색하다가 오락실을 만나면 다음 호출부터는 c를 0으로 만들어 [0][y][x]를 탐색하는데, 만약 dp[0][y][x]가 이미 갔던 곳이면 해당 값을 리턴하고 아니면 지속적으로 탐색하도록 하는 방법을 생각했다. 지금까지는 논리적으로 문제가 없어보인다. 하지만, c가 2가 되면은 반례가 보인다. 문제에서 주어지는 예제로 한번 생각해보자.3 3 22 23 2 그럼 c가 1일 때 해당하는 경우의 수는 3개이다.(1, 1) -> (1, 2) -> (2, 2) -> (2, 3) -> (..
문제: boj.kr/2293 날짜: 09/22 (일)성공여부: X 1, 2, 5원 동전을 갖고 10원을 만든다고 하면 1원만 써서 만드는 경우의 수, 1원과 2원을 써서 만드는 경우의 수, 1원 2원 5원을 모두 사용해서 만드는 경우의 수로 나눌 수 있다. 1원을 먼저 써서 만드는 경우의 수를 구해놓고 2원을 써서 만드는 경우의 수를 더하면 1원과 2원으로 10원을 만드는 경우의 수를 찾을 수 있지 않을까? 그럼 중복은 어떻게 제거하냐? 1원으로만 2원부터 10원까지 만든 경우의 수가 있는 상황에서 2원을 무조건 투입한다고 생각해보자. 그럼, 2원으로 2원을 만들기 위해 2원 하나만 사용할 수 있다. 1+1, 2 2가지가 있는 경우이므로 원래 1+1 경우의 수에 2로 만든 경우의 수 = 2가 된다. 3원..