들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 정리 clone() 메서드를 구현할 때는 많은 고민할 부분이 존재한다. 따라서 인스턴스의 복사가 필요하다면 clone() 대신 생성자 / 팩토리 메서드를 이용하라. 핵심 정리 : 애매모호한 clone 규약 clone 규약 x.clone() != x 반드시 true (clone 된 녀석은 원본과는 다른 인스턴스여야 함.) x.clone().getClass() == x.getClass() 반드시 true (clone 된 녀석은 반드시 같은 클래스여야 함) x.clone().equals(x) == true (True / False 가능) 복사를 했다고 하더라도, 객체를 식별하는 식별자가 달라져야 하는 경우라고 한다면, clone..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 완벽 공략 29. UncheckedException (왜 우리는 비검사 예외를 선호하는가?) Unchecked Exception (언체크 예외) 언체크 예외는 사용하기 편리함. 컴파일 에러를 신경쓰지 않아도 됨. try-catch로 감싸거나, 메서드 선언부에 선언하지 않아도 됨. 예외 종류 UncheckedException : Error + RuntimeException을 상속 받음. CheckedException : 나머지 에러를 상속 받음. Checked Exception 왜 잡지 않은 예외를 메서드에 선언해야 하는가? 메서드에 선언한 예외는 프로그래밍 인터페이스의 일부임. 해당 메서드(API)를 사용하는 클라이언트 코드가 반드..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 완벽 공략 27. 해시맵 내부의 연결 리스트 (내부 구현은 언제든지 바뀔 수도 있다) 자바 8에서 해시 충돌 시 성능 개선을 위해 구현이 변경됨. 내부적으로 동일 버켓에 일정 개수(8개 이상) 이상의 엔트리가 추가되면, 연결 리스트 대신 이진 트리를 사용하도록 변경됨. 자료구조가 변경되면서 탐색 시간은 어떻게 변경될까? 연결 리스트에서 어떤 값을 찾는데 걸리는 시간은? : O(N) 이진 트리에서 어떤 값을 찾는데 걸리는 시간은? : O(logN) 해시 충돌이 발생하지 않는다면 항상 한번만에 버켓에서 값을 찾아온다. 그렇지만 해시 충돌이 많아진다면 버켓에서 값을 찾아오는데 많은 시간이 필요하게 될 것이다. 예를 들어서 버켓이 Link..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 핵심 정리 : HashCode 규약 equals 비교에서 사용하는 정보(필드)가 변경되지 않았다면, hashCode는 매번 같은 값을 리턴해야함. 필드가 변경되거나 어플리케이션을 다시 실행했다면 달라질 수 있음. equals와 hashCode equals가 같으면 → HashCode는 같아야 함. equals가 다르면 → HashCode는 같을 수도 있음. (해시 충돌) 해시 충돌이 많이 발생하면 성능이 떨어질 수 있기 때문에 가급적이면 다른 값을 리턴하도록 하는 것이 좋음. 코드의 구현은 언제든 바뀔 수 있는 것이고, 위 규약을 지키는 hashCode() 메서드를 구현해야 한다. hashCode()는 equals()와 함께 구현되..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 완벽 공략 24. Value 기반의 클래스 값 객체는 클래스처럼 생겼지만, 실제로는 int처럼 동작하는 클래스를 의미한다. 값 객체는 다음 특징을 가진다. 식별자가 없고 불변 객체다. 인스턴스가 가지고 있는 필드 값을 기반으로 equals, hashCode, toString을 구현. (동일한지 판단) == 오퍼레이션이 아니라 equals를 사용해서 동등성을 비교해야 함. ==은 주소를 비교하기 때문임. 동일한 객체는 상호교환 가능하다. 값 객체에는 식별자가 존재하면 안된다. 식별자는 같은 객체로 인식도 되는지를 알려주는 녀석인데, 값 객체는 값이 서로 같으면 같은 객체로 판단하기 때문에 식별자가 있으면 안된다. 값 객체의 동일성은 ..