-
[CS/JAVA] Set과 Map의 타입이 Wrapper Class가 아닌 Object를 받을 때 / Vector와 List의 차이 / 제네릭 / 제네릭의 불공변성CS/Java 2025. 1. 23. 23:08
• Set과 Map의 타입이 Wrapper Class가 아닌 Object를 받을때 중복 검사는 어떻게 할건지 설명해주세요.
- hashCode() 메소드를 오버라이딩하여 리턴된 해시코드 값이 같은지 보고, 해시코드 값이 다르다면 다른 객체로 판단하고,
- 해시코드 값이 같으면 equals() 메소드를 오버라이딩하여 다시 비교합니다. 이 두개가 모두 맞으면 중복 객체입니다.
• Vector와 List의 차이를 설명해주세요.
- 벡터는 데이터 삽입 시 원소를 밀어내지만, 리스트는 노드를 연결만 하기 때문에, 삽입 삭제 부분에서 리스트가 시간복잡도의 우위를 가집니다.
- 벡터는 랜덤부분접근이 가능하지만 리스트는 더블링크드리스트(노드가 양쪽으로 연결)로 되어있기 때문에 랜덤 접근이 되지 않습니다. 검색적인 측면에서는 벡터가 우위에 있습니다.
- 벡터는 리스트와 달리 항상 동기화되는 장점이나 단점을 가지고 있습니다. 멀티쓰레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있지만, 단일 쓰레드 환경 일때도 동기화를 하기 때문에 리스트보다 성능이 떨어집니다.
• 제네릭에 대해 설명해주시고, 왜 쓰는지 알려주세요.
- 제네릭은 데이터 타입을 하나로 지정하지 않고, 사용할 때마다 범용적이고 포괄적으로 지정한다는 의미입니다.
- 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있어 에러를 사전에 방지할 수 있습니다.
• 제네릭의 불공변성에 대해 간단히 설명해주세요.
- 제네릭의 불공변성은 타입 안정성을 위한 설계 원칙이며,
- 제네릭 타입이 서로 다른 타입을 가지면 상속관계와 무관하게 서로 다른 타입으로 취급됩니다.
List<Number> numberList = new ArrayList<>(); List<Integer> integerList = new ArrayList<>(); // 잘못된 코드이다. Number는 Integer의 상위 타입이지만, 불공변적으로 서로 대입할 수 없다. numberList = integerList;
- 불공변성을 유연하게 처리하기 위해 와일드카드를 사용할 수 있다.
- <? extends Type>, <? super Type>
* 위 글은 아래 문서를 참고해 작성했습니다.
https://dev-coco.tistory.com/153
신입 개발자 기술면접 질문 정리 - 자바
💡 Java의 특징을 설명해주세요.Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
dev-coco.tistory.com
반응형'CS > Java' 카테고리의 다른 글