Back-end139 왜 float과 double은 == 연산을 사용하면 안될까? float 과 double float과 double은 부동소수점 데이터 타입으로, 이진 부동 소수점을 표현해 실수를 표현합니다. 이러한 데이터 타입은 이진 부동 소수점의 한계로 인해 정확한 비교가 어려울 수 있습니다. 따라서 == 연산자를 사용하여 부동 소수점 값을 비교할 때 문제가 발생할 수 있습니다. 부동 소수점이란? 부동소수점은 실수를 컴퓨터에서 근사적으로 표현하기 위한 방법 중 하나입니다. 컴퓨터는 이진수 체계로 데이터를 처리하는데, 실수를 표현하기 위해 이진 부동소수점 형식을 사용합니다. 부동 소수점은 소수점이 고정되어 있지 않고 좌우로 움직일 수 있다는 뜻을 말합니다. 즉, 소수점을 자유롭게 움직일 수 있어 표현할 수 있는 수의 범위가 매우 넓어집니다. 부동 소수점은 소수를 부호, 지수부, 가.. 2023. 8. 16. Primitive Type vs Wrapper Class + Wrapper Class 동일성 비교 Primitive Type Primitive Type은 정수, 실수, 문자, 논리 등의 실제 데이터 값을 저장하는 타입입니다. 실제 값을 저장하므로, stack 메모리에 저장됩니다. 또한, 비객체 타입이기 때문에 null 값을 가질 수 없습니다. 스택 메모리에 저장되는 이유는 메모리 관리의 효율성 때문입니다. primitive type은 기본 데이터 타입으로 크기가 고정되어 있으므로, 해당 크기만큼의 공간을 할당하고, 해당 공간에 직접 값을 저장하는 것이 간단하고 효율적입니다. Wrapper Class 기본 자료 타입(Primitive)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스라고 합니다. 즉, 객체로 래핑하며, 객체 지향적인 기능을 활용할 수 있도록 합니다. 왠만하면 primtive ty.. 2023. 8. 16. 동일성 vs 동등성 동일성(identity) 두 개의 객체나 값이이 메모리에서 동일한 위치를 참조하고 있는지를 비교하는 개념입니다. 완전히 같다는 것은, 두 객체를 하나의 객체로 봐도 무방하며, 주소값 또한 같기 때문에 같은 객체를 가리키는 것입니다. Primitive 타입은 객체가 아니라 주소가 없으므로 == 연산자를 사용했을 때 내용이 같으면 동일하다라고 말할 수 있습니다. 왜 primtive type은 주소가 없을까요?(링크) 즉, 자바에서 동일성은 == 연산으로 판단합니다. 동등성(Equality) 동등성은 두 개의 객체나 값이 내용적으로 같은지 비교하는 개념입니다. 즉, 변수가 참조하고 있는 객체의 주소가 서로 다르더라도 내용만 같으면 두 변수는 동등하다고 이야기 할 수 있습니다. 만약 동일하면 동등을 만족하지만,.. 2023. 8. 16. static vs static final vs final In Java 일단 자바에서 위 키워드의 기능이 아닌 메모리 관점에서 정리해보자고 한다. static int x = 3; static final int y = 5; 위 둘의 차이점이 뭘까? 대표적인 차이점은 final 키워드 유무 차이이다. 그럼 final 유무 차이는 뭘까? final 키워드가 붙지 않은 x는 값을 수정할 수 있고, final 키워드가 붙은 y는 값을 재할당 불가능하다. 위에 정보는 자바 공부를 했다면 금방 알 수 있을 것이다. 하지만 메모리 관점에서 봐보자. 둘은 어떻게 저장될까? 먼저 Java의 컴파일 과정 간단하게 알아보자 Java 컴파일러를 통해 .java 파일을 .class 파일로 변환한다. 해당 class 를 참조할 때 클래스로더를 통해 JVM의 메모리에 로딩한다. (class 정보를 JV.. 2023. 8. 15. 2023.08.13 TIL Java 익명 클래스 메서드의 매개변수로 인터페이스를 받는다고 가정하면 다음과 같다. public void method(TestInterface test){ ... } 만약 기존 방법으로 사용하려면 다음과 같이, TestInterface 구현체를 만들어서 매개변수로 전달하여야 한다. public class TestInterfaceImpl implements TestInterface { ... } 만약 저 메서드가 일회용이라 가정하면, 딱 한번 사용하기 위해 클래스를 만들고, 메모리에 올려야 한다. 익명 클래스를 이용하면 구현체를 만들지 않고도 매개변수로 바로 전달할 수 있다. 익명 클래스를 사용하면 재사용 하지 못하고, 딱 1번만 사용이 가능하다. 그 후 어떠한 참조도 하지 못하게 된다. method(n.. 2023. 8. 13. 왜 enum(열거형)을 상속하지 못할까? 공부를 하다가 enum 상속을 막은 이유와 어떻게 컴파일러 단에서 막는지 궁금해서 찾아보았다. Enum 클래스는 왜 상속이 안될까? Java에서 enum 도 결국 클래스이다. 일반 클래스는 상속 받을 수 있다. 근데 왜 enum 클래스는 상속을 통해 확장하지 못할까? 왜 상속을 막은거고, 어떤 방식으로 막을까? enum을 컴파일하면 Java 컴파일러를 통해 내부적으로 다음과 같이 된다. 열거형을 추상 클래스 java.lang.Enum의 하위 클래스로 만든다. 즉, java.lang.Enum을 상속받는다. 열거형을 final 클래스로 컴파일한다. Java 에서는 클래스에 final 키워드를 붙이면, 상속이 불가능하다. 만약 상속이 가능하더라도, Enum 클래스를 최종적으로 상속하게 되는데, 이중 상속이 발.. 2023. 8. 13. 이전 1 ··· 5 6 7 8 9 10 11 ··· 24 다음