728x90
반응형

전체 글 154

[스프링 핵심 원리] 자동, 수동의 올바른 실무 운영 기준

- 편리한 자동 기능을 기본으로 사용하자! 스프링이 나온 후 점점 자동을 선호하는 추세다. @Component 뿐만 아니라 @Controller, @Service, @Repository 처럼 계층에 맞춰 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. (최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고, 빈들도 조건에 맞으면 자동으로 등록하도록 설계되어있음) 자동 빈 등록을 사용해도 OCP, DIP를 지킬 수 있으므로 사용하는게 좋다. - 그럼 수동 빈 등록은 언제 사용하지? 애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있다. 업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리 등 / 보통 비즈니스 ..

Tech/Spring 2022.01.22

[스프링 핵심 원리] @Autowired 필드명, @Qualifier, @Primary

스프링에서 조회 대상 빈이 2개 이상일 때 해결할 수 있는 방법을 알아보자. @Autowired 필드명 @Qailifier → @Qailifier끼리 매칭 → 빈 이름 매칭 @Primary 사용 1. @Autowired 필드 명 매칭 @Autowired 는 타입 매칭을 시도하고, 이때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭 타입 매칭 타입 매칭의 결과가 2개 이상일 때 필드 명, 파라미터 명으로 빈 이름 매칭 기존 코드 @Autowired private DiscountPolicy discountPolicy; 필드 명을 빈 이름으로 변경 @Autowired private DiscountPolicy rateDiscountPolicy; 2. @Qualifier 사용 @Qualif..

Tech/Spring 2022.01.19

[BOJ] 백준 1987 알파벳 c++ (dfs, 백트래킹, 그래프)

문제 출처 : https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 풀이 dfs를 사용하여 해결한 문제이다. 그래프 문제에서 자주 쓰는 dx, dy 배열을 선언해 4방향 탐색을 돌려주면 된다. 여기서 주의할 점이 다음 dfs를 호출할때 cnt + 1, cnt++, ++cnt 에 따라 결과값이 달라진다는 것에 유의하자. dfs(row + dy[i], col + dx[i], cnt + 1); 코드 #include #include using nam..

Tech/Algorithm 2022.01.17

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

의존관계 주입은 크게 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
728x90
반응형