분류 전체보기
-
Spring 완전정복 - 5 / 스프링 빈과 의존관계Spring(Web) 2022. 4. 20. 18:47
Spring 컨테이너를 이용해, Controller - Service - Repository를 싱글톤으로 사용 할 수 있는 방법을 배웠다. 기본적으로 1. 컴포넌트 스캔 방식으로, 스프링이 자동으로 컨테이너에 넣음 2. 설정 파일을 만들어, 수동으로 의존관계를 설정 총 두 가지 방법이 있다. 컴포넌트 스캔 첫 번째로, 컴포넌트 스캔 방식은 그저 이어줄 클래스들위에 @Component 어노테이션을 추가해주기만 하면 스프링이 자동으로 컨테이너에 등록해주는 방식이다. 다만 @Service나 @Repository와 같이 특수한 컴포넌트 어노테이션들이 있는데, 각 클래스들의 역할 별로 특수한 컴포넌트 어노테이션을 적용해줘도 잘 작동했다. @Controller public class MemberController ..
-
14226 - 이모티콘Baekjoon 2022. 4. 20. 18:33
2차원 탐색 문제이다. 다른 탐색 문제들과는 조금 다른 점이 있는데, 클립보드에 어떤 값이 저장되어있냐에 따라서 다음 정점이 달라진다는 것이다. 문제에서 나와있는 분기의 종류가 3가지이기 때문에 한 정점에서 3개의 간선이 뻗어나간다고 생각 할 수 있는데, 이것은 틀린 생각이다. 1번째 2번째 분기는, 클립보드에 저장된 수에 따라서 각각 간선이 있다고 생각한 후 문제를 풀어야한다. 그래서 2차원 배열로 두고 풀면 쉽게 풀렸던 문제였다. vertex(이모티콘의 개수), clip(클립보드에 저장된 이모티콘의 개수) 두 값을 가지고 있는 클래스를 선언해준 후, 각각의 경우에 따라 분기를 돌 수 있도록 bfs를 이용해 문제를 풀이했다. MAX값이 2000인 이유는, S의 범위가 1000이고(아래 코드에서는 ver..
-
7562 - 나이트의 이동Baekjoon 2022. 4. 20. 18:28
이전에 풀었던 탐색 문제이다. BFS가 구현이 쉬워서 BFS로 구현했고, 이동 할 수 있는 경우들에대한 변화량들을 배열에 저장해둔 후 BFS를 돌리면되는 문제이다. import java.io.*; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; class Cordb { int x; int y; Cordb(int x, int y) { this.x = x; this.y = y; } } public class Main { static int[] dx = {-1, 1, -2, 2, -2, 2, -1, 1}; static int[] dy = {-2, -2, -1, -1, 1, 1, 2, 2}; public static vo..
-
13913 - 숨바꼭질 4Baekjoon 2022. 4. 20. 18:20
문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 문제 설명 이전에 풀었던 숨바꼭질 문제에, 역추적이 포함된 문제이다. 가장 빠른 시간을 출력한 후, 해당 경우의 수에 어떻게 이동하는지 출력하는 문제인데, 이전 코드에 다음 분기로 넘어갈 때 마다 이전 좌표를 저장하는 부분만..
-
Spring 완전정복 4 / 테스트 코드(Service)Spring(Web) 2022. 4. 19. 19:09
Repository에 이어서 Service에대한 테스트 코드도 작성했는데, 역시 실제 서비스 실행 부분이기도해서 그런지 Repository 테스트 코드보다는 비교적 어려웠다. 논외로, 강의에서는 "어차피 빌드해도 테스트 코드는 빌드되지 않으니, 테스트 메소드들은 한글이어도 된다"라는 점도 말씀해주셔서 좋았다. 다른 부분들은 이전 Repository 테스트 코드와 별반 다르지 않았지만, dependency injection이 추가된 부분이 조금 혼동스러웠다. 아래 테스트 코드에서는 테스트가 진행될 코드에서 사용된 member Repository 객체를 그대로 가져와서 테스트를 진행한다. MemoryServiceTest Dependency injection (의존성 주입) MemberService membe..
-
Spring 완전정복 - 3 / 테스트 코드(Repository)Spring(Web) 2022. 4. 19. 19:03
실제로 처음 해보는 부분이였는데, assert를 이용해 테스트 코드를 작성하고 테스트해보는 부분이 생각보다 재밌었다. 강의에서 기본적으로 계속 강조됐던 부분은 "어떤 객체든 null이 넘어오는 경우(예외)가 생길 수 있으므로, Optional Wrapper Class를 사용 할것"이다. 기본적으로 42seoul을 할 때는 C언어를 사용하고(if NULL, return NULL등을 이용해 널 처리), 이전에 java를 이용해 개발 할 때에도 그저 컴파일이 안될 때 찾아본 후 null 처리를위해 Optional을 사용한 적은 있었지만, 정확한 이유와 함께 알게된것은 이번이 처음이였다. 예전에 kotlin을 이용해 앱 개발을 했었을 때는 항상 변수 이름 끝에 ?를 붙여 null 체크를 했었던것 같은데.. 아무..
-
Spring 완전정복 - 2 / 서비스 개발(회원 정보)Spring(Web) 2022. 4. 19. 18:47
기본적인 회원 정보를 받아, 저장/관리해주는 서비스를 개발해보기. 회원 정보는 간단하게 id : 서버에서 지정해주는 고유한 id로, sequence 형태로 차례대로 부여함. name : 사용자 이름 과 같은 형태로 정의했다. package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ..
-
Spring 완전정복 - 1 / ControllerSpring(Web) 2022. 4. 19. 18:33
Spring에서 페이지를 띄우는 여러 방법 1. 정적 페이지, MVC와 템플릿 엔진 위 그림과 같이 동작하는데, 각각의 경우에 따라 다르게 동작한다. 정적 페이지를 호출 할 경우 -> http://localhost:8080/hello.html GetMapping에 localhost에서 호출한 이름의 컨트롤러가 없을 경우, 따로 컨트롤러를 거치지 않고 static 디렉터리 하위에 있는 html 웹 페이지를 띄움. (html 파일의 이름으로 호출해야함.) 따로 컨트롤러가 없기 때문에, 코드는 없음. 컨트롤러가 있을 경우 -> http://localhost:8080/hello-mvc localhost에서 호출한 이름의 GetMapping 어노테이션이 있다면, 컨트롤러에서 해당 부분을 실행한 후 return하게..