728x90
반응형

category 59

[Algorithm] 정렬 알고리즘(버블정렬, 선택정렬, 삽입 정렬)

버블정렬(Bubble Sort)버블정렬(Bubble Sort)은 인접한 두 개의 요소를 비교하면서 크기가 작은 요소를 앞으로 이동시키고 큰 요소를 뒤로 이동시키면서 정렬하는 알고리즘이다. 버블정렬의 동작 방식 1. 배열의 첫번째 요소부터 마지막 요소까지 반복하여 인접한 두 요소를 비교한다. 2. 왼 쪽 요소가 오른쪽 요소보다 크면, 두 요소의 위치를 교환한다. 3. 배열의 마지막 요소까지 이동한 후, 가장 큰 요소가 배열의 마지막에 위치하게 된다. 4. 다음 반복에서는 배열의 첫번째 요소부터 마지막에서 두번째 요소까지 인접한 두 요소를 비교하면서 정렬한다. 마지막 요소는 이미 정렬이 완료되었기 때문에 제외한다. 5. 이러한 과정을 배열의 모든 요소가 정렬될 때까지 반복한다. 1~4번 과정을 배열이 정렬될..

JAVA/Algorithm 2023.03.12

[OOP] 객체지향 설계원칙 - SOLID 원칙

SRP(단일 책임 원칙) OCP(개방-폐쇄 원칙) LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙) DIP(의존 역전 원칙) SOLID는 객체 지향 프로그래밍에서 유용한 디자인 원칙의 묶음을 나타낸다. 이들 원칙은 소프트웨어의 설계, 개발 및 유지 보수를 용이하게 하기 위해 사용된다. ⛵️ 단일 책임 원칙 (SRP: Single Responsibility Principle) 클래스는 하나의 책임만 가져야한다. 즉, 클래스는 하나의 기능을 수행하고, 그 기능을 변경할 이유가 하나여야 한다. 예를 들어, 고객 정보를 데이터베이스에 저장하고, 이메일로 고객에게 안내 메일을 보내는 클래스가 있다고 가정해보면, 이 클래스는 두 가지 기능을 수행하므로 SRP 원칙을 위반한다. 이 경우, 이 두 가지 기능을..

[Spring] Service ServiceImpl 구조를 사용하는 것이 바람직한가

public interface MemberService{ Boolean singUp(); } public class Member implements MemberService { @Override public Boolean singUp() { return true; } } SpringMVC 구조로 개발 할 때 Service단을 Service, ServiceImpl 즉 인터페이스와 구현체로 구분하여 개발을 했었는데 오픈 소스를 분석하는 도중 Service단을 인터페이스-구현체 구조가 아닌 Service 클래스를 단일로 사용하는 구조가 많이 보였다. Spring Framework에서 Service와 ServiceImpl 구조를 사용하는 이유는 무엇일까? 1. 인터페이스와 구현 클래스를 분리할 수 있다. 이를 ..

Spring 2023.03.12

[GitHub] Mac 터미널 GitHub Repository 연동

IDE에서 직접 Git을 사용하는 방법이 아닌 터미널을 통해 git 명령어를 사용하고 GitHub에 연동하기 로컬 디렉토리와 Git Hub 레포지토리 연동 1. 연동할 본인 Git Repository 주소 복사 2. 터미널을 이용해 Git Repository를 관리할 폴더로 이동 3. 레포지토리(원격저장소) 연결 : git init 4. main 브랜치로 이동 : git checkout 'main' 작업 후 레포지토리에 파일 업로드 1. txt 파일 생성 2. 현 디렉토리 모든 파일 staging 추가 : git add . 3. 현재 git 상태 확인 : git status 4. 커밋 : git commit -m '커밋 메세지' 5. git hub 최초 업로드 : git push -u origin mai..

Programming/etc 2023.03.05

[Spring Batch] 스프링 배치 주요 기능 및 스키마 생성

Spring Batch 소개 - 운영에 필수적인 강력한 배치 애플리케이션을 개발할 수 있도록 설계된 가렵고 포관적인 배치 프레임워크 - 로깅 및 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기 및 리소스 관리를 포함하여 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공 한다. 배치 핵심 패턴 Read - 데이터베이스, 파일, 큐에서 대량의 데이터를 조회 Process - 특정 방법으로 데이터를 가공 Write - 데이터를 수정된 양식으로 다시 저장 배치 주요 기능 - 배치 프로세스를 주기적으로 커밋 - 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리 - 실패 후 수동 또는 스케쥴링에 의한 재시작 - 의존관계가 있는 step 여러 개를 순차적으로 처리 - 조건적 Flow..

Spring/Spring Batch 2023.02.05

[Docker] Docker 사용하여 MySql 설치

도커 설치 1. homebrew 이용하여 도커 설치 brew가 아닌 brew cask 사용 시 docker-compose, docker-machine을 같이 설치해줌 brew cask install docker 2. 도커 홈페이지에서 OS에 맞는 도커 설치 https://www.docker.com/products/docker-desktop/ MySql Docker 이미지 다운로드 docker pull mysql - 버전을 지정하지 않으면 최신 버전 다운로드 다운로드한 Docker 이미지 확인 docker images MySql Docker 컨터이너 생성 및 실행 docker run --name -e MYSQL_ROOT_PASSWORD= -d -p :3306 mysql:latest docker run --..

Linux/docker 2023.02.05

[Effactive Java] 불필요한 객체 생성을 피하라 - 6

다음과 같은 세 가지 경우에서 불필요한 객체 생성을 피하자 문자열 정규식, Pattern 오토박싱(auto boxing) 문자열 JVM은 내부적으로 문자열을 해시맵 풀에 담아두고 어디선가 동일한 문자열을 참조하면 만들어 놓은 풀에서 참조하는 방법으로 재사용하고 있다. 그렇기에 문자열 생성에 new String("hello")를 사용한다면 불필요한 객체를 생성하게 된다. 사실상 동일한 객체라서 매번 새로 만들 필요가 없다. new String("자바")을 사용하지 않고 문자 리터럴 ("자바")을 사용해 기존에 동일한 문자열을 재사용하는 것이 좋다. public class Strings { public static void main(String[] args) { String hello1 = "hello"; ..

JAVA/Effective 2023.01.08
728x90
반응형