개발/Java

[JAVA] 두 객체가 동일한 hashCode를 가지면 Equals()가 참일까요? / 자바에서 final의 기능은 무엇입니까?

개발자 빠미 2023. 9. 5. 18:43

주니어 자바 개발자를 위한 100가지 질문
주니어 자바 개발자를 위한 100가지 질문

 

 주니어 자바 개발자를 위한 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