Java / / 2024. 7. 8. 17:27

Key Concepts of Hash Tables, Inheritance, and Object Copying

🔍 Hash Table (또는 Hash Map)

 

해시 테이블은 키를 값에 매핑하는 효율적인 데이터 구조로, 해시 함수를 사용하여 데이터를 빠르게 검색하고 저장할 수 있습니다.

 

📌 주요 구성 요소:

 

1. 해시 함수(Hash Function):

키를 배열의 인덱스로 변환합니다.

좋은 해시 함수는 충돌을 최소화하고 키를 고르게 분포시킵니다.

2. 버킷(Bucket) 또는 슬롯(Slot):

배열의 각 요소로, 각 버킷에는 키-값 쌍이 저장됩니다.

3. 충돌 처리(Collision Handling):

충돌이 발생하면 다른 위치에 데이터를 저장하는 방법입니다.

**체이닝(Chaining)**과 **개방 주소법(Open Addressing)**이 대표적인 방법입니다.

 

🔄 충돌 처리 방법:

 

1. 체이닝(Chaining):

충돌된 데이터를 링크드 리스트로 연결하여 같은 버킷에 저장합니다.

2. 개방 주소법(Open Addressing):

충돌이 발생하면 다른 빈 슬롯을 찾아 저장합니다.

선형 탐사(Linear Probing), 이차 탐사(Quadratic Probing), 이중 해싱(Double Hashing) 등이 있습니다.

 

🎯 해시 테이블의 장점:

 

빠른 검색: 평균적으로 O(1) 시간 복잡도로 검색, 삽입, 삭제가 가능합니다.

효율적인 메모리 사용: 배열 기반으로 메모리를 효율적으로 사용합니다.

 

⚠️ 해시 테이블의 단점:

 

충돌 문제: 충돌이 많아지면 성능이 저하될 수 있습니다.

해시 함수 설계의 어려움: 좋은 해시 함수를 설계하는 것은 어렵습니다.

메모리 사용의 비효율성: 메모리를 너무 많이 할당하면 공간 낭비가 될 수 있습니다.

 

🧬 Inheritance in Java

 

상속은 자바에서 클래스 간의 관계를 설정하는 중요한 메커니즘으로, 코드 재사용을 용이하게 합니다. 하지만 **생성자(Constructor)**는 상속되지 않으며, super 키워드를 통해 상위 클래스의 생성자를 호출할 수 있습니다.

 

📌 상속된 멤버에 대한 접근:

 

public 및 protected 멤버는 서브클래스에서 상속됩니다.

private 멤버는 상속되지 않으며, 서브클래스에서 접근할 수 없습니다.

 

🎯 서브클래스에서 멤버 숨기기(Hiding)와 섀도잉(Shadowing):

 

하이딩(Hiding): 서브클래스가 상위 클래스의 정적 변수 또는 정적 메서드를 다시 정의할 때 발생합니다.

섀도잉(Shadowing): 서브클래스가 상위 클래스의 인스턴스 변수와 동일한 이름의 변수를 선언할 때 발생합니다.

 

⚠️ 자바에서 다중 상속을 지원하지 않는 이유:

 

**다이아몬드 문제(Diamond Problem)**를 방지하기 위해 자바는 다중 상속을 지원하지 않습니다.

다중 상속으로 인한 복잡성을 줄이고, 코드의 명확성을 유지하기 위함입니다.

 

🛠️ Deep Copy vs Shallow Copy

 

객체를 복사하는 방법에는 **딥 카피(Deep Copy)**와 **셸로우 카피(Shallow Copy)**가 있습니다. 이 두 가지 방법은 객체의 복사 방식과 결과에서 차이를 보입니다.

 

📌 셸로우 카피 (Shallow Copy):

 

모든 필드 값을 복사하지만, 참조 타입 필드는 동일한 객체를 참조하게 됩니다.

기본 제공 메서드 **Object.clone()**을 사용하면 셸로우 카피가 수행됩니다.

 

📌 딥 카피 (Deep Copy):

 

모든 필드 값을 복사하고, 참조 타입 필드도 재귀적으로 복사하여 독립적인 객체를 생성합니다.

딥 카피를 수행하려면 모든 참조 타입 필드에 대해 수동으로 복사를 구현해야 합니다.

 

⚖️ 어느 것을 사용할지 고민되나요?

 

객체의 독립성을 유지해야 한다면 딥 카피를 사용하세요.

그렇지 않다면 셸로우 카피로 충분할 수 있습니다.

 

이제 자바에서 해시 테이블, 상속, 객체 복사에 대한 이해도가 한층 깊어졌기를 바랍니다. 자바 마스터로 가는 길에 이 내용이 도움이 되기를 바라며, 다음 코딩에서 멋지게 활용해보세요! 💻🚀

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유