java 95

java의 HashMap과 해시 충돌(collision) 관련

java의 HashMap과 해시 충돌(collision) 관련 이거랑 이거를 먼저 읽고오는것도 괜찮다. HashMap의 collision 위에 글을 읽으면 알겠지만, hashMap은 key를 해싱시켜 저장한다. 즉 어떤 key가 들어왔을 때에 이를 변환시키게 되고, 당연한 일이지만 이 때에 같은 변환값을 갖는 해시 충돌은 반드시 일어날 수밖에 없다. 그러므로 이를 해결하기 위해 어떤 방식을 도입했는지에 대해 알아본다. -> 해결이란, 충돌을 아예 없애는 것이 아니라 최대한 줄이는 방법이다. 개방 주소법(open addressing) 간단하게 말하면 겹치면 다른곳에 저장하는 것이다. 만약 충돌이 발생하면 다른 주소에 값을 저장하는 식이다. 그리고 이 주소를 찾아가는 알고리즘도 여러 개가 있다. 선형 탐사법..

이론 정리/java 2023.08.23

TreeSet!!

TreeSet!! public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, java.io.Serializable {}TreeSet의 구조를 살펴보면 다음과 같다. 이는 AbstractSet, NavigableSet인터페이스를 구현하여 사용하고 있다. TreeSet은 이름처럼 Tree와 같은 구조를 가지고 원소들을 저장한다. 특징을 나열하자면 중복 불가 원소의 순서 보존되지 않음 집어넣은대로 들어가는게 아니라 알아서 트리 구조로 정렬시킨다. 요소를 오름차순으로 정렬한다. Thread-safe하지 않다. Red-Black-Tree TreeSet은 내부적으로 Red-Black-Tree를 사용하고 있다. 이게 뭘까...? Red-B..

이론 정리/java 2023.02.13

프로토타입 패턴

프로토파입 패턴 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법 복제 기능을 갖추고 있는 기존 인스턴스를 프로토타입으로 사용해 새 인스턴스를 만들 수 있다. 시간이 오래 걸리는 작업(예를 들어 DB에서 데이터를 읽어와서 이걸 토대로 인스턴스를 만들어야 하는 경우, http를 통해 얻은 데이터를 통해 인스턴스를 만드는 경우 등..) 을 할 때에 매번 이를 만드는 것은 리소스와 시간 낭비가 크다. 그렇기 때문에 이렇게 만들어 둔 데이터를 복제해서 새로운 인스턴스를 만들고, 이곳에서 얻어온 정보를 토대로 변경 작업 등을 해주면 더 효율적이게 될 것이다. issue 상황 public class GithubIssue { private int id; private String title; private Gi..

이론 정리/java 2023.01.25

빌더 패턴

빌더 패턴 어떤 인스턴스를 만들 때 다양한 구성으로 만들어 질 수 있는데, 인스턴스를 동일한 프로세스를 통해 만들 수 있게끔 해주는 것이다. 문제 상황 public class TourPlan { private String title; private int nights; private int days; private LocalDate startDate; private String whereToStay; private List plans; public TourPlan() { } public TourPlan(String title, int nights, int days, LocalDate startDate, String whereToStay, List plans) { this.title = title; thi..

이론 정리/java 2023.01.25

직렬화(Serializable)

직렬화(Serializable) public interface Serializable{ } 직렬화용 Serializable 인터페이스 내부를 보면 메소드가 하나도 구현이 안되어있다. 그럼 얘가 뭔 용도가 있을까?? 생성한 객체를 파일로 저장할 때 저장한 객체를 읽을 때 다른 서버에서 저장한 객체를 받아서 사용할 때 이런 식으로, 생성한 클래스를 파일에 읽거나 쓸 수 있도록 하거나 혹은 다른 서버로 보내거나 받을 수 있도록 하기 위해서는 Serializable 인터페이스를 반드시 필요로 한다. 즉 Seriablizable 인터페이스를 통해 JVM은 특정 객체를 저장하고, 읽거나, 다른 서버와 주고받을 수 있게 된다. 이게 뭐길래?? 직렬화 java내부의 객체나 데이터를 외부의 자바 시스템에서 사용할 수 있..

이론 정리/java 2023.01.24

Optional이란??

Optional이란?? Spring Data JPA를 이용해서 개발을 할 때에, find메서드를 사용하면 Optional이 기본적으로 나올 것이다. Optional이 일단 무엇일까?? T타입의 객체를 감싸는 generic 형태의 Wrapper클래스 Optional은 모든 타입의 참조 변수를 담을 수 있다. public final class Optional { private final T value; // T타입의 참조변수 }이런 식으로, 참조 변수들을 그냥 반환하는 것이 아니라, Optional로 한번 감싸서 보내주는 것이다. 이걸 왜 해줄까?? 만약 바로 객체를 보내준다 가정하면 없는 객체를 가져와서 확인하려 하면? 객체 가져옴 객체가 없음 사용하려 한다 에러!! 이렇게 된다. 따라서 보통 객체를 바로..

이론 정리/java 2023.01.19

java 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩, 오버라이딩 오버로딩(Overloading) 메소드 이름이 같지만, 매개변수에 따라 다른 것으로 판단 한번 예를 들어보겠다. 오버로딩 사용 먼저 다음과 같이 메서드를 정의해 준다. class OverloadingMethods { public void ryoochan(Integer iq){ System.out.println("류찬의 아이큐는 " + iq + " 입니다."); } public void ryoochan(String look){ System.out.println("류찬의 외모는 " + look + " 입니다."); } }보다시피 ryoochan은 같은 이름을 가진 메서드인데, 매개변수가 Integer, String으로 각각 다르게 설정되어 있다. public void 오버로딩테스트() ..

이론 정리/java 2023.01.13

java에서 병렬성

java에서 병렬성 일단 이 병렬처리는, 엄청나게 많은 데이터를 처리할 때에 하나로 다 하는것보다 나눠서 처리시켜서 작업 처리 시간을 줄이는 것에 목적이 있다. 참고로 이거 데이터 나누고 / 병렬 쓰레드 만들고 / 다시 합치고 등등...에서 시간을 잡아먹어서 안하느니만 못한 경우도 있다. 그래서 요소가 많을때 주로 한다고 한다. 동시성, 병렬성 일단 동시성이랑 병렬성이 뭔지 좀 알고 넘어가자. 동시성 하나의 코어에서 여러 쓰레드가 작업 동시에 진행되는것이라기 보다는 그냥 빠르게 돌아가면서 실행하는것 병렬성 여러 코어에서 작업을 진행 실제로 여러개의 작업이 병렬적으로 실행되는것 이런 느낌이다. 포크조인 프레임워크 자바 병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인 프레임워크(JVM내부에 있는 프레임워..

이론 정리/java 2023.01.12