자료형과 객체 비교
Q. 자바에서 기본 자료형은 null
을 허용하지 않지만, 참조 자료형은 null
을 허용합니다. 이 차이에 대해서 설명해주세요.
null
을 허용하지 않지만, 참조 자료형은 null
을 허용합니다. 이 차이에 대해서 설명해주세요.기본 자료형인 int
, float
, boolean
등은 메모리에 직접 값을 저장하기 때문에 null
을 가질 수 없습니다. 반면에, 참조 자료형은 객체의 메모리 주소를 저장하는 변수이므로, 객체가 생성되지 않거나 특정 객체를 참조하지 않을 때 null
을 가질 수 있습니다. 이때, null
은 참조가 없음을 나타냅니다.
Q. 기본 자료형과 관련된 Wrapper
클래스가 있는데, 이것이 무엇이며 null
을 사용할 수 있는 이유는 무엇인가요?
Wrapper
클래스가 있는데, 이것이 무엇이며 null
을 사용할 수 있는 이유는 무엇인가요?Wrapper
클래스는 기본 자료형을 객체로 감싸는 클래스입니다. 예를 들어, int
는 Integer
, boolean
은 Boolean
과 같은 Wrapper
클래스가 있습니다. 이들은 참조 자료형이기 때문에 기본 자료형과 달리 null
을 가질 수 있습니다. 따라서, Wrapper
클래스를 사용하면 기본 자료형의 값을 객체로 다루면서 null
도 허용할 수 있습니다.
Q. 자바에서 equals
메서드는 무엇이며, 왜 오버라이딩이 필요한가요?
equals
메서드는 무엇이며, 왜 오버라이딩이 필요한가요?euqals
메서드는 두 객체가 논리적으로 같은지를 비교하는 메서드입니다. 기본 구현은 두 객체의 참조 주소를 비교하여 같은 객체인지 확인하지만, 객체의 논리적 동등성을 비교하려면 이 메서드를 오버라이딩해야합니다. 예를 들어, String
클래스에서는 문자열의 내용이 같은지를 비교하도록 equals
메서드가 오버라이딩 되어 있습니다.
Q. equals
메서드를 오버라이딩할 때 hashCode
꼭 같이 오버라이딩 해야할까요? 안하면 어떤 문제가 발생하나요?
equals
메서드를 오버라이딩할 때 hashCode
꼭 같이 오버라이딩 해야할까요? 안하면 어떤 문제가 발생하나요?네, equals
메서드를 오버라이딩할 때는 hashCode
도 반드시 같이 오버라이딩해야 합니다. 그렇지 않으면 해시 기반 컬렉션 예를들어 HashMap
, HashSet
등 에서 문제가 발생할 수 있습니다. equals
메서드가 논리적으로 같은 객체를 동일하게 판단하도록 오버라이딩되었지만, hashCode
가 오버라이딩되지 않으면, 동일한 객체가 서로 다른 해시 코드를 가지게 될 수 있습니다. 이로 인해 해시 기반 컬렉션에서 동일한 객체가 다르게 취급되어, 객체를 제대로 찾지 못하거나 중복 삽입이 발생하는 등의 문제가 생길 수 있습니다. equals
와 hashCode
의 일관성은 이러한 컬렉션이 올바르게 동작하는 데 필수적입니다.
Last updated