이펙티브자바

Old Posts/Effecttive Java

Item12. Comparable 구현을 고려하라 <이펙티브자바>

Item12. Comparable 구현을 고려하라 Item 12 : Comparable 구현을 고려하라 (Consider implementing Comparable) Comparable 인터페이스를 구현하는 클래스의 객체들은 자연적 순서(natural ordering)를 갖게 된다. 자바 플랫폼 라이브러리에 포함된 거의 모든 value class는 Comparable 인터페이스를 구현한다. compareTo() 잘못짜면 비교 연산에 기반한 클래스들이 오작동할 수 있다. TreeSet이나 TreeMap 같은 sorted collection Arrays와 Collections같은 utility class 탐색과 정렬 알고리즘을 포함하는 class -> 당연.. compareTo가 이상하면 정렬이상하게 되겠찌..

Old Posts/Effecttive Java

Item10. toString은 항상 재정의하라 <이펙티브자바>

Item10. toString은 항상 재정의하라 Item 10 : toString은 항상 재정의하라 (Always override toString) toString 일반 규약[JavaSE6] "사람이 읽기 쉽도록 간략하지만 유용한 정보를 제공해야 한다." toString을 잘 만들어 놓으면 클래스를 좀 더 쾌적하게 사용할 수 있다. 디버깅, 유지보수, 간단한 체크할 때 유용 기본 Object의 toString()은 className@해시코드 이기때문에 의미없다. {Jenny=PhoeNumber@163b91} {Jenny=(707) 867-5309} 어떤 toString이 더 유용하겠는가? 가능하다면 toString 메서드는 객체 내의 중요 정보를 전부 담아 반환해야 한다. 객체가 아주 크거나 문자열로 변..

Old Posts/Effecttive Java

Item09. equals를 재정의할 때는 반드시 hashCode도 재정의하라

Item09. equals를 재정의할 때는 반드시 hashCode도 재정의하라 Item 09 : equals를 재정의할 때는 반드시 hashCode도 재정의하라 (Always override hashCode when you override equals) Object 클래스 명세 일반 규약[JavaSE6] 프로그램 실행 중에 객체의 hashCode를 여러 번 호출하는 경우, equals가 사용하는 정보들이 변경되지 않았다면, 언제나 동일한 정수(integer)가 반환되어야 한다. 종료 후 다시 실행시 값이 같을 필요는 없다. equals() 가 같다고 판정한 두 객체의 hashCode 값은 같아야 한다. equals() 가 다르다고 판정한 두 객체의 hashCode가 같을 수도 있다. 이 경우 hash t..

Old Posts/Effecttive Java

Item08. equals를 재정의할 때는 일반 규약을 따르라

README Item 08 : equals를 재정의할 때는 일반 규약을 따르라 (Obey the general contract when overriding equals) equals() 를 재정의(overriding) 안해도 될 때 각각의 객체가 고유(unique)할 때 클래스에 "논리적 동일성(logical equality)" 검사 방법이 있건 없건 상관없을 때 상위 클래스에서 재정의한 equals()를 하위클래스에서 사용해도 문제없을 때 클래스가 private또는 package-private로 선언되었고, equals()를 호출할 일이 없을 때 euqals()를 재정의 해야할 때 객체 동일성(object equality)이 아닌 논리적 동일성(logical equality)의 개념을 지원하는 클래스일..

Old Posts/Effecttive Java

Item06. 유효기간이 지난 객체 참조는 폐기하라

README Item 06 : 유효기간이 지난 객체 참조는 폐기하라 (Eliminate obsolete object references) 메모리 누수(Memory Leak) 방지하기 자체적을 메모리를 관리하는 클래스 캐시 (Cache) 리스너 (listener) 유효기간이 지난 객체 참조를 폐기하여 메모리 누수(memory Leak) 을 방지하자! 1. 자체적을 메모리를 관리하는 클래스를 만들 때는 메모리 누수(Memory Leak)가 발생하지 않도록 해야한다. 더 이상 사용되지 않는 원소 안에있는 객체 참조는 null로 바꾸자 Stack.class public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(le..

Old Posts/Effecttive Java

Item05. 불필요한 객체는 만들지 말라

README Item 05 : 불필요한 객체는 만들지 말라 (Avoid creating unnecessary objects) 불필요한 객체 만들지 않는법 String static factory method static initializer Wrapper class 1. String String s1 = new String("ABC"); String s2 = new String("ABC"); System.out.println(s2 == s1); //false(참조값 다름) s1, s2에서 각각 객체생성을 했으므로 힙영역에 객체 2개가 생성이 된다. String.class는 불변 클래스(immutable class)라서 같은 문자열을 다른 객체로 만들 이유가 없다. 객체 하나를 생성하고 같은 참조값을 가지면..

Old Posts/Effecttive Java

Item04. 객체 생성을 막을 때는 private 생성자를 사용하라 <이펙티브자바>

README Item 04 : 객체 생성을 막을 때는 private 생성자를 사용하라 (Enforce noninstantiability with a private constructor) 객체 생성을 막는 것에는 어떤것들이 있을까? java.lang.Math java.util.Arrays java.util.Collections (위 클래스들은 객체를 만들 목적의 클래스가 아니다.) 1. java.lang.Math public final class Math { /** * Don't let anyone instantiate this class. */ private Math() {} public static final double PI = 3.14159265358979323846; public static in..

Old Posts/Effecttive Java

Item03. 싱글톤을 쓸 때 property는 private 생성자나 enum타입으로 하라 <이펙티브자바>

README Item 03 : 싱글톤을 쓸때 property는 private 생성자나 enum타입으로 하라 (Enforce the singleton property with a private constructor or an enum type) 싱글톤 만드는법 using public final field using static Factory using Enum (결론: 1번 쓰지마라) 1. Using public final field public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){...} public void leaveTheBuilding(){...} } 문제점 reflection으로 private..

bactoria
'이펙티브자바' 태그의 글 목록