자료형과 객체 비교

Q. 자바에서 기본 자료형은 null을 허용하지 않지만, 참조 자료형은 null을 허용합니다. 이 차이에 대해서 설명해주세요.

기본 자료형인 int, float, boolean 등은 메모리에 직접 값을 저장하기 때문에 null을 가질 수 없습니다. 반면에, 참조 자료형은 객체의 메모리 주소를 저장하는 변수이므로, 객체가 생성되지 않거나 특정 객체를 참조하지 않을 때 null을 가질 수 있습니다. 이때, null은 참조가 없음을 나타냅니다.


Q. 기본 자료형과 관련된 Wrapper 클래스가 있는데, 이것이 무엇이며 null을 사용할 수 있는 이유는 무엇인가요?

Wrapper클래스는 기본 자료형을 객체로 감싸는 클래스입니다. 예를 들어, intInteger, booleanBoolean과 같은 Wrapper클래스가 있습니다. 이들은 참조 자료형이기 때문에 기본 자료형과 달리 null을 가질 수 있습니다. 따라서, Wrapper 클래스를 사용하면 기본 자료형의 값을 객체로 다루면서 null도 허용할 수 있습니다.


Q. 자바에서 equals 메서드는 무엇이며, 왜 오버라이딩이 필요한가요?

euqals 메서드는 두 객체가 논리적으로 같은지를 비교하는 메서드입니다. 기본 구현은 두 객체의 참조 주소를 비교하여 같은 객체인지 확인하지만, 객체의 논리적 동등성을 비교하려면 이 메서드를 오버라이딩해야합니다. 예를 들어, String 클래스에서는 문자열의 내용이 같은지를 비교하도록 equals 메서드가 오버라이딩 되어 있습니다.


Q. equals 메서드를 오버라이딩할 때 hashCode 꼭 같이 오버라이딩 해야할까요? 안하면 어떤 문제가 발생하나요?

네, equals 메서드를 오버라이딩할 때는 hashCode도 반드시 같이 오버라이딩해야 합니다. 그렇지 않으면 해시 기반 컬렉션 예를들어 HashMap, HashSet 등 에서 문제가 발생할 수 있습니다. equals 메서드가 논리적으로 같은 객체를 동일하게 판단하도록 오버라이딩되었지만, hashCode가 오버라이딩되지 않으면, 동일한 객체가 서로 다른 해시 코드를 가지게 될 수 있습니다. 이로 인해 해시 기반 컬렉션에서 동일한 객체가 다르게 취급되어, 객체를 제대로 찾지 못하거나 중복 삽입이 발생하는 등의 문제가 생길 수 있습니다. equalshashCode의 일관성은 이러한 컬렉션이 올바르게 동작하는 데 필수적입니다.

Last updated