- ==와 equals의 차이점
==
의 경우 primitive type을 비교하거나 객체의 참조값을 있는 그대로 비교하는 것이고
equals의 경우 객체 내부 필드 또는 속성의 값으로 부터 객체의 동등성을 비교할때 사용되는데 이때 hashCode의 override 또한 필요하다 equals의 경우
- 자기 자신과 equals를 통한 비교에서 항상 참을 반환해야하고
- 두 객체를 비교하는 경우 교환법칙이 성립해야하며
- 3단 논법이 성립해야하고
- equals 내에 기술된 필드가 변경되지 않은 이상 equals의 결과는 변경되어져서는 안된다.
JAVA SE 기술
- Array, LinkedList, ArrayList의 차이점
Array - 배열, 크기를 지정해 주어야 한다
ArrayList - 크기가 정해지지 않아도 되나 순서는 중요하다.
LinkedList - 데이터를 중간에 넣고 뺀다고 해도 이전에 가르킨 값과 다음 값을 가르키던 값만 연결해주면 빠르다
- Call by value와 Call by reference의 차이점
Call By Value의 경우 Parameter로 넘길 때 값이 복사되어 이동한다
Java의 경우 Reference Value는 Stack에 저장, Object 원본 객체들의 경우 Heap에 저장되는데
Parameter를 통해 값이 넝어갈때는 Stack에서 reference value의 복사가 일어나는 것이지 실제 Object 객체 참조값 자체가 넘어가는것이 아니기 때문에 Call By Value이지 Call By Reference는 아니다.
- 자바에서는 call by value와 reference중 어떤 것으로 호출하는가?
이전에 이야기했던것처럼 자바는 Call By Value를 이용한다.
- DAO DTO VO 차이
DAO - Data Access Object
데이터에 접근하기 위한 객체로 DB에 접근하기 위한 로직을 분리하기 위해 사용된다.
직접 DB에 접근하여 DATA의 CRUD를 수행한다.
Model에서 해당 일을 수행한다.
DTO - Data Transfer Object(가변)
계층 간 데이터 교환을 위한 객체를 의미한다 계층간의 데이터 교환을 위해 이용되며 스프링 빈에서는 Hibernate의 Validation이 상황에 따라 다르게 적용하지 못하는 단점을 해결하기 위해 별도의 객체를 만들어서 검증 로직을 적용하는데 이때 만드는게 DTO에 해당한다.
별도의 로직을 가지고 있지 않으며 @Getter와 @Setter 메서드만을 가진다.
VO - Value Object(불변))
Read-Only 속성 / 값 오브젝트 값 타입을 표현하기 위해 사용 @Getter클래스만 존재 (enum)
- equals()와 hashCode()의 차이점
equals()의 경우 객체 필드를 중심으로 값의 동일성을 판단하고
hashcode()의 경우 현재 객체 인스턴스를 나타내는 integer 타입을 반환하는데 재정의하지 않을 경우 Collection Framework를 사용하게 되면 문제가 발생하게 된다.
컬렉션에서는 객체의 논리적 동등을 비교할때 hashCode()의 리턴값을 확인하고 그 값이 같으면 equals()의 리턴값을 확인하게 되는데 hashCode가 오버라이드 되지 않은 경우 다른 값으로 판단하여 중복값이지만 중복값이 아닌것처럼 컬렉션에 들어가버리게 된다.
hashCode()에 대한 내용은 아래를 참조하자. 최적화 관점에서 필요한것으로 보인다.
https://stackoverflow.com/questions/2469282/why-both-hashcode-and-equals-exist
'면접 준비' 카테고리의 다른 글
[학원 면접 준비] 5일차 (0) | 2023.09.11 |
---|---|
[면접준비] 4일차 (0) | 2023.09.10 |
[면접준비] 3일차 (0) | 2023.09.09 |
[면접준비] 2일차 (0) | 2023.09.08 |