주니어 자바 개발자를 위한 100가지 질문 중 3,4번째 질문의 포스팅입니다. 두 객체가 동일한 hashCode를 가지면 Equals()가 참일까요? 자바에서 final의 기능은 무엇입니까?
'hashCode'와 Equals()!
지난 포스팅 때 'equals()' 메서드에 대해 이야기했었습니다. 'equals()'는 두 객체를 비교하여 내용이 동일한지 확인하여 내용이 동일할 경우엔 'ture' 그렇지 않을 경우엔 'false'를 반환하는 메서드였습니다. 그렇다면 'hashCode()' 메서드는 무엇일까요? 자바에서 'hashCode()'는 객체의 해시 코드 값을 반환하는 메서드입니다. 이 메서드의 목적은 해시 테이블과 같은 데이터 구조에서 객체를 빠르게 검색할 수 있도록 해시 코드를 사용하는 것입니다. 두 객체의 'hashCode' 값이 같다면, 두 객체는 같은 해시 버킷에 저장될 수 있다는 것입니다. 그렇다면 'equals()'는 객체의 실제 내용을 비교하는 메서드이기 때문에 같은 'hashCode' 값을 가지고 있더라도 언제나 'ture'를 반환하지 않을 수 있습니다.
정리하자면 해시 테이블에서 같은 해시 버킷에 저장되어 같은 'hashCode' 값을 가지고 있을지라도 실제 두 객체의 내용이 다르다면 'equals()' 메서드는 'fasle'를 반환하게 됩니다. 결국 'equals()' 메서드의 따라 반환 값이 결정됩니다.
final의 기능은 무엇일까요?
'final'이라는 단어를 직역하면 '마지막의','최종적인'이라는 뜻을 가지고 있습니다. Java에서도 단어의 뜻처럼 마지막 값 즉 더 이상 변경할 수 없도록 하는 역할을 합니다. 코드의 안정성을 확보할 수 있으며 의도하지 않은 변경이나 오버라이드를 방지하는 역할을 합니다. 'final'은 자바에서 변수, 메서드, 클래스에 적용될 수 있고 각각 다른 목적으로 사용됩니다.
1. 변수일 경우의
● 변수일 경우의 'final'은 상수를 나타냅니다. 한 번 값이 할당된다면 이후 변경할 수 없게 됩니다.
● 주로 값을 변경하지 않고 사용하고자 할 때 사용합니다. ex) 상숫값, 초기화된 값, 인자 값
● 변수를 대문자로 작성합니다.
final int FIN_VALUE = 10;
2. 메서드일 경우의 'final'
● 메서드일 때 'final'은 하위 클래스의 오버라이드를 할 수 없도록 합니다.
● 오버라이드를 막는 이유는 보안성을 강화시키거나 메서드의 동작이 변경되지 못하도록 하기 위해서입니다.
class exmpleParent {
fianl void HelloWolrd() {
System.out.println("final method.");
}
}
class exmpleChild {
//@Override
// void HelloWolrd() [
// System.out.println("overridden method.");
//}
//에러남;
}
3. 클래스일 경우의 'final'
● 클래스일 때 'final'은 상속을 방지합니다. 다른 클래스에서 상속할 수 없습니다.
● 보안 상의 이유로 상속하지 못하게 하려는 경우에 사용됩니다.
<질문 출처>
https://medium.com/@xjpp22/top-100-java-interview-questions-for-1-to-3-years-experienced-programmers-63ad74069cb6
Top 100 Java Interview Questions for 1 to 3 Years Experienced Programmers
containers, multithreading, reflection, object copy, Java Web, exceptional cases, internet, Spring MVC.
medium.com
'개발 > Java' 카테고리의 다른 글
[JAVA] ==와 equals의 차이점은 무엇입니까? (0) | 2023.08.31 |
---|---|
[JAVA] JDK와 JRE의 차이점 (0) | 2023.08.30 |
[Java] 자바 프로그램 에러날 때 (0) | 2022.11.10 |