분류 전체보기
-
[Java] ConcurrentHashMap 이란 무엇일까?Language/Java 2021. 2. 11. 20:44
들어가기 전에 HashTable, HashMap, ConcurrnetHashMap은 많이 유사한 특징들을 가지고 있습니다. 하지만 세부적으로 보면 조금씩 꽤나 차이가 있는데요. 간단하게 어떤 차이가 있는지 알아보면서 시작하겠습니다. Hashtable 클래스 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { public synchronized int size() { } @SuppressWarnings("unchecked") public synchronized V get(Object key) { } public synchronized V put(K key, V value) { } } Hashta..
-
[Java] 직렬화(Serialization)란 무엇일까?Language/Java 2021. 1. 30. 01:39
Serializable에 대해서 알아보기 직렬화라는 용어에 대해서 들어만 보고 공부해본 적은 없는데 이번 기회에 정리를 하게 되었습니다,, 이번 글에서는 직렬화에 대해서 알아보겠습니다. public interface Serializable { } Serializable의 인터페이스를 보면 메소드가 하나도 없는 것을 볼 수 있습니다. 아무런 구현해야 할 메소드도 없는 이 인터페이스가 도대체 왜 있는 것일까요? 개발을 하다 보면 아래와 같은 경우가 존재합니다. 생성한 객체를 파일로 저장할 일이 있을 수도 있습니다. 저장한 객체를 읽을 일이 생길 수도 있습니다. 다른 서버에서 생성한 객체를 받을 일도 생길 수 있습니다. 이럴 때 꼭 필요한 것이 Serializable 입니다. 우리가 만든 클래스가 파일에 읽거..
-
백준 2110번 공유기 설치 (Java)Baekjoon 2021. 1. 27. 23:10
문제 링크는 여기이고 풀이에 대해서 정리를 해보겠습니다. 문제를 보았을 때, 집의 좌표가 10억까지 가능한 것을 볼 수 있습니다. 굉장히 큰 값이라 그냥 탐색으로는 안될 거 같고 이진탐색으로 해결을 해야 할 것 같습니다. 1. 입력 받기 처음에 입력은 정렬된 순서로 주지 않기 때문에 정렬을 해서 위와 같이 만들었습니다. 그리고 우리가 구해야할 것은 공유기를 설치할 수 있는 집 사이의 최대 거리이기 때문에 이진탐색으로 조건을 걸어서 탐색을 해보겠습니다. 집 사이의 최대거리는 9 - 1 = 8 입니다. 집 사이의 최소거리는 2 - 1 = 1 입니다. 위의 경우라면 집마다 거리가 1 ~ 8 사이일 것이고, 각 거리들 마다 문제에서 준 공유기의 개수만큼 설치할 수 있는지 여부를 판단해야 합니다. 그러면 최대 G..
-
[Java] Generic Type erasure란 무엇일까?Language/Java 2021. 1. 26. 16:55
들어가기 전에 이번 글에서는 Generic Type erasure에 대해서 알아보겠습니다. 저에게는 쉽지 않은 내용입니다 ㅠㅠ 하지만 중요한 내용이니 정리를 열심히 해보겠습니다. 제네릭 은 JDK 1.5에 도입되었습니다. 제네릭을 공부해보셨으면 확실히 버그에 대한 처리와 좀 더 안정적이고 편리하게? 개발을 할 수 있다는 것을 느낄 수 있었을 것입니다. 이렇게 제네릭이 5버전 부터 나왔기에, 하위 버전과의 호환성 유지를 위한 작업이 필요했습니다. 따라서 코드의 호환성 때매 소거(erasure) 방식을 사용하게 됩니다. 제네릭과 배열의 차이를 2가지만 간단하게 알아보면서 소거방식에 대해 정리해보겠습니다. 첫 번째 배열은 공변이고, 제네릭은 불공변입니다. 저번 글에서도 정리한 적이 있는데요 한번 더 정리하고 ..
-
[Java] equals()를 재정의 하려거든 hashCode()도 재정의 해야 하는이유Language/Java 2021. 1. 26. 12:30
들어가기 전에 자바에서는 equals를 재정의하려거든 hashCode도 재정의해라 라는 말이 있습니다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet과 같은 컬렉션의 원소로 사용할 때 문제를 일으킨다고 합니다. 왜그럴까요? 먼저 Object 명세에서 발췌한 규약부터 알아보겠습니다. Object 명세에서 발췌한 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 합니다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없습니다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCo..
-
[Effective Java] 아이템2: 생성자에 매개변수가 많다면 빌더를 고려하라Book/Effective_Java 2021. 1. 26. 10:45
아이템2 : 생성자에 매개변수가 많다면 빌더를 고려하라 앞서 보았던 정적 팩토리 메소드와 생성자에는 똑같은 제약이 하나 있습니다. 바로 선택적 매개변수가 많다면 적절히 대응하기가 어렵다는 것입니다. 예를들어, 식품 포장의 영양정보를 표현하는 클래스에 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리와 같은 필수 항목과 총 지방, 트랜스지방, 포화지방. . . . 등 총 20개가 넘는 선택항목이 있다고 생각해보겠습니다. 이러한 클래스를 생성자 or 정적 팩토리를 사용한다면 어떻게 할 수 있을까요? 하나씩 알아보겠습니다. 대안A) 점층적 생성자 패턴(telescoping constructor pattern)을 사용해보겠습니다. 점층적 생성자 패턴이란 쉽게 말하면 매게변수가 2개인, 3개인, 4개인 . ...
-
[Java] ArrayList와 Vector 클래스의 차이는?Language/Java 2021. 1. 26. 00:26
Vector 클래스와 ArrayList 클래스 차이는? Vector 클래스는 자바 컬렉션 프레임워크가 나오기 전부터 있던 클래스입니다. 그리고 ArrayList 클래스는 Vector 클래스의 단점을 보완하기 위해서 나온 클래스입니다. 이번 글에서는 두 클래스가 어떤 차이가 있는지 알아보겠습니다. Vector 클래스란? public class Vector extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { protected Object[] elementData; protected int capacityIncrement; public Vector(int initialCapacity, int capacityI..
-
[Effective Java] 아이템1: 생성자 대신 정적 팩토리 메소드를 고려하라Book/Effective_Java 2021. 1. 26. 00:25
아이템1: 생성자 대신 정적 팩토리 메소드를 고려하라 클래스의 인스턴스를 얻는 전통적인 방법은 public 생성자를 이용하는 것입니다. public class Test { private String name; public Test(String name) { this.name = name; } public static void main(String[] args) { Test test = new Test("Gyunny"); } } 위의 코드를 보면 Test 클래스의 생성자를 이용해서 객체를 생성한 것을 볼 수 있는데 이것이 public 생성자를 이용해서 객체를 만든 예입니다. 그렇지만 객체를 만들 때 프로그래머는 생성자의 매개변수만을 보고 어떤 객체가 반환될 것인지 예측하기가 쉽지 않습니다. 그래서 이러한 ..