전체 글

전체 글

    Java HashSet에서 HashCode를 변경하게 되면...

    Java HashSet에서 HashCode를 변경하게 되면...

    effective java의 item11인 equals 와 hashCode의 재정의에 대해 보던 중 한가지 의문점이 생겼다. HashSet안에 넣은 객체의 equals와 hashCode를 수정하게 됬을때 검색이 되나 .. ? HashSet의 동작방식이 hashCode가 같고 equals가 true로 나오게 되면 가능한 것으로 알고있어서 대충 테스트해보고 되면 넘어가려고 했다. 근데 왠걸... 값과 hashCode를 변경 하면 똑같은 객체로 contains 검색이 안된다. 시나리오는 이랬다. 1. 국어, 수학, 영어 만점을 가진 학생 클래스 (set에 등록) 2. 부정행위로 인해 점수를 반으로 감소시킴 3. 이후 set에 contains로 같은 객체로 존재하는지 hashCode가 변경됬지만 넣어 놓은 객체..

    Java Equals 정의시 getClass() or instanceof

    이펙티브 자바 아이템 10을 읽던 중 의문점이 하나 생겼다. equals를 재정의 하는 다양한 방법들이 있는데 그 중에는 같은 클래스인지 확인하기 위해 getClass 를 사용하는 경우와 instanceof를 사용하는 경우가 있었다. 책에서는 getClass를 통해 먼저 클래스를 확인하고 이후 값을 비교하게 되면 Liskov의 원칙을 위배하게 된다고 한다. 하지만 IDE 에서 자동 equals 생성을 할 시 class Person { String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null |..

    Objects requireNonNull 란?

    Effective Java를 읽던 도중 this.dictionary = Objects.requireNonNull(dictionary); 라는 코드를 읽고 requireNonNull이 궁금해져서 IDE를 통해 구현을 확인했다. @ForceInline public static T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } 확인하고 나니 단순히 Null이면 NPE를 날리는게 무슨 의미가 있는거지 싶어서 찾아보게 됬다. 장점으로는 1. Null-Safe 하게 객체를 사용가능하다. 2. 빠르게 실패를 확인 가능하다. 가 있었다. 먼저, 1번인 Null-Safe야 당연하게 null을 체크하고 난 이후..

    Kubernetes Service (쿠버네티스 서비스)

    Kubernetes Service (쿠버네티스 서비스)

    서비스(Service) : 포드를 연결하고 외부에 노출 사용자들이 포드들의 내부에 접근하기 위해 생성하는 오브젝트 쿠버네티스 리소스를 생성하는 yaml 파일에 containerPort 항목에 개방할 포트를 정하지만 바로 외부로 노출되는 것은 아님. 외부로 노출시키기 위해서는 서비스를 꼭 생성해야함 핵심 기능 여러 개의 포드에 쉽게 접근할 수 있도록 고유한 도메인 이름을 부여 여러 개의 포드에 접근할 때, 요청을 분산하는 로드 밸런서 기능을 수행 클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 포트 등을 통해 포드를 외부로 노출 서비스의 타입 ClusterIP 쿠버네티스 네부에서만 포드들에 접근할 때 사용 외부로 노출시키지 않기 때문에 내부에서만 작동되는 포드들에 적용 NodePort 포드에 접근할 수 있..