Language
-
[Java] equals()를 재정의 하려거든 hashCode()도 재정의 해야 하는이유Language/Java 2021. 1. 26. 12:30
들어가기 전에 자바에서는 equals를 재정의하려거든 hashCode도 재정의해라 라는 말이 있습니다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet과 같은 컬렉션의 원소로 사용할 때 문제를 일으킨다고 합니다. 왜그럴까요? 먼저 Object 명세에서 발췌한 규약부터 알아보겠습니다. Object 명세에서 발췌한 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 합니다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없습니다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCo..
-
[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..
-
[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; } } 위와 같은 코드를..
-
[Java] BigDecimal 클래스란 무엇일까?Language/Java 2021. 1. 25. 17:37
BigDecimal이란? BigDecimal 클래스는 돈 계산과 같이 중요한 작업을 할 때 사용합니다. float, double은 사용하면 안될까요? public class Test { public static void main(String[] args) { double value = 1.0; for (int i = 0; i < 10; ++i) { value += 0.1; System.out.println(value); } } } 위의 코드를 보겠습니다. 결과는 무엇이 나올까요? 2.0이 나올까요? 1.1 1.2000000000000002 1.3000000000000003 1.4000000000000004 1.5000000000000004 1.6000000000000005 1.700000000000000..
-
[Java] String 클래스 문자열 인코딩, 디코딩 과정Language/Java 2021. 1. 25. 17:35
문자열 인코딩, 디코딩 이란? 이번 글에서는 인코딩, 디코딩이란 무엇이고 인코딩, 디코딩 방식에는 어떤 것이 있는지 알아보겠습니다. 인코딩(Encoding)이란? 인코딩(Encoding)이란 문자를 컴퓨터가 이해하기 쉽게 변환하는 과정이라고 생각하면 쉬울 것 같습니다. 디코딩(Decoding)이란? 디코딩(Decoding)이란 일반적으로 암호화되어 있거나 컴퓨터가 이해할 수 있는 값들을 알아보기 쉽게 변환하는 것을 말합니다. 간단히 말하면 인코딩, 디코딩은 위와 같이 정의할 수 있습니다. 그러면 흔히 많이 들어본 UTF-8, UTF-16, EUC-KR 등등은 무엇일까요? 이것이 바로 인코딩 방식입니다. 위의 인코딩 방식에 대해서 알기 위해서는 먼저 아스키 코드, 유니 코드가 무엇인지 알아야 합니다. 많이..
-
[Java] String이 불변 객체인 이유는 무엇일까?Language/Java 2021. 1. 25. 17:25
String이 불변 객체인 이유 String 객체가 불변 객체라는 것은 다들 알고 있을 것입니다. 불변 개체는 완전히 생성된 후에도 내부 상태가 일정하게 유지되는 개체입니다. 즉, 객체가 변수에 할당되면 참조를 업데이트하거나 내부 상태를 어떤 방법으로도 변경할 수 없습니다. 그러면 자바에서는 왜 String을 불변 객체로 만들었을까요? 성능, 동기화, 캐싱, 보안의 이유로 불변 객체로 만들었는데 하나씩 알아보겠습니다. 1. 성능(Performance) 자바에서 문자열은 정말 많이 사용됩니다. 그렇기 때문에 자바에서는 상수 풀이라는 것을 만들었습니다. 상수 풀이 무엇인지 아래 코드를 보면서 알아보겠습니다. public class Test { public static void main(String[] arg..