전체 글 296

스프링 IoC 컨테이너 사용(ApplicationContext 사용)

"어떻게 만들어달라"는 지시서를 전송 1. maven사용 -> spring.io 라이브러리를 pom.xml에 불러옴. 2. ApplicationContext 사용. ClassPathXmlApplicationContext로 생성. 두가지 방식 다 된다. 첫번째 방법: Bean이라는 녀석을 만드는데 이름가지고 "console"이라는 애를 꺼내면, 형식변환을 해서 써야함. => 객체에 대한 형식을 모르기때문에 Object형으로 나오므로 형변환해야함. 두번째 방법: 자료형 명으로 꺼낼 수 있다. => 인터페이스 형식(ExamConsole.class)에 참조된 녀석을 찾아서 거기에 맞게 얻어다줌. 값 형식 DI 위처럼 property value값을 넣어줄 수 있다. 생성자로 받는것은 java코드는 아래와같다. 그..

IoC컨테이너(Inversion of Control)란

컨테이너에 담겨져있는것이 무엇이냐에 따라서 '무슨 컨테이너'라고 불린다. 앞서 우리는 부품을 Dependency에 비유했다. (이전글 : 의존성 주입 참고) 2021.04.04 - [웹(Web)/백엔드(Backend)] - 의존성주입(DI, Dependency Injection)이란 부품 컨테이너 => Dependency 컨테이너 => IoC 컨테이너 그렇다면 왜 IoC컨테이너라고 부를까? Dependency 컨테이너라고 부르지 않고 말이다.. 주문서에다가 어떤부품을 생성해주세요 -> 조립해주세요해서 담아달라하면 이렇게 생성된다. 제품 조립 순서를 짚고 넘어가자. 소비자의 경우 A가만들어지면 B가만들어지고...D가 만들어진다. 따라서 소비자는 뒤에있는 부분은 알아서 만들어져서 조립과정을 모름 하지만 조립..

의존성주입(DI, Dependency Injection)이란

1. 객체 A는 B,C의 기능을 사용한다고 볼수있지만, 객체 B,C의 기능에 의존한다. 2. A가 B,C의 기능이 필요한경우 외부에 있는 갑한테 B,C의 기능을 주입받는다. 이렇게 외부에서 의존성을 주입시켜주고 관리하는것이 JAVA에서는 "Spring" 이다. 위의 1,2번 케이스를 개발자가 직접 해당 객체의 라이프사이클들을 다 관리하면(강한결합) 힘들다. 따라서 외부에서 객체B,C와 같이 만들어서 주입만시켜주는 경우(약한결합) 개발자가 편해진다. 객체지향 프로그래밍에서는 위처럼 "약한결합"을 사용하기 위해 Spring을 이용한다. 아래는 예시코드이다. 위처럼 객체를 직접 만들면 강한결합, 가져오면 약한결합이다. Why 약한결합사용? class에서 생성자를 private으로 바꾸면 강한결합에서는 인식할수..

서블릿 매핑(Servlet Mapping)이란

위의 full path는 서블릿의 경로를 통해서 포트번호, 서블릿이름, 해당서블릿의 위치가 보인다. 그래서 보안 취약함. 따라서 mapping을 사용하는데, context-path는 그대로 똑같이 사용하지만, 간략하게 "닉네임을 준다"라고 생각하면 편하다. 그 "닉네임을 주는 것"을 servlet Mapping이라고 한다. 방법1: XML파일을 이용하는방법(아직 사용하긴함) 동적 웹 프로젝트에서 web.xml에서 서블릿을 등록함 패키지명을 포함한 경로에서 마지막 부분인 서블릿이름을 에 넣고 에 "닉네임"으로 사용할 것을 입력해주면 매핑 성공! 방법2: Java Annotation을 이용한 매핑(현대적) servletEx.java와 같은 파일에서 어노테이션을 하면 바로 출력된다. 위의 두가지 방법으로 각각..

[JAVA] 백준 N과 M(2), DFS 중복X

N과M(1)은 중복 O N과M(2)는 중복 X 둘다 DFS를 활용한 코드이다. 오히려 중복없이 출력하는 코드인 (2)가 더 짧다. 단, 매개변수를 하나 더 필요로한다. 이 값(at)은 현재 index값보다 더 큰 index에 대하여 for문을 돌리기위해 사용한다. import java.util.Scanner; class Main { public static int[] arr; public static int N, M; public static void main(String[] args) { Scanner in = new Scanner(System.in); N = in.nextInt(); M = in.nextInt(); arr = new int[M]; dfs(1, 0); } public static voi..

백트래킹(BackTracking, DFS/BFS), N과M(1)

백트래킹과 완전탐색에 대하여 헷갈려서 비교해보았다. 백트래킹의 대표적인 요소 DFS, BFS. 백준15649번: N과 M(1) www.acmicpc.net/problem/15649 DFS로 풀이한 방식이다. import java.io.IOException; import java.util.Scanner; class Main { static int n, m; static int[] arr = new int[9]; static boolean[] visited = new boolean[9]; public static void main(String[] args) throws IOException { //input Scanner scanner = new Scanner(System.in); n = scanner.ne..

스프링(Spring) 프로젝트의 폴더 구조

- Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 먼저 Spring MVC 템플릿으로 스프링 프로젝트를 하나 생성해보겠습니다. 빌드툴은 메이븐을 사용합니다. 폴더 구조가 꽤 복잡한데, 하나하나 살펴보도록 하겠습니다. 1. src/main/java 자바(.java) 파일이 모여있는 곳입니다. 패키지로 잘 분리해서 자바 클래스를 생성해 사용하면 됩니다. 스프링에서 이미 MVC 패턴의 서블릿 구조를 잡아주기 때문에 따로 서블릿을 만들 필요 없이 스프링 구조에 맞춰 클래스 파일들..

<우아한 스프링 부트> 정리

www.youtube.com/watch?v=z0EaPjF3pCQ 1. 어플리케이션을 만들어서 어떻게 배포하냐에 따라 2가지선택. JAR(Java Archive) : 기본 이것부터 사용해보길 권장. WAR(Web Application Archive) : 톰캣같은곳에 배포할때 사용. 2. 의존성추가 : 스프링부트가 제공해주는 주요 기능 중 하나 pom.xml에는 버전정보가 없지만 dependency management에 버전이 정의가 되어있다. springboot에 버전을 명시하지않아도 되는것은 장점 + 현재 버전에 최적화되어있는것을 알아서 찾아놨기때문에 springboot가 좋은것이다. springboot가 관리해주지 않는 dependency는 버전 명시해야됨. 3. 프로젝트 생성 1. 메이븐에서 실행 :..

카카오 코딩테스트 정리

본 글은 프로그래머스를 기준으로 LEVEL 1, 2, 3 에서 핵심 개념 및 특이사항에 트랜드에 대하여 분석한 글이다. Level 1 : 정규식/String/객체비교/기본 자료구조형(스택,큐)와 같은 1차적인 지식을 바탕으로 풀이. Level 2 : 자료구조를 기본으로 사용하면서 탐색/계산비교/분리 등을 위주로 풀이한다. Level 3 : 탐색/순열조합을 기본으로 사용하면서, 특정값들을 모아놓고 최대/최소값을 비교해내어 출력한다. 2018~2019 : 신유형이라고 생각될만한 주제를 주고나서, 해당문제에 대하여 구현을 시키는 방식이 많이 제시되었다. ex) Date, 다른곳에서 사용되는 알고리즘 2020~2021 : 문자열을 처리하는 방식에 대한 문제가 증가하였다. 그리고 현업에서 사용될법한 예시를 주어주..

(2018카카오) 파일명정렬 Java

채점하기를 하면 계속 오류가 난다. 정규표현식은 잘 설정했는데 어디가 문제인지 모르겠다. 1. 정규표현식 2. Compartor 다중조건 비교 정규표현식 HEAD는 숫자가 아닌 문자로 이루어져 있으며, 최소한 한 글자 이상이다. NUMBER는 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다. 0부터 99999 사이의 숫자로, 00000이나 0101 등도 가능하다. TAIL은 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다. 소스 파일 저장소에 저장된 파일명은 100 글자 이내로, 영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 ..