컬렉션
Hashcode() & equals()
Equals()
- 2개의 객체가 동일한지 검사하기 위해 사용 ->객체가 같은 값을 갖는지 동등성 비교
Hashcode()
- 실행 중에 객체에 유일한 integer값을 반환(heap에 저장된 객체의 메모리 주소를 반환)
- 동일한 객체는 동일한 해시코드를 가져야 한다. 그렇기 때문에 우리가 equals() 메소드를 오버라이드 한다면, hashCode()메소드도 오버라이드 되어야 한다.
- 두 객체가 equals()에 의해 동일하다면, 두객체의 hashCode() 값도 일치해야 한다.
- 두 객체가 equals()에 의해 동일하지 않다면, 두 객체의 hashCode() 값은 일치하지 않아도 된다.
Thread Safe & Synchronized
- 싱글 스레드 프로세스 경우 문제 없지만, 멀티 스레드 프로세스의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 준다. 이때 한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하도록 막는 것을 스레드의 동기화(Synchronized)라고한다.
- 한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게함
- 동기화 없이는 한 스레드가 만든 변화를 다른 스레드에서 확인 못 할 수 있음
- 동기화는 일관성이 깨진 상태를 볼 수 없게 하는 것은 물론 동기화된 메서드나 블록에 들어간 스레드가 같은 락에 보호하에 수행된 모든 이전 수정의 최종 결과를 보여줌
String(불변)/StringBuffer(가변,동기화O)/StringBuilder(가변,동기화X) 문자열 자료형 클래스 비교
StringBuffer vs StringBuilder 클래스 ->문자열을 연산할 때 주로 사용


- String도 연산은 가능하나 공간 낭비와 속도 비교적 느려진다.
StringBuffer 내장메소드

StringBuffer와 비슷한 자료형으로 StringBuilder또한 사용법은 동일하다. 차이점은 StringBuffer는 멀티 스레드 환경에서 안전한 장점이 있고,StringBuilder는 문자열 파싱 성능이 가장 우수하다는 장점이 있다.
Immutable Object
- 객체 생성 후 그 상태를 바꿀 수 없는 객체를 말함. 재할당은 가능하지만, 한번 할당하면 내부 데이터는 변경할 수 없음. 필드가 원시타입일 경우엔 final 사용으로, 참조 타입일 경우엔 추가적인 작업으로 불변 객체 만들 수 있다.
String a = “” vs String a = new String(“”)
- new 연산자를 이용한 객체 생성은 문자열을 위한 메모리가 할당되어 항상 새로운 String 인스턴스가 생성되며 주소값이 전부 다르다.
- “”(리터럴)을 이용하면 기존에 존재하던 것을 재사용 한다. 객체 생성이 아닌, Constant String Pool을 참조한다. 때문에 주소값이 같은 경우도 생긴다.