본문 바로가기

분류 전체보기147

이펙티브 자바 아이템 14 - Comparable 을 구현할지 고민하라 - 핵심 정리 아이템 14 - Comparable 을 구현할지 고민하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. Comparable 은 Object 가 제공하는 메서드는 아니지만 일반적으로 널리 사용할 수 있는 인터페이스 이다. Comparable 은 엘리먼트가 지닌 자연적인 순서(natural order) 를 정해줄 때 사용하는 인터페이스이다. Comparable 은 우리가 비교해주고 싶은 순서가 있는 경우에 그 비교 방법을 구현할 수 있다. Comparable 은 제네릭 타입 을 가지고 있기 때문에 컴파일 타임 에 체크가 가능한 장점이 있다. compareTo 를 재정의 할때는 몇가지 규약이 있다. compareTo 규약 compareTo 메서.. 2022. 10. 31.
[리뷰 이벤트] 이것이 자바다 이 글은 okky에서 진행된 이것이 자바다 리뷰 이벤트를 통해 작성되었습니다. 운 좋게 이벤트에 당첨되어서 이것이 자바다 라는 책을 받았습니다. 자바는 현재 17 버전까지 나온 상태입니다. 최근 자바 기본서를 통해 기초를 다지려고 책을 찾아보던 중에 느낀점은 요즘 나온책이 거의 없다 입니다. 그러던 중 이것이 자바다 라는 책이 개정판으로 재출간한다는 소식을 접했습니다. 장점 이 책의 장점으로 가장 크게 꼽는 건 자바 17LTS 버전까지 대응하는 내용이 추가되었다는 것입니다. 기존의 책들이 예전에 나온책이기 때문에 아무래도 오래된 책들로 공부하는 건 찜찜함이 있기 마련입니다. 이것이 자바다는 예전부터 유명했던 이것이 000다 시리즈 중 하나이기 때문에 더 믿고 공부할 수 있게되었습니다. 두번째 장점으로는 .. 2022. 10. 28.
이펙티브 자바 아이템 13 - clone 재정의는 주의해서 진행하라 - 완벽 공략 아이템 13 - clone 재정의는 주의해서 진행하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. UncheckedException 우리는 보통 UncheckedException 을 선호햔다. public class MyException extends RuntimeException { } UncheckedException 은 RuntimeException 을 상속 받은 Exception 이다. public class MyException extends Error { } Error 를 상속받은 클래스들 역시 UncheckedException 이라고 부를 수 있다. RuntimeException 과 Error 를 확장한 클래스들은 Unche.. 2022. 10. 28.
이펙티브 자바 아이템 13 - clone 재정의는 주의해서 진행하라 - 핵심 정리 아이템 13 - clone 재정의는 주의해서 진행하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. clone 규약 clone 메서드는 Object 에 정의되어있는 메서드이다. public interface Cloneable { } 아무것도 정의되어 있지 않은 Cloneable 인터페이스가 존재한다. clone 메서드를 구현하려면 Cloneable 인터페이스를 implements 해야한다. Cloneable 인터페이스를 implements 하지 않으면 clone 메서드 는 동작하지 않는다. 오브젝트에 정의되어있는 clone 메서드 기능을 제공하기 위해서는 Cloneable 인터페이스를 implements 한다. clone 메서드 를 오버라.. 2022. 10. 27.
이펙티브 자바 아이템 12 - toString 을 항상 재정의하라 - 핵심 정리 아이템 12 - toString 을 항상 재정의하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 오브젝트에서 기본적으로 제공하는 toString 은 클래스이름@16진수로 표시한 해시 코드 의 형태이다. 이런 기본적인 형식은 딱히 유용하지가 않다. 인스턴스에 문자열을 연산하면 인스턴스에 있는 toString 이 자동으로 호출된다. toString 은 우리가 원하는 형태로 표현을 해주면 좋다. 특히 값 클래스의 경우에는 어떤 형태로 toString 의 형식이 되는 문서화 를 하면 좋다. public final class PhoneNumber { private final short areaCode, prefix, lineNum; public .. 2022. 10. 26.
이펙티브 자바 아이템 11 - equals 를 재정의하려거든 hashCode 도 재정의하라 - 완벽 공략 아이템 11 - equals 를 재정의하려거든 hashCode 도 재정의하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 해시맵 내부의 연결 리스트 자바8 이전 까지는 해시 충돌 발생시 링크드 리스트 를 사용했다. 이때 링크드 리스트 는 해시맵 내부 에 구현되어 있는 링크드 리스트를 사용했다. 링크드 리스트에서 데이터를 추가 할때 성능은 O(1) 이다. 링크드 리스트에서 데이터를 조회 할때 성능은 O(n) 이다. 해시 충돌 이 자주 발생할수록 해당 버킷 에 들어있는 링크드 리스트 에서 값을 꺼낼때 성능이 저하된다. 자바8 버전부터는 성능 최적화를 위해 링크드 리스트 대신에 이진 트리 를 사용하도록 바뀌었다. 이진 트리 에서 값을 꺼낼 때.. 2022. 10. 26.
이펙티브 자바 아이템 11 - equals 를 재정의하려거든 hashCode 도 재정의하라 - 핵심 정리 아이템 11 - equals 를 재정의하려거든 hashCode 도 재정의하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. equals 메서드를 구현할 때는 반드시 hashCode 도 구현해야한다. equals 메서드와 hashCode 는 같이 정의되어 있지 않다면 잘못된 코드이다. hashCode 를 구현할 때는 몇가지 규약 이 존재한다. equals 메서드에서 사용하는 값이 변경되지 않았다면 hashCode 는 몇번이 실행 되더라도 동일한 값 을 리턴해야한다. 두 객체를 equals 메서드로 비교했을 때 같은 객체 로 나온다면 두 객체의 hashCode 값도 같아야 한다. 성능을 고려해 다른 객체라면 다른 hashCode 를 리턴하는 .. 2022. 10. 25.
이펙티브 자바 아이템 10 - equals 는 일반 규약을 지켜 재정의하라 - 완벽 공략 아이템 10 - equals 는 일반 규약을 지켜 재정의하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. Value 기반 클래스 value object, 혹은 값 클래스라고도 한다. DDD 에서 나오는 value object 나 값처럼 사용이되는 클래스나 객체를 의미한다. 값 클래스란 int 와 String 처럼 값을 표현하는 클래스를 말한다. 값 클래스는 객체의 유일성을 판단하기 위한 식별자가 없다. 그 클래스의 인스턴스가 가지고 있는 필드의 값들이 그 오브젝트를 대변하게 된다. public class Point { private final int x; private final int y; public Point(int x, int y.. 2022. 10. 24.
이펙티브 자바 아이템 10 - equals 는 일반 규약을 지켜 재정의하라 - 핵심 정리 아이템 10 - equals 는 일반 규약을 지켜 재정의하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 모든 클래스는 전부 Object 클래스를 상속 받는다 Object 클래스에 있는 메서드를 오버라이딩 할 수 있다. 이번 아이템에서는 equals 메서드 에 대해서 다룬다. equals 메서드는 직접 구현할 때도 있고 아닐 때도 있지만 보통은 IDE 나 Tool 을 사용해 equals 메서드를 정의하게 된다. equals 메서드 를 만들지 않아도 된다면 만들지 않는게 최선이다. equals 메서드 를 만들지 않아도 되는 상황은 다음과 같다. 각 인스턴스가 본질적으로 고유할 때. 싱글톤 패턴을 구현했다고 가정해보자. 그 Object는 그.. 2022. 10. 19.
이펙티브 자바 아이템 9 - try-finally 보다 try-with-resouces 를 사용하라 - 완벽 공략 아이템 9 - try-finally 보다 try-with-resouces 를 사용하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. finally 블럭에서 try - catch 로 다시 감싸져있다면 어떻게 될까? public class Copy { private static final int BUFFER_SIZE = 8 * 1024; // 코드 9-2 자원이 둘 이상이면 try-finally 방식은 너무 지저분하다! (47쪽) static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); OutputStream ou.. 2022. 10. 14.
이펙티브 자바 아이템 9 - try-finally 보다 try-with-resouces 를사용하라 - 핵심 정리 아이템 9 - try-finally 보다 try-with-resouces 를사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. try-finally 는 자바7 버전 부터 더이상 최선의 방법이 아니다. try-with-resouces 를 사용해야 한다. public class TopLine { // 코드 9-1 try-finally - 더 이상 자원을 회수하는 최선의 방책이 아니다! (47쪽) static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return.. 2022. 10. 14.
이펙티브 자바 아이템 8 - finalizer 와 cleaner 사용을 피하라 - 완벽 공략 아이템 8 - finalizer 와 cleaner 사용을 피하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 정적이 아닌 중첩 클래스는 자동으로 바깥 객체의 참조를 갖는다. static 이 아닌 중첩 클래스는 자동으로 바깥 객체의 참조를 갖는다. public class OuterClass { class InnerClass { } public static void main(String[] args) { OuterClass outerClass = new OuterClass(); InnerClass innerClass = outerClass.new InnerClass(); System.out.println(innerClass); outerCl.. 2022. 10. 14.