본문 바로가기

IT/JAVA

(5)
부동 소수점과 JAVA 실수형(float, double)의 오차 해결에 대해서 실수를 표현하는 방식은 고정소수점 방식과 부동소수점 방식이 있습니다. 고정소수점 방식(Fixed Point)은 [부호 | 정수부 | 소수부]로 나타냅니다. 고정소수점은 소수점이 고정되어 있고, 실수를 2진수로 변환한 값을 그대로 대입하는 방식입니다. 부동소수점 방식(Floating Point)은 [부호 | 지수부 | 가수부]로 나타냅니다. 실수를 표현할 때 소수점의 위치를 고정하지 않고 형태에 맞게 소수점을 나타내는 방식입니다. (정규화 과정) 고정 소수점 방식의 경우 구현하기 편하지만, 정수부와 소수부의 자릿수가 작아 표현할 수 있는 범위가 제한적입니다. (만약, 10비트를 표현할 수 있던 자료형의 5자리를 소수부에 나눠준다면 수의 범위는 정수부 기준 5자리 밖에 되지 않게 됩니다.) 반면, 부동 소수..
JAVA 기본 자료형의 종류와 크기에 대해서 변수란 하나의 값을 저장할 수 있는 메모리 공간입니다. 변수에는 기본 자료형과 참조 자료형이 있습니다. 기본 자료형은 값 자체를 가지고 있는 변수를 의미하고 참조 자료형은 주소값을 가지고 있는 변수를 의미합니다. 오늘은 기본 자료형에 대해 알아보겠습니다. 기본 자료형 종류와 크기 JAVA의 기본형은 총 8가지로 byte, short, int, long, float, double, char, boolean이 있습니다. 종류/크기 1byte 2byte 4byte 8byte 정수형 byte short int long 실수형 float double 문자형 char 논리형 boolean int와 double은 각각 정수형과 실수형의 default 타입입니다. 표현 범위 1byte = 8bit 이고, 1bit로 나..
인터페이스(Interface)와 추상 클래스(abstract class) 비교 및 사용 시기에 대해서 추상화란 클래스 간의 공통된 부분을 일반화한 것을 의미합니다. 오늘 설명하고자 하는 인터페이스와 추상화 클래스는 둘 다 추상화 개념을 가지고 있습니다. 이는 추상화 메소드를 사용함으로서 보여집니다. 추상화 메소드 추상화 메소드란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다. 그래서 상속받는 클래스들의 공통된 부분을 추상화 메소드로 나타내고, 상속받는 클래스가 강제적으로 추상 메소드를 구현하게 만듭니다. 강제성을 부여하는 이유? - 클래스들의 공통된 필드와 메소드의 이름을 통일하기 위해서 - 클래스들의 공통사항을 한 곳에서 관리할 수 있어 개발 및 유지보수가 편리해지기 때문에 따라서 구현은 자식 클래스에서 이뤄지므로 추상 메소드는 다음과 같은 문법으로 선언만 됩니다. abst..
GC (Garbage Collection)의 동작 방식에 대해서 GC(Garbage Collection)는 Java에서 메모리를 자동으로 관리하는 기능입니다. 따라서 자바는 메모리를 명시적으로 해제하지 않습니다. GC가 알아서 해주기 때문입니다. GC는 JVM의 Heap 영역에 존재하고 있습니다. 그리고 Heap 영역은 객체들이 저장되는 곳이므로 GC는 객체를 관리하는 것이라고 할 수 있습니다. Heap 구조 그렇다면 먼저 GC가 관리하는 Heap의 구조에 대해 살펴보겠습니다. JVM의 Heap 영역은 처음 설계될 때 다음을 전제로 설계되었습니다. - 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다 - 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다. 이 전제들은 JVM GC 설계자들이 대부분의 객체가 생겨나자마자 쓰레기가 된다는 것을 ..
JVM의 메모리 구조에 대해서 JVM이란 JVM이란 Java Virtual Machine의 약자로, Java 프로그램을 실행하기 위한 프로그램입니다. JVM은 어느 플랫폼(OS)에서든 Java 프로그램을 사용할 수 있게 해주는 특징을 가지고 있습니다. 즉, Java가 플랫폼에 독립적일 수 있는 이유가 JVM 때문인데, 그림과 같이, 일반적으로 하드디스크에서 메모리(RAM)로 데이터를 올릴 때, 운영체제(OS, Operating System)가 관여하게 됩니다. 그래서 일반 애플리케이션은 OS에 의존적이게 되어 다른 OS에서 사용하려면 같은 코드라도 그 OS에 맞게 변경되어야 합니다. 그러나 JVM은 OS에게 메모리를 할당받음으로써 아예 메모리의 일부를 차지해 직접 관리하게 됩니다. Java는 JVM 위에서 JVM과 상호작용을 하면 되..