반응형

개발 288

[개발관련] 정렬 프로그램

https://github.com/mbk1991/Algorithm_DataStructure/tree/master/Algorithm_DataStructure%2Fsrc%2Fmain%2Fjava%2FAlgorithm%2Fsort 정렬 알고리즘을 공부 중 알고리즘과 배열 생성 방법을 선택하여 정렬하는 프로그램을 만들어보았다. 여러가지 정렬 알고리즘을 공부하는 김에 객체 지향적으로 만들어보고자 하였다. 개선할 점이 아주 많은 코드이다. 정렬 알고리즘들이 잘 동작하지만 우선 속도가 끔찍하게 느리다. 많은 이유가 있겠지만 불필요한 비교 및 오토박싱 등으로 과도한 객체 생성을 하고 있는 것으로 보인다. 성능 개선을 위하여 기본 타입을 사용하는 등 여러모로 개선이 많이 필요하다. 자바 기본기와 이펙티브 자바 서적을 읽..

개발/개발 2023.08.04

[개발관련] No Test Roots Found

JUnit 테스트 코드를 생성하고자 하는 클래스에 Alt + Enter로 Create Test를 누르자 위와 같은 팝업이 나타났다. Test 루트를 인식하지 못해 발생한 문제였다.build.gradle에 소스디렉터리에 대한 설정을 넣은 것과 관련이 있어 이를 수정해 보았다. test의 srcDirs 가 'test'인 것을 'src/test/java'로 변경하였다. (사실 sourceSets 설정을 하지 않으면 해결된다. Gradle에서는 기본적으로 인식하는 프로젝트 레이아웃이 정해져 있기 때문이다.. src/main/java, src/test/java... 등) build.gradle sourceSets { main { java { srcDirs = ['src/main/java'] } } test { j..

개발/개발 2023.08.03

[개발관련] Package name 'main.java.Algorithm. ... ' does not correspond to the file path 'Algorithm. ...'

Gradle 프로젝트로 전환 후 인코딩 및 소스 디렉터리 변경에 의한 Package 선언 문제가 발생하였다. Package name 'main.java.Algorithm. ... ' does not correspond to the file path 'Algorithm....' 정렬 알고리즘 공부 차원에서 코딩 중 테스트 코드나 써볼까 하고 JUnit 라이브러리를 추가하고자 하였다. 빌드 도구로 의존을 추가하는 것이 간편하다고 생각하여 build.gradle 파일을 추가하여 Gradle 프로젝트로 변경하였더니 제목과 같은 문제가 발생하였다. Gradle 프로젝트 변경 후 인코딩 관련 다른 문제도 발생하였었는데 다음과 같은 조치로 해결하였다. ------------------------------------..

개발/개발 2023.08.03

[개발관련] API(Application Programming Interface)에 대한 이해

다음 단어들이 잘 와닿지 않았었다. - Application - API ( Application Programming Interface) 애플리케이션을 스마트폰에서는 앱, 어플 등으로 표현한다. 보통 '앱 깔아서 쓰면 된다'라고 말을 하는데 이는 사용자가 필요로 하는 프로그램을 스마트폰에 설치한다는 의미이다. 앱(Application)은 사용자가 필요에 의해 설치하여 사용하는 프로그램이며 응용프로그램이라고 칭한다. 운영체제 위에서 사용자에게 특정 기능을 제공하는 모든 프로그램이 App이라고 이해해 보았다. Excel, 메모장, 그림판, 계산기, Tomcat, nginx, 브라우저 등등 운영체제 위에서 동작하는 운영체제가 아닌 프로그램을 모두 응용프로그램이라고 보는 것이다. 사람들은 보통 응용프로그램을 사..

개발/개발 2023.07.22

[개발관련]배움의 중요성_ 김영한님의 강의를 듣고...

배움의 중요성_ 김영한 님의 강의를 듣고... 국비지원 컴퓨터 학원을 다니며 열심히 코딩을 하던 시절, 세미 프로젝트와 파이널 프로젝트를 마친 후 가장 귀찮은 것이 있었다. 그것은 바로 클래스다이어그램과 시퀀스다이어그램을 한 번에 몰아서 그리는 것이었다...! 다이어그램을 한 번에 뽑아내기 위하여 인텔리제이를 설치하여 부랴부랴 문서를 완성하여 강사님께 제출하였던 기억이 난다. 지금은 IT실무 환경을 경험하고 CS지식을 조금씩 쌓아가면서 자연스럽게 이것 저것 알게 된 것들이 많지만 학원 수강 시절의 나는 IT문외한에 가까웠다. 그 시절 아무것도 모르는 30여 명의 사람들을 모아놓고 프로젝트라는 결과물을 만들어낼 수 있도록 혼자서 지도해 주신 강사님의 역량이 정말 대단한 것 같다. 그때는 클래스 다이어그램,..

개발/개발 2023.07.18

[개발관련] 이미지를 base64로 인코딩할 경우 HTTP 요청을 할 필요가 없는 이유_chatGPT

서적에서 HTTP/1.0에서 RTT 증가에 대한 방안을 읽던 중 이미지를 Base64 인코딩 할 경우 HTTP 요청을 할 필요가 없다는 부분이 이해가 가지 않아 chatGPT에게 문의하였다. 이해가 쏙쏙 잘 된다. 이미지를 문자열로 변환하여 응답할 수 있기 때문에 이미지 그 자체에 대한 HTTP Request를 또 할 필요가 없다는 것. 이미지를 Base64로 인코딩하면 HTTP 요청을 할 필요 없이 이미지 데이터를 문자열로 포함시킬 수 있습니다. 이는 이미지를 직접 포함시키는 것으로, 별도의 HTTP 요청 없이 이미지 데이터를 전송하고 처리할 수 있게 됩니다. 일반적으로 이미지를 HTTP 요청을 통해 전송하는 경우, 클라이언트는 서버에게 이미지 파일의 URL을 제공하고, 서버는 해당 URL로부터 이미지..

개발/개발 2023.07.12

[개발관련] 재귀에 대한 이해 (Recursive)

재귀적으로 동작하는 소스 코드에 대한 이해가 필요하다고 생각하여 정리해본다. 함수가 자기 자신을 호출하는 처리를 재귀(Recursive)라고 한다. 함수를 재귀적으로 사용하면 반복문처럼 사용하거나 결과가 다른 결과 도출을 위한 단계가 되도록 점진적인 처리를 하거나 대상의 범위 등을 달리해가며 같은 처리를 적용하여 원하는 결과를 만들어 내는 등 응용할 수 있는 방법이 다양하다. 재귀를 활용하여 팩토리얼을 구한다거나, 퀵정렬을 한다거나, 트리구조에서 하위 노드를 탐색한다거나 할 수 있다. *클래스 내에 선언한 함수를 메소드(method)라고 표현하지만 해당 포스팅에서는 '함수'라는 단어로 통일한다. 1. 조건 없는 재귀 호출 = 무한궤도 영원한 굴레 자기 자신을 호출하는 재귀 함수의 모습은 다음과 같다. p..

개발/개발 2023.07.09
반응형