no image
[이펙티브자바 - 아이템15] 클래스와 멤버의 접근 권한을 최소화하라
4장. 클래스와 인터페이스 - GOAL 추상화의 기본 단위인 클래스와 인터페이스는 자바의 심장이다. 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만들어보자 아이템15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며, 서로의 내부 동작 방식에는 전혀 개의치 않는다. 정보 은닉(캡슐화) 이 개념은 설계의 근간이 되는 원리다. 정보 은닉의 장점 정보 은닉의 장점은 시스템을 구성하는 컴포넌트들을 서로 독립시켜서, 개발, 테스트, 등을 개별적으로 할 수 있게 해주는 것과 연관되어 있다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있다. 시스템 관리 비용을 ..
2021. 10. 5. 19:43
no image
[이펙티브자바 - 아이템14] Comparable을 구현할지 고려하라
3장. 모든 객체의 공통 메서드 - GOAL Object를 상속하는 클래스는 일반 규약에 맞게 재정의해야 하는데, 언제 어떻게 재정의해야 하는지 알아보자 아이템14. Comparable을 구현할지 고려하라 Comparable 인터페이스의 유일무이한 메서드인 compareTo를 알아보자. compareTo는 Object의 메서드가 아니다. compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다. Comparable을 구현했다는 것은, 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다. 그래서 Comparable을 구현한 객체들의 배열은 다음처럼 손쉽게 정렬할 수 있다. Arrays.sort(a) 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 쉽게할 수 있다. 아래 코..
2021. 9. 25. 21:22
no image
[이펙티브자바 - 아이템13] clone 재정의는 주의해서 진행하라
3장. 모든 객체의 공통 메서드 - GOAL Object를 상속하는 클래스는 일반 규약에 맞게 재정의해야 하는데, 언제 어떻게 재정의해야 하는지 알아보자 아이템13. clone 재정의는 주의해서 진행하라 Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. 번외. clone은 무엇인가 객체의 원본을 복제하는데 사용하는 메서드이다. 생성과정의 복잡한 과정을 반복하지 않고, 복제할 수 있다. clone 메서드를 사용하면, 객체의 정보가 동일한 또 다른 인스턴스가 생성되는 것이므로, 객체지향 프로그램에서의 정보 은닉, 객체보호의 관점에서 위배될 수 있다. 해당 클래스의 clone 메서드의 사용을 허용한다는 의미로 cloneable 인터페이스를 명시해 준다. 얕은 복사는 주..
2021. 9. 25. 20:31
no image
[이펙티브자바 - 아이템12] toString을 항상 재정의하라
3장. 모든 객체의 공통 메서드 - GOAL Object를 상속하는 클래스는 일반 규약에 맞게 재정의해야 하는데, 언제 어떻게 재정의해야 하는지 알아보자 아이템12. toString을 항상 재정의하라 toString 의 규약은 '모든 하위 클래스에서 이 메서드를 재정의하라' 이다. toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. toString메서드는 객체를 println, printf, 문자열 연결 연산자(+), assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다. 이를 제대로 재정의하지 않는다면 쓸모없는 메시지만 로그에 남을 것이다. 실전에서의 toString 1. 객체가 가진 주요 정보 모두를 반환하는게 좋다. ..
2021. 9. 25. 19:04
no image
[이펙티브자바 - 아이템11] equals를 재정의하려거든 hashCode도 재정의하라
3장. 모든 객체의 공통 메서드 - GOAL Object를 상속하는 클래스는 일반 규약에 맞게 재정의해야 하는데, 언제 어떻게 재정의해야 하는지 알아보자 아이템11. equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. 아래는 Object 명세서에 있는 규약이다. equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시..
2021. 9. 25. 18:43
no image
[이펙티브자바 - 아이템10] equals는 일반 규약을 지켜 재정의하라
3장. 모든 객체의 공통 메서드 - GOAL Object를 상속하는 클래스는 일반 규약에 맞게 재정의해야 하는데, 언제 어떻게 재정의해야 하는지 알아보자 아이템10. equals는 일반 규약을 지켜 재정의하라 equals를 재정의하지 말하야 할 때 equals 메서드는 재정의하기 쉬어보이지만, 함정이 있다. 다음 아래에 해당된다면 재정의하지 말자 1. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는게 아니라 동작하는 개체를 표현하는 클래스가 해당된다. ex) Thread Object의 equals 메서드는 이러한 클래스에 딱 맞게 구현되었다. 2. 인스턴스의 '논리적 동치성'을 검사할 일이 없다. 3. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 대부분의 Set 구현체는 ab..
2021. 9. 25. 17:00
no image
[이펙티브자바 - 아이템9] try-finally보다는 try-with-resources를 사용하라
2장. 객체 생성과 파괴 GOAL 1. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하기 2. 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 3. 제때 파괴됨을 보장하고, 파괴 전에 수행해야 할 정리 작업을 관리하기 아이템9. try-finally보다는 try-with-resources를 사용하라자바 라이브러리에는 close메서드를 호출해 직접 닫아줘야 하는 자원이 많다. ex) IuputStream, OutputStream, java.sql,Connection 자원 닫기는 클라이언트가 놓치기 쉬워서 성능 문제로도 이어지기도하는데, 이런 자원 중 상당수가 안전망으로 finalizer를 활용하고는 있지만, finalizer는 믿을만하지 못하다.전통적으로는 자원이 제대로 닫힘을 보장하는 수단으..
2021. 9. 19. 03:43
no image
[이펙티브자바 - 아이템8] finalizer와 cleaner 사용을 피하라
2장. 객체 생성과 파괴 GOAL 1. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하기 2. 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 3. 제때 파괴됨을 보장하고, 파괴 전에 수행해야 할 정리 작업을 관리하기 아이템8. finalizer와 cleaner 사용을 피하라자바는 두 가지 객체 소멸자를 제공한다. 그 중 finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다. 오동작, 낮은 성능, 이식성 문제 등등.. 자바 9에서는 finalizer를 사용 자제로 지정하고, cleaner를 그 대안으로 소개한다. cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다.public class Finaliz..
2021. 9. 19. 03:27
no image
[이펙티브자바 - 아이템7] 다 쓴 객체 참조를 해제하라
2장. 객체 생성과 파괴 GOAL 1. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하기 2. 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 3. 제때 파괴됨을 보장하고, 파괴 전에 수행해야 할 정리 작업을 관리하기 아이템7. 다 쓴 객체 참조를 해제하라자바는 가비지 컬렉터를 갖췄으므로, 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해할 수 있는데, 절대 사실이 아니다.아래 코드에서는 숨어있는 문제가 있다. 메모리 누수이다. 이 스택을 사용하는 프로그램을 오래 실행하다 보면 점차 기비지 컬렉션 활동과 메모리 사용량이 늘어나 결국 성능이 저하될 것이다. 드문 경우로, 심할 때는 디스크 페이징이나 OufofMemoryError를 일으켜 프로그램이 예기치 않게 종료되기도 한다.public ..
2021. 9. 18. 22:52