자바

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

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..

Old Posts/Effecttive Java

Item02. 생성자 인자가 많을 때는 Builder패턴 적용을 고려하라 <이펙티브자바>

README Item 02 : 생성자 인자가 많을 때는 Builder패턴 적용을 고려하라 (Consider a builder when faced with many constructor parameters) 아래에서 소개될 패턴들 Telescoping constructor pattern JavaBeans Pattern Builder Pattern (결론: Builder Pattern 을 써라.) 1. Telescoping constructor pattern public class NutritionFacts { private final int servingSize; // (mL) required private final int servings; // (per container) required private..

bactoria
'자바' 태그의 글 목록