Language/Java(11)
-
자바에서 정확한 실수의 표현과 부동 소수점
자바를 공부하다가 정말 이상한 점을 발견했다. 아래의 코드의 출력 결과는 굉장히 충격적이었다. System.out.println(2.0 - 1.1); 나는 자신있게 '0.9' 를 외쳤지만 내 기대와 다른 결과가 도출 됬다. 0.899999999999999 뭐지... 내가 배웠던 수학이 잘못 되었는지에 대해 회의감이 발생하지만 알고나면 내 수학공부 과정이 틀리지 않았음을 알 수 있었다. 오늘의 주제는 자바에서 2.0 - 1.1 의 계산 결과가 0.9가 나오지 않았던 이유에 대해 정리해보려고 합니다. 컴퓨터의 언어 (기계어) 컴퓨터는 내부적으로 0 과 1의 스트림만 이해 할 수 있습니다. 즉, 내가 컴퓨터 한테 '1+1 계산해줘'라고 해봤자 못알아 먹는다는 겁니다. '1+1 계산해줘' 를 2진수 체계로 변환..
2022.01.11 -
Collection이란?
자바에서는 배열을 사용해서 데이터 타입이 같은 데이터들을 하나의 변수로 묶어 관리합니다. 배열의 장점은 많은 양의 데이터를 한 번에 관리할 수 있고 반복문과 결합해 단순 반복적인 효율적으로 처리할 수 있다는 것입니다. 다만, 배열의 단점 또한 존재합니다. 배열을 선언하면 배열의 크기를 초기에 설정하고 이후에 변경이 불가능하다.데이터를 검색하는 과정에서 시간이 많이 걸린다.같은 기본형 데이터 타입의 자료형만 저장할 수 있다.배열의 단점을 보완하기 위해서 Collection이 등장하였습니다. 이번 포스팅에서는 Collection의 개념과 사용법에 대해 정리하려고 합니다.1. Collection 이란?Collection은 간단히 말해 객체들의 집합이자 자료구조를 의미합니다. 객체들을 한 곳에 저장하고 관리하는..
2022.01.10 -
추상 (Abstract) 클래스 와 인터페이스 (Interface)의 사용 목적과 차이점
이번 글에서는 자바에서 사용하는 추상 클래스 (Abstract Class) 와 인터페이스 (Interface) 의 차이점과 두 가지의 사용 목적에 대해 정리를 해보겠습니다. 먼저 추상 클래스의 개념에 대한 정리를 하겠습니다. 1. 추상 클래스 (Abstract Class) 추상클래스는 실체 클래스의 공통적인 부분을 추출해서 선언한 클래스를 의미하며 실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없다. 때문에 실체클래스와의 상속 관계를 통해 사용할 수 있다. 추상화에서 추상화는 클래스간의 공통점을 찾아내서 공통의 부모를 설계하는 작업을 의미합니다. 비유하자면 추상클래스는 미완성 설계도라고 할 수 있다. 자바에서 사용 방법은 다음과 같습니다. [접근 제한자] abstract class [클래스명] ..
2022.01.10 -
Exception (예외) 의 개념과 사용 이유
Exception 은 '예외'라는 뜻이다. Exception에 대해 정리하기 전에 궁금증이 생겼습니다.예외와 오류의 차이는 뭐지? 위의 물음을 해결하고자 예외와 오류의 차이를 먼저 정리하고 가겠습니다. 0. Exception (예외) 와 Error (오류)의 차이 Java Documatation 을 확인해 봐도 Exception과 Error는 다르다고 가지 치기를 해놓은걸 확인할 수 있습니다. 결론부터 말하자면, 예외와 오류의 가장 큰 차이는 발생후 처리 가능성입니다. 그 말인 즉슨, 예외의 경우 프로그램적으로 처리가 가능하기 때문에 일반 개발자가 핸들링이 가능하고, 오류의 경우는 프로그램 자체가 종료될 수 있다는 점과 개발자가 핸들링할 수 없다는 특징이 있습니다. 그럼 좀 더 나아가 예외의 종류에 ..
2022.01.07 -
Wrapper Class 란?
이번 글은 Wrapper Class에 대한 개념과 사용 이유에 대해 정리해 보려고 합니다. 'wrapper'라는 말의 의미는 '감싸다' 라는 뜻으로 랩으로 음식을 감싸는 것을 연상할 수 있습니다. 그럼 이제 궁굼한건 "뭘 감싸는 거지?" 라는 물음이 생기실 겁니다. 결론적으로 말하자면 Primitive type 변수를 감싸는 겁니다. 그럼 이어서 'Primitive type 변수'는 뭔지에 대한 물음이 생기실 겁니다. Wrapp Class에 대한 자세한 내용을 알기 전에 Primitive type에 대한 개념 정리를 먼저 하겠습니다. 1. 자바의 데이터 타입의 종류자바에서는 데이터 타입이 크게 두가지, 원시타입(Primitive type)과 참조타입(Reference Type) 이 있습니다. - 원시 타..
2022.01.07 -
static의 사용 이유와 스레드(thread)의 대한 개념
1. JVM의 메모리 구조 JVM의 메모리 구조에는 여러 영역이 있지만 static, stack, heap 영역 3가지 공간에 대한 정리를 하려고 합니다. 구체적인 JVM의 메모리 구조에 대한 정리는 링크를 참고해주시면 될 것 같습니다. JVM의 구조를 간단하게 정리하자면 다음과 같습니다. JVM의 메모리 구조는 Stack, Heap, Static 영역이 존재한다.Stack 영역에는 '스택 프레임'라는 용어를 사용하는데 '{'를 만나면 생성되고 '}'를 만나면 사라지게 된다. 기본형 타입 변수의 값들과 Heap 영역에 존재하는 인스턴스를 참조하는 참조값 변수들은 스택 영역에 존재한다. Heap 영역에는 인스턴스가 저장되어 있고 스택영역에 해당 인스턴스를 참조하는 변수들을 이용해 인스턴스를 제어할 수 있다..
2022.01.06