본문 바로가기

전체 글131

[Spring/기본편] 스프링 빈 조회 스프링 빈 조회 class ApplicationContextBasicFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("빈 이름으로 조회") void findBeanByName() { MemberService memberService = ac.getBean("memberService", MemberService.class); assertThat(memberService).isInstanceOf(MemberServiceImpl.class); } @Test @DisplayName("이름 없이 타입만으로 조회") void findBea.. 2024. 3. 19.
[Spring/기본편] 스프링 컨테이너 스프링 컨테이너 ApplicationContext 를 스프링 컨테이너라 한다. 기존에는 AppConfig 를 사용해서 직접 객체를 생성하고 DI를 했지만 이제부터는 스프링 컨테이너를 통해서 사용이 가능하다. 스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용한다. 여기서 @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 등록된 객체를 스프링 빈이라 한다. 기존에는 필요한 객체를 AppConfig 를 사용해서 직접 조회했다. 지금은 스프링 컨테이너를 사용하여 필요한 스프링 빈(객체)를 찾을 수 있다. 예) applicationContext.getBean() 메서드를 사용하여 찾을 수 있다. // 스프링 컨테이너 생.. 2024. 3. 18.
[Spring/기본편] 객체 지향 설계 스프링 핵심원리 객체 지향 설계 5가지원칙 SRP : 단일 책임 원칙 (single responsibility principle) → 한 클래스는 하나의 책임만 가져야 함 OCP : 개방-폐쇄 원칙 (Open/closed principle) → 기존 코드 변경x 기능추가o LSP : 리스코프 치환 원칙 (Liskov substitution principle) → 자식 객체가 부모 객체를 대체할 수 있다. ex) 컬렉션 프레임워크 ISP : 인터페이스 분리 원칙 (Interface segregation principle) → 객체는 자신이 사용하는 메서드에만 의존해야 한다. DIP : 의존관계 역전 원칙 (Dependency inversion principle) → 객체는 구체적인 객체가 아닌 추상화(추상.. 2024. 3. 18.
DP #include using namespace std; long long d[100]; long long fibo(int x) { cout 2024. 2. 15.
이진탐색 #include using namespace std; // 이진 탐색 소스코드 구현(반복문) int binarySearch(vector& arr, int target, int start, int end) { while (start target) end = mid - 1; // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else start = mid + 1; } return -1; } int n, target; vector arr; int main(void) { // n(원소의 개수)와 target(찾고자 하는 값)을 입력 받기 cin >> n >> target; // 전체 원소 입력 받기 for (int i = 0; i > x; arr.push_ba.. 2024. 2. 13.
BFS 너비우선탐색 #include using namespace std; bool visited[9]; vector graph[9]; // BFS 함수 정의 void bfs(int start) { queue q; q.push(start); // 현재 노드를 방문 처리 visited[start] = true; // 큐가 빌 때까지 반복 while(!q.empty()) { // 큐에서 하나의 원소를 뽑아 출력 int x = q.front(); q.pop(x); cout 2024. 2. 13.
DFS 깊이우선탐색 #include using namespace std; bool visited[9]; vector graph[9]; // DFS 함수 정의 void dfs(int x) { // 현재 노드를 방문 처리 visited[x] = true; cout 2024. 2. 13.
[C++] STL Priority_queue 사용법 1. Priority_queue 란? 기본적으로 C++에서 자주 쓰이는 vector와 같은 container adaptor의 한 종류이며 C++에서 int와 같은 기본자료형으로 우선순위 큐를 사용한다면 큐에 있는 모든 원소 중에서 가장 큰 값이 Top을 유지하도록, 우선순위가 가장 크도록 설계되어 있다 또한 우선순위 큐는 내부적으로 Heap이라는 자료구조를 사용하고 있다. 간단하게 이 정도로 소개하고 바로 사용법을 살펴보자. 2. 기본적인 메소드 push() : 우선순위 큐에 원소를 추가한다 pop() : 우선순위 큐에서 top의 원소를 제거한다 top() : 우선순위 큐에서 top에 있는 원소 즉 우선순위가 높은 원소를 반환한다. empty() : 우선순위 큐가 비어있으면 true를 반환하고 그렇지 않.. 2024. 1. 7.
[C++] STL map 사용법 MAP이란? map은 각 노드가 key와 value 쌍으로 이루어진 트리입니다. 특히, 중복을 허용하지 않습니다. 따라서 map은 first, second가 있는 pair 객체로 저장되는 데 first- key로 second- value로 저장됩니다. C++의 map의 내부 구현은 검색, 삽입, 삭제가 O(logn) 인 레드블랙트리로 구성되어 있습니다. MAP 기본 형태 map map1; MAP 정렬 map은 자료를 저장할때 내부에서 자동으로 정렬합니다. map은 key를 기준으로 정렬하며 오름차순으로 정렬합니다. 만약 내림차순으로 정렬하고 싶은 경우와 같이 사용하면 됩니다. map map1; (만약 다른 방법으로 int데이터를 내림차순으로 정렬하고 싶을 경우, 데이터에 -(마이너스)를 붙여 삽입하여 처.. 2023. 12. 24.
[C++] STL lower_bound, upper_bound 사용법 #include 헤더 lower_bound(arr, arr+N, value) 배열에서 범위 내의 원소들 중 value값 보다 크거나 같은 첫 번째 원소의 주소를 리턴합니다. 만약 그러한 원소가 없다면 end값을 리턴합니다. upper_bound(arr, arr+N, value) 배열에서 처음으로 value값을 초과하는 원소의 주소를 반환합니다. 만약 그러한 원소가 없다면 end값을 리턴합니다. 1. 기본적인 사용법 /* lower_bound(start, end, target) */ #include vector v = { 1, 2, 3, 4, 5 }; lower_bound(v.begin(), v.end(), 3); int arr[5] = { 1, 2, 3, 4, 5 }; lower_bound(arr, ar.. 2023. 12. 21.