분류 전체보기
-
[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 생성자를 이용해서 객체를 만든 예입니다. 그렇지만 객체를 만들 때 프로그래머는 생성자의 매개변수만을 보고 어떤 객체가 반환될 것인지 예측하기가 쉽지 않습니다. 그래서 이러한 ..
-
[Effective Java] 아이템11: equals를 재정의하려거든 hashCode()도 재정의하라Book/Effective_Java 2021. 1. 25. 18:58
아이템 11: equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다라고 합니다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet과 같은 컬렉션의 원소로 사용할 때 문제를 일으킨다고 합니다. 다음은 Object 명세에서 발췌한 규약입니다 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 합니다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없습니다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는..
-
[Java] float과 double의 차이는 무엇일까?Language/Java 2021. 1. 25. 17:43
float vs double의 차이는? float과 double 모두 실수를 표현하기 위해 사용하는 자료형이라는 것은 알고 있을 것 입니다. 하지만 정확한 차이가 무엇이냐고 물어본다면 대답하기가 쉽지 않습니다...(애매하게 float은 4byte, double은 8byte다 이정도..) 위에서 볼 수 있듯이 float은 4Byte, double은 8byte 입니다. 실수형 데이터 타입을 다룰 때 중요한 것은 정밀도(precision)입니다. 정수형보다 실수형을 쓰면 훨씬 더 큰 값을 표현할 수 있지만, 오차가 발생할 수 있다는 단점이 있습니다. 유효자릿수가 뜻하는 것은 정밀도를 뜻합니다. 즉, 몇자리 까지 오차없이 표현할 수 있는가입니다. float은 7자리, double은 15~16자리 까지 표현할 수..
-
[Java] HashMap vs Hashtable 차이는 무엇일까?Language/Java 2021. 1. 25. 17:42
Hashtable 이란? Hashtable 클래스는 컬렉션 프레임웍이 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임워의 명명법을 따르지 않습니다. Vector나 Hashtable과 같은 기존의 컬렉션 클래스들은 호환을 위해, 설계를 변경해서 남겨두었지만 가능하면 사용하지 않는 것이 좋습니다. (대신 ArrayList와 HashMap을 사용하는 것이 좋습니다.) Hashtable는 자바에서 해시 테이블을 구현한 클래스 중 가장 오래되었습니다. 그리고 두 번째로 구현한 클래스는 HashMap 클래스입니다. 즉, 일반적으로 hashMap과 사용법이 거의 동일합니다. (예를들면 key - value 형태이고 key는 중복될 수 없고, value는 중복될 수 있다는 특징들 입니다.) public cla..
-
[Java] String vs StringBuilder vs StringBuffer 차이는?Language/Java 2021. 1. 25. 17:39
String 클래스란? 그리고 String 클래스를 보면 final인 것을 볼 수 있습니다. final class는 더 이상 확장할 수 없다는 특징을 가지고 있습니다. 다시 말해서 String 클래스는 다른 클래스의 부모가 될 수 없고, 있는 그대로 써야한다는 뜻입니다. 변경 불가능한(immutable) 클래스 한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없습니다. 어떤 말인지 자세히 알아보겠습니다. public class Test { public static void main(String[] args) { String javaStr = "java"; String android = "android"; javaStr += android; } } 위와 같은 코드를..