728x90
반응형
https://board.f-lab.kr/articles/1
자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals() 와 hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?
답 :
equals는 두 객체가 정말 동일한지를 확인합니다. 내부 값이 아닌 정말 참조하는 메모리가 같은지 확인합니다.
hashCode는 참조하고 있는 메모리의 주소를 반환합니다. 즉 equals는 hashCode끼리 비교하는 것과 동일합니다.
hashCode는 객체의 메모리 주소를 리턴합니다.
반론받을 수 있는 답변 : 그럼 우리가 hashCode를 오버라이드 했을때에도 메모리 주소를 리턴하게 할 수 있을까요? 자바에서는 개발자가 직접 메모리에 접근할 수 있나요?
답 : hashCode를 오버라이드 해도 메모리 주소를 리턴하게 할 수 있습니다. hashCode 메서드는 Object 클래스에 존재하는 메서드로 오버라이드를 한후 해당 메서드를 재호출 하면 가능합니다.
자바에서는 개발자가 메모리에 직접 접근할 수 없는 것으로 알고 있습니다.
꼬리질문
hashCode 를 잘못 오버라이딩하면 HashMap 등 hash 콜렉션의 성능이 떨어질 수가 있습니다. 어떤 케이스일 때 그럴 수 있을까요?
HashMap은 내부적으로 어떻게 구현되어있길래 그렇게 빨리 값을 탐색할 수 있을까요?
검색 키워드
•
HashMap 내부 LinkedList
◦
RedBlackTree 관련한 내용도 나오면 좋습니다.
•
IDE를 해용해 HashMap 의 구현 내용 들여다보기
꼬리질문
기존 HashMap 의 시간복잡도는 얼마이고, hashCode 를 잘못 오버라이딩 했을때의 시간복잡도는 얼마일까요?
여기는 제가 모르게써요..... 공부해야지...
StringBuilder 와 StringBuffer 의 차이는 무엇일까요?
답 :
StringBuffer와 StringBuilder의 차이는 동기화 유무로 알고 있습니다.
StringBuffer의 내부 코드에서는 synchronized 키워드를 이용해 multi-thread환경에서도 동기화를 유지하고 있습니다.
반면 StringBuilder는 해당 키워드가 없습니다.
동기화에 대해 고려를 하지 않는 만큼 single-thread에서는 StringBuilder를 사용하여 성능을 높이는 것이 적합하다고 생각합니다.
왜 동기화(synchronized 키워드)가 걸려있으면 느린걸까요?
답 :
synchronized 키워드를 사용하는 경우 동기화를 위해 접근 하는 다른 thread에 lock을 걸어 동기화를 합니다.
싱글 스레드로 접근한다는 가정하에선 StringBuilder 와 StringBuffer 의 성능이 똑같을까요?
답 :
해보니 StringBuffer가 더 빨랐습니다. 왜 그럴까요...
System.out.println 메소드는 현업에서 절대 쓰지 말라고하는 메소드인데요. 그 이유가 무엇일까요?
728x90
반응형
'JAVA' 카테고리의 다른 글
LinkedList와 ArrayList의 remove 연산 (0) | 2023.06.21 |
---|---|
Annotation과 동작 원리 (0) | 2023.01.24 |
내 자바 코드 스타일 바꿔보기, 근데 함수형을 곁들인 - filter (0) | 2022.05.07 |
자바 조금 더 잘 사용해보자 (1) (0) | 2022.03.03 |
짤막한 개발 메모 - watchdog (0) | 2021.11.23 |