[Java] String은 왜 느릴까? StringBuilder와 가변 배열의 비밀
·
알고리즘
1. String은 왜 느릴까알고리즘 문제를 풀때 String 객체에 + 연산을 하면 왜 메모리 초과나 시간 초과가 나는걸까?String은 char[]로 이루어져 있다(Java 9 이상부터는 byte[]).그리고 final 키워드 때문에 수정이 불가하며 수정을 원하면 매번 새로운 배열 객체를 생성해야한다. 그럼 + 연산자는 어떻게 구현되는 것일까매번 새로운 String 객체를 만들어내는것이다. 이것이 메모리 초과와 시간 초과의 원인이다. 이로인해 많은 비효율이 발생했고, 이를 해결하기 위해 StringBuilder가 탄생했다.StringBuilder는 수정가능한 가변 배열(Dynamic Array)을 사용한다. 가변 배열을 구현해봤다.public class MyDynamicArray { privat..
Jenkins와 Docker Compose를 이용한 Spring Boot CI/CD 구축기(feat. 홈서버)
·
Infra
1. 개요AWS EC2의 프리티어는 메모리가 1GB 정도로 빌드하기엔 어려운 환경이었다. 마침 집에 사용하고 있던 홈서버용 미니pc가 있었기에 무거운 업무는 미니pc에서, docker 이미지만 AWS에 띄워 안정적으로 서비스하는 배포 전략을 계획했다. 인프라 구성: AWS EC2 (Amazon Linux 2023), 홈서버 미니pc(linux ubuntu 24.04.3 LTS)JDK 환경: Java 21.0.9CI/CD 도구: Jenkins (Docker 환경)배포 방식: Docker Compose를 활용한 멀티 컨테이너 배포 (Spring Boot, MySQL, Jenkins 등)네트워크 전략: Cloudflare Tunnel을 활용해 포트 포워딩 없이 보안성이 강화된 외부 접속 허용 파이프라인 시나..
equals와 hashCode
·
Java
내가 만든 객체로 List를 만들었는데 List 내에 중복되는 객체가 있다면 제거하고 싶다고 가정해보자.List peopleList = new ArrayList();people.add(new Person("loopy"))people.add(new Person("loopy"))Set peopleSet = new HashSet(people);if(peopleList.size() != peopleSet.size()) { throw new IllegalArgumentException();} 이 코드를 진행했는데 Exception이 발생하지 않고 다음 코드로 넘어간다. 왜일까?정답은 내가 만든 객체에서 equals와 hashCode 메소드를 재정의(override)하지 않았기 때문이다.  equals와 ha..
스트림(1) - Stream API 개요
·
Java
스트림이란?데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 스트림은 함수형 프로그래밍 언어와 데이터베이스에서 일반적으로 지원하는 연산을 지원한다. 예를 들어 filter, map, find, match, sort 등으로 데이터를 조작할 수 있다. 스트림 연산은 순차적으로 또는 병렬로 실행할 수 있다.  예시를 보자.menu.stream() .filter(dish -> dish.getCalories() > 300) .map(Dish::getName) .limit(3) .collect(toList());  1. 데이터 소스 menu는 연속된 요소를 스트림에 제공한다.2. stream()을 통해 스트림을 얻고3. 데이터 처리 연산(filter, map, limit, collec..
람다, 메소드 참조 활용하기
·
Java
https://poloopy.tistory.com/50 람다 표현식람다 표현식은 메소드로 전달할 수 있는 익명 함수를 단순화한 것이다. 특징익명보통의 메소드와 달리 이름이 없다.함수메소드처럼 특정 클래스에 종속되지 않아 함수라고 부른다.전달람다 표poloopy.tistory.comhttps://poloopy.tistory.com/51 메소드 참조메소드 참조는 람다 표현식을 더 간결하게 작성할 수 있는 기능이다.람다 표현식이 단순 기존 메소드를 호출하는 경우 사용할 수 있다. 메소드 참조의 기본 구조 클래스 또는 객체 이름이중 콜poloopy.tistory.com 람다와 메소드 참조에 대해 이론적으로 익혔다면 어떤식으로 활용할지 알아보자.좋은 예시로 List API의 sort() 메소드가 있다. sort ..