개발 18

[JAVA] 직접 구현해보는 ArrayQueue 와 LinkedQueue

Queue는 First in First Out의 규칙을 가진 자료구조로서 간단한 예로 식당 예약 줄(먼저 들어온사람이 먼저 먹어야함!)이 있다. 자바의 Collection에 아주 잘 구현이 되어있지만 Queue의 내부 동작을 이해할 겸 Array 및 Node로 직접 구현해보았다. public interface Queue { public boolean isEmpty(); public void add(E element); public E element(); public E remove(); public int size(); } Queue를 구현 하기 전에 필수로 구현해야할 메소드를 interface로 정해놓았다. Array를 통해 구현한 Queue public class ArrayQueue implement..

개발/JAVA 2022.09.13

[JAVA] 배열 - Binary search (이분 탐색)

배열을 다시 공부하며 라이브러리의 메소드를 사용하지 않고 binary search를 직접 구현 해보고자 한다. 순차적 순회(for문으로 인덱스 0부터 if로 찾아보는 것)는 최악의 경우 N의 시간 복잡도를 가진다 그에 반해 binary search는 인덱스를 반씩 나눠가면서 찾고자 하는 수를 찾기 때문에 logN의 시간 복잡도를 가진다. (못찾으면 인덱스를 반으로 숭당 잘라서 그부분만 다시 순회해서 if로 찾으면 된다) 낮은 인덱스 : 0 높은 인덱스 : 찾아야하는 배열의 길이 중간 인덱스 (핵심!!) : (낮은 인덱스 + 높은 인덱스) / 2 이렇게 구한 중간 인덱스를 통해 찾고자하는 수를 찾으면 순회끝! 아래 코드를 보면 더 명확하게 알 수 있다. public static Integer binarys..

개발/JAVA 2022.09.03

[Spring] 스프링 컨테이너의 빈 조회 방법

스프링 컨테이너에 등록된 빈들을 조회하게 될 경우 사용하는 방법을 기록하고자 한다. 1. 모든 빈 조회 AnnotationConfigApplicationContext의 인스턴스인 ac로 부터 모든 스프링의 정보를 받기 위해서는 ac.getBeanDefinitionNames()를 실행하면 빈 이름을 모두 받아와서 ac.getBean(빈 이름) 을 통하면 빈을 조회 할 수 있다. public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBea..

개발/Spring 2022.08.25

[Spring] 스프링을 사용하는 이유?

Spring이란 JAVA를 좀 더 편하게 사용할 수 있게 해주는 프레임워크로 대규모의 회사에서 많이 사용한다. 여기서 "JAVA를 좀 더 편하게" 라는 단어의 의미를 김영한님의 "스프링 핵심 원리 - 기본편" 을 들으며 이해할 수 있게 되었다. 내가 프로그래밍을 하다 보면 하나의 class 혹은 객체에 정~말 다양한 책임과 기능을 모두 넣어 사용했었다. (혼자 기획하고 개발하다보니..) 그 이후에 객체 지향 설계 원칙에 대해 알게 되었고 그 설계 원칙을 단 하나도 지키지 않고 프로그래밍을 했다는 것 또한 알게 되었다. 내가 느낀바로는 Spring은 객체 지향적인 설계를 할 수 있도록 도와주는 아주 좋은 툴이라는 생각이 들었다. Spring에서 주요하게 사용 되는 단어로 IoC , DI 라는 단어가 나온다..

개발/Spring 2022.08.25

[C++ http 통신] boost/beast 라이브러리 설치 및 사용 방법 (feat.오류 해결을 위해 찾아 떠나는 여행)

C++에서 HTTP 통신 하기가 아주 쉽지않지만 boost 라이브러리를 많이 사용한다고 하여 사용방법을 구글링 하며 찾아보았다. boost 라이브러리 설치 방법 (Window 기준) https://github.com/boostorg/boost , 본 링크에서 boost 라이브러리를 .zip 파일로 다운받아 압축을 해제한다 "bootstrap.bat" 이름의 배치파일을 실행한다. 혹시나 VSCODE로만 컴파일하고자 하였다면 vswhere.exe 파일이 없다고 오류가 날 수 도 있다. 본인은 여러시도를 해보다가 visual studio를 설치하였다.... 그러니 오류 해결 "bootstrap.bat" 로 인해 b2.exe파일이 생성된다. b2.exe파일을 실행시키면 본 라이브러리를 사용할 준비는 되었다. (..

개발/C++ 2022.08.15

[C# - MariaDB] Multi line Insert 함수

DB에 data를 insert할 때, 한번에 insert 해야하는 개수가 적다면 하나씩 하나씩 insert 구문을 작성 후 "ExecuteNonQuery" 메소드를 실행하면 되었다. 그러나 개수가 점점 많아지면 많아질 수록 동작시간이 기하급수적으로 늘었고 주기적으로 Query문을 실행 하는 Timer의 주기 동안에도 Insert 구문이 다 실행되지 않아 DB Connection이 끊기는 등의 오류가 발생하였다. 해당 문제를 해결하기 위해 BulkInsert를 검색하여 찾아보았지만 DataTable로 구현해놓지 않은 과거의 나에게 발목이 잡혀 BulkInsert는 뛰어넘고 다른 방법을 찾던중, Heidi SQL이라는 프로그램에서 "데이터베이스에서 SQL로 내보내기" 기능을 사용하면 아래의 사진과 같이 한 ..

개발/C# 2022.06.25

[system.reflection.targetinvocationexception] 잘 동작하던 exe 파일 동작 안하는 경우

어제까지는 잘 동작했고, 해당 디바이스가 아닌 다른 디바이스에서는 잘 동작하는 괴이한 상황에 빠져서 디버깅 중 아래와 같은 문구를 확인하게 되었습니다. "system.reflection.targetinvocationexception 호출 대상이 예외를 throw했습니다 " "레지스트리에서 잘못된 인덱스 ''을(를) 읽었기 때문에 카운터 이름 데이터를 로드할 수 없습니다" 의 오류는 아래의 코드에서 발생한 것이 었고, 레지스트리 설정이 뒤틀려 성능 카운터 기능을 활용 할 수 없었던 것으로 파악했습니다. (발생 이유를 찾아보아야 하겠습니다.) PerformanceCounter cpu_s = new PerformanceCounter("Processor", "% Processor Time", "_Total");..

개발/C# 2022.06.02