728x90
반응형

Tech 90

[스프링 핵심 원리] 다양한 의존관계 주입 방법

의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 1. 생성자 주입 지금까지 진행했던 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장 '불변, 필수' 의존관계에 사용 OrderServiceImpl을 확인해보자. @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 생성자를 통해서만 DI가 되며, 누구도 외부에서 수정할 수 없다. 생성자가 딱 1개만 있으면 @Au..

Tech/Spring 2022.01.17

[BOJ] 백준 1182 부분수열의 합 c++ (dfs, 백트래킹, 브루트포스)

문제 출처 : https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 풀이 dfs를 사용하여 해결한 문제이다. 현재 위치인 idx, 합을 나타내는 sum, 현재 수열 개수 cnt, 부분수열의 크기 size 를 넘겨주었고 size == cnt인 순간 합이 S인 경우를 체크하였다. 코드 #include #include using namespace std; int N, S; int answer; void dfs(vecto..

Tech/Algorithm 2022.01.17

[BOJ] 백준 1759 암호 만들기 c++ (dfs, 백트래킹, 브루스포스)

문제 출처 : https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 풀이 dfs를 사용하여 해결한 문제이다. dfs에서 알파벳을 하나씩 추가한뒤, L개가 되면 모음 조건 && 자음 조건을 확인해 처리하였다. str.push_back(v[now]); if(v[now] == 'a' || v[now] == 'e' || v[now] == 'i' || v[now] == 'o' || v[now] == 'u') vowel++; else conso++; if(str.l..

Tech/Algorithm 2022.01.16

[스프링 핵심 원리] 빈 중복 등록과 충돌

컴포넌트 스캔에서 같은 빈 이름을 등록하게 되는 경우 충돌이 발생할까? 아래와 같이 2가지 상황이 있다고 하자. 자동 빈 등록 vs 자동 빈 등록 수동 빈 등록 vs 자동 빈 등록 1. 자동 빈 등록 vs 자동 빈 등록 역시 충돌이 나며, 에러를 발생시킨다. 2. 수동 빈 등록 vs 자동 빈 등록 헷갈릴 수 있는 부분이다. 테스트를 해보자! AutoAppConfig 파일에 아래와 같이 다른 빈을 등록한다. public class AutoAppConfig { @Bean(name = "memoryMemberRepository") MemberRepository memberRepository(){ return new MemoryMemberRepository(); } } MemoryMemberRepository ..

Tech/Spring 2022.01.15

[BOJ] 백준 6603 로또 c++ (dfs, next_permutation)

문제 출처 : https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 풀이 수가 주어졌을때 6개를 골라 모든 방법을 출력하는 조합 문제이다. 이 문제를 푸는 방법은 크게 2가지가 있다. 백트래킹(dfs)를 사용하여 풀이 순열(next_permutation)을 사용하여 풀이 두 가지 모두 적용할 수 있는 좋은 문제이며, 하나씩 확인해보자! 1. 백트래킹(dfs)를 사용하는 방법 우선 처음 K를 입력받고, K개 수는 vector (V) 에 저장..

Tech/Algorithm 2022.01.13

[스프링 핵심 원리] 싱글톤 컨테이너, 싱글톤 레지스트

스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다. (스프링 컨테이너 생성과정에서, 컨테이너는 객체를 하나만 생성해서 관리) 스프링 컨테이너가 싱글톤 컨테이너 역할을 해서 싱글톤 객체를 생성하고 관리한다. 이 기능을 싱글톤 레지스트 라고 한다. 싱글톤 레지스트의 장점은 싱글톤 패턴을 위한 지저분한 코드 필요x DIP, OCP, 테스트, private 생성자로부터 자유롭게 싱글톤 사용 가능 이전의 코드에서 스프링 컨테이너를 사용하는 부분만 바꾸어 테스트를 진행해보자! void springContainer(){ // AppConfig appConfig = new AppConfig(); ApplicationContext ac = new AnnotationConfigAppli..

Tech/Spring 2022.01.12

[BOJ] 백준 1065 한수 c++ (브루트포스)

문제 출처 : https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 풀이 간단한 브루트포스 문제이다. 100 미만의 수는 모두 한수이므로 그대로 출력하고, 세 자리 수는 각 자리 수를 구해준다. ex) 216 : c= 2, b = 1, a = 6 등차수열은 연속된 두 개의 수의 차이가 일정한 수열 이므로 c - b = b - a 일 경우 한수이다. 코드 #include #include using namespace std; int main(){ ios::..

Tech/Algorithm 2022.01.11

[스프링 핵심 원리] 웹 애플리케이션과 싱글톤

대부분의 스프링 애플리케이션은 웹 애플리케이션이다. (물론 애플리케이션 개발도 가능) 웹 애플리케이션의 경우 보통 여러 고객이 동시에 요청을 하게 된다! 따라서 요청이 올때마다 객체를 만들게 되는 경우가 발생한다. (아래 AppConfig 에서도 memberService 요청이 들어오면 그 객체를 만들어준다.) @Configuration // 설정 정보 public class AppConfig { @Bean // 클래스 스프링 컨테이너에 등록 public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); // memberService 구현체, 객체 생성 } } 테스트를 진행해보자. AppConfig 파일에서 가..

Tech/Spring 2022.01.11

[스프링 핵심 원리] 스프링 빈 설정 메타 정보 - BeanDefinition

스프링은 BeanDefinition 으로 메타 정보를 추상화 한다. 스프링의 BeanDefinition 추상화를 쉽게 생각해보면, 역할과 구현을 개념적으로 나눈 것이라 할 수 있다. (스프링 컨테이너는 XML, 자바 코드에 관계 없이 BeanDefinition만 알면 된다.) BeanDefinition : 빈 설정 메타 정보 - @Bean, 당 각각 하나씩 메타 정보가 생성됨 - 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈 생성 BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록할 수 도 있다. (실무에서는 거의 없다!) 스프링 빈을 만드는 2가지 방법이 있는데, 직접 등록하는 방법 factoryBean을 사용하여 등록하는 방법 (일반적인 자바 코드를 통해 등록하는 방법 이 있다.

Tech/Spring 2022.01.10

[프로그래머스] 소수 찾기 c++ (완전탐색, 에라토스테네스의 체)

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 풀이 완전탐색 문제이며, 조합 / 중복제거 / 에라토스테네스의 체를 활용하여 해결하였다. 해결한 방법은 다음과 같다. 1. 종이 조각으로 만들 수 있는 모든 경우의 수 구하기 (next_permutation 활용) 2. 경우의 수에서 중복 제거하기 (erase, unique 활용) 3. 소수 판별하기 1. 모든 경우의 수 구하기 모든..

Tech/Algorithm 2022.01.09
728x90
반응형