본문 바로가기

전체 글333

이펙티브 자바 - 클래스와 멤버 접근 권한 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 개요 어떤 클래스가 잘 설계되었는지 판단할 수 있는 요소에는 여러 가지가 있지만, 그 중 하나는 구현 세부사항을 얼마나 잘 감추었는가이다. 이 규칙을 잘 지키면 각 모듈들끼리는 API 를 통해서만 의사소통하며 구현 세부사항은 각 모듈내부로 제한된다. 이것이 우리가 흔히 말하는 '정보은닉'과 '캡슐화'이다. - 정보은닉 정보은닉은 모듈과 모듈사이의 의존성을 줄여주기때문에 중요하다. 모듈 사이의 의존성이 줄어들면 각각 개발, Test, 최적화, 변경을 손쉽게 할 수 있으며 대규모 시스템을 개발할때 위험(Risk)을 낮춰준다. Java 에서 정보은닉을 구현하려면 클래스, 인터페이스 멤버들에 접근제어자를 사용해야 한다. 정보은닉을 위한 몇 .. 2021. 10. 19.
DDIA - 신뢰성,확장성,유지보수성 - 신뢰성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 과거에는 CPU, RAM 같은 하드웨어 성능이 애플리케이션을 제한했지만, 애플리케이션들이 계산 중심이 아닌 데이터 중심으로 변화하면서 데이터의 양, 복잡도, 변화속도로 관점이 변경되고 있다. 일반적으로 데이터 중심 애플리케이션이 공통으로 필요로 하는 표준 구성요소는 아래와 같다. DB: 구동 App. 및 다른 App. 에서 데이터를 다시 찾을 수 있게 데이터를 저장 Cache: Read 성능 향상을 위한 값 비싼 수행 결과를 기억 Index: 키워드로 데이터를 검색하거나 필터링 제공 Stream 처리: 비동기 처리를 위한 다른 프로세스로 메시지 전송 Batch: 일정 주기로 대량의 누적된 데이터 분석 위의 요소.. 2021. 10. 17.
이펙티브 자바 - Comparable - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Comparable 개요 compareTo 메소드는 Comparable 인터페이스에서 유일한 메소드이며, 여태까지 다루었던 메소드들과는 달리 Object 에 선언되어 있지 않다. compareTo 는 equals 와 특성이 비슷하지만 순서 비교가 가능하며 좀 더 일반적이다. 순서 비교가 가능하므로 검색하거나 최대/최소를 계산하고 정렬 상태를 유지할 수 있는 특징이 있다. Comparable 은 compareTo 메소드 하나만 갖는 간단한 인터페이스이지만 이를 구현하면 다양한 제네릭 알고리즘 및 해당 인터페이스를 사용하도록 설계된 컬렉션 구현체들과도 전부 연동할 수 있어서 매우 강력하다. 따라서 알파벳 순서, 값 크기, 시간 선후관계처.. 2021. 10. 17.
이펙티브 자바 - clone 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Cloneable 인터페이스 Cloneable 은 객체의 복제를 허용한다는 사실을 알려주는 믹스인(mixin) 인터페이스이다. 하지만 문제점이 한 가지 있는데 clone 메소드가 없고 Object 의 clone 메소드의 접근제어자가 protected 라는것이다. 이렇게 되면 clone 메서드가 구현되어있으리라는 보장이 없는데 그럼에도 불구하고 널리 사용되므로 알아둘 필요가 있다. Cloneable 은 protected 접근제어자를 갖는 Object 의 clone 메소드가 어떻게 동작할지를 정하는 역할을 한다. clone 메서드가 정의되어있지도 않은 Cloneable 인터페이스를 도대체 왜 신경써야하는지 의문이 들 수 있다. 그냥 Cl.. 2021. 10. 11.
이펙티브 자바 - toString 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - toString 의 default 구현 toString 을 별도로 재정의 하지 않고 그냥 사용하게 될 경우 기본형은 클래스명@16진수와 같은 형태를 띄게 된다. 프로그램에 특별히 해를 끼치는것은 아니지만 사람이 보기에 그다지 유용한 정보는 아니다. /** * Returns a string representation of the object. In general, the * {@code toString} method returns a string that * "textually represents" this object. The result should * be a concise but informative representation .. 2021. 10. 4.
이펙티브 자바 - hashCode 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - hashCode 재정의의 중요성 equals 를 재정의할 때는 반드시 hashCode 도 재정의 해야 한다. 그러지 않으면 HashSet, HashMap, HashTable 과 같은 Hash 컬렉션을 사용할 때 문제가 발생할 수 있다. Object 클래스 명세에서 hashCode 에 관한 일반 규약을 살펴보자. equals 가 사용하는 정보가 변경되지 않는다면 hashCode 를 여러 번 호출해도 동일 hash 값을 반환해야 한다. equals 메소드가 같다고 판정한 두 객체는 같은 hash 값을 반환해야 한다. equals 메소드가 다르다고 판정한 두 객체의 hash 값이 같을 수는 있다. 하지만 이런 일이 자주일어나면 성능이 떨어.. 2021. 10. 2.