1 - 40억까지 더하는 코드를 n 개의 스레드로 병렬로 돌아가도록 짜 보세요.각 스레드가 서로 다른 범위를 나눠서 합계를 구하고,main 스레드는 join()으로 모든 스레드가 끝날 때까지 기다리는 방식을 사용합니다. Thread t1 = new Thread(() -> { /* 1 ~ 10억 합 */ });Thread t2 = new Thread(() -> { /* 10억+1 ~ 20억 합 */ });...t1.start();t2.start();t1.join(); // main 스레드는 여기서 대기t2.join();join(): 스레드가 끝날 때까지 main 스레드가 대기하게 만듭니다.이렇게 하면 main 스레드가 모든 작업이 끝난 뒤 결과를 처리할 수 있어요.synchronized 메서드의 동기화 ..
Java에서 HashSet, LinkedHashSet, TreeSet 같은 Set 컬렉션을 보면, 그 내부에 Map이 사용되고 있다.근데 왜 Set인데 Map을 쓸까?Set과 Map, 둘의 차이는?자료구조저장 방식Set값(Value)만 저장 (중복 ❌)MapKey → Value 쌍으로 저장 (Key 중복 ❌)Set: 그냥 값만 저장하고, 중복을 허용하지 않는 게 특징이다.Map: Key로 저장하고, Key 중복을 허용하지 않는다.→ 중복을 막는 핵심은 Key!Set이 Map을 쓰는 이유Set은 값의 중복을 막아야 하는데,Map의 Key 구조를 그대로 쓰면 이게 아주 쉽다!Set에서 값을 저장할 때 → Map의 Key에 값을 저장하고,Value는 그냥 의미 없는 더미 객체를 넣는다.실제 코드 (HashSe..
TreeSet 이란? 중복을 허용하지 않고,자동으로 정렬되는 Set 컬렉션입니다.내부적으로는 TreeMap을 사용하고,TreeMap의 핵심 자료구조가 바로 레드-블랙 트리(Red-Black Tree)이다!이진 탐색 트리란 어떤 문제가 있을까? 이진 탐색 트리는:왼쪽 삽입 순서에 따라 한쪽으로 쏠릴 수 있는 문제가 있다.예시: 오름차순으로 삽입1 → 2 → 3 → 4 → 5 [1] \ [2] \ [3] \ [4] \ [5]이 구조는 거의 LinkedList처럼 변형되어,검색/삽입 성능이 O(log n)에서 O(n)으로 퇴화할 수 있다.레드-블랙 트리(Red-Black Tree)는 어떻게 다른가?레드-블랙 트리는 트리의 균형을 자동으로 맞춰주는 이진 ..
타입 소거 제네릭은 자바 컴파일 단계에서만 사용되고, 컴파일 이후에는 제네릭 정보가 삭제된다. 제네릭에 사용한 타입 매개변수가 모두 사라지는 것이다. 쉽게 이야기하면 컴파일 전인 .java 파일에는 제네릭 타입 매개변수가 존재하지만, 컴파일 이후인 .class 파일에는 제네릭 타입 매개변수가 존재하지 않을 것이다. 타입 매개변수 미제한의 경우 컴파일 전 public class GenericBox { private T value; public void set(T value) { this.value = value; } public T get() { return value; } }...void main() { ..

"이펙티브 자바" 에서도 언급 되듯이, 객체를 생성하고 equals(), hashCode() 메서드는 함께 정의되어야 한다고 한다. 그렇다면 왜(?) 함께 정의되어야 하는 것일까? Object class equals(), hashCode() 모든 객체의 최상위 클래스인 Object 의 equals(), hashCode() 를 생각해보자. equals()Object 의 equals() 에서는 객체의 레퍼런스 값을 비교하게 된다.예를들어, 개발자가 이름 클래스를 생성하고 equals() 를 오버라이딩 하지 않는다면 이름이 같은 인스턴스라도 레퍼런스 값이 다르기 때문에 false 를 반환한다. 때문에, 클래스 의도에 맞는 equals() 를 오버라이딩 하는 것은 중요하다. hashCode()Object 의 h..

Git 브랜치 전략 브랜치 전략이란 여러 개발자가 하나의 저장소를 사용하는 환경에서 저장소를 효과적으로 활용하기 위한 work-flow 이다. 브랜치 생성, 삭제, 병합 등 git 의 유연한 구조를 활용해서, 각 개발자들의 혼란을 최대한 줄이며 다양한 방식으로 소스를 관리하는 역할을 한다. 즉, 브랜치 생성에 규칙을 만들어서 협업을 유연하게 하는 방법론을 말한다 . 만약 브랜치 전략이 없다면? 브랜치 전략이 없을 때 단점은 다음과 같다. 어떤 브랜치가 최신 브랜치지?어떤 브랜치를 끌고와서 개발을 시작해야 하지? 어디에 push 해야하지? 핫픽스를 해야 하는데 어떤 브랜치를 기준으로 수정해야 할까? 배포 버전은 어떤 걸 골라야하지? 가장 널리 사용되는 브랜치 전략은 다음 2가지이다. git-flow 전..

이번 프로젝트를 시작하면서, Github Project 내 Issue 를 만들어 관리를 하고 있습니다. 그런데 회사에서는 SVN 을 사용하다보니, 사용방법이 익숙하지 않아 히스토리가 꼬여버리는 둥 .. 용도에 맞지 못하게 사용하고 있다는 생각이 들었는데요, 이참에 Github Issue & PR 관리에 대해서 한번 정리하는 시간을 갖고자 합니다. Issue 란?이슈(Issue) 란 프로젝트에서 작업해야 할 단위라고 할 수 있습니다. 개발해야야 하는 기능, 수정해야할 버그, 리팩터링 해야 할 코드 등 프로젝트에서 발생되는 작업들을 이슈로 생성하여 관리합니다. 이슈를 생성해 관리한다면, 이슈에 대한 커밋 내역들을 하나의 이슈 페이지에서 관리가 가능하며, 이슈 관련 정보를 한 곳에서 묶어서 관리할 수 있다..

프로젝트 주제 선정 기존 서비스 클론 vs 새로운 서비스 개발 프로젝트 주제를 선정하기 위해 두 가지를 고민해 보았습니다. 새로운 서비스를 만드는 일은 매우 설레고 흥미로운 작업입니다. 그러나 기획부터 개발까지 해야 할 일이 방대해, 개발에만 집중하기에도 부족한 시간에 새로운 서비스 아이디어를 내고 다듬어 개발까지 혼자서 진행하는 것은 무리라고 판단했습니다.(저는 직장인이랍니다.. ㅠ)반면, 기존에 만들어진 서비스를 클론하는 방식은 이미 수많은 아이디어와 결과물이 존재하고, 참고할 수 있는 자료와 Use Case가 많습니다. 혼자서 모든 일을 감당해야 하는 현재 상황에서는 기존 서비스를 클론하는 것이 가장 합리적이라고 생각했습니다.프로젝트 목표이전 글에서 포스팅 한(프로젝트 시작하기) 내용과 같이, 프로..