이펙티브자바 (4) 썸네일형 리스트형 아이템 83: 지연 초기화는 신중히 사용하라 지연 초기화 public class FileUtil { private File oldfile = new File("oldfile"); ... } 여기 FileUtil 클래스가 있다. 이 클래스의 oldfile 필드가 프로그램이 100번 실행될 때 한 번 사용될 까 말까하는 필드라면 어떨까? 100번 실행되는 동안 사용하지도 않을 oldfile을 계속 불러와서 초기화 할 것이고 이는 명백한 리소스 낭비이다. 지연 초기화는 위와 같은 문제에 대한 해답이 될 수 있다. 자주 사용되지 않는 필드를 프로그램이 시작할 때가 아니라 비로소 사용될 때 초기화 하는 것이다. public class OldFileUtil { private File oldfile = null; ... public File getOldFile.. 9-9) 리플렉션보다는 인터페이스를 사용하라 자바 리플렉션 // effectivejava 패키지에 선언된 Person 클래스 package effectivejava; public class Person { private int age; private String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } } // 다른 .java 파일의 main 코드 Class personClass = Class.forName("effectivejava.Person"); for(Field.. 3-5) Comparable을 구현할지 고려하라 Comparable 인터페이스, compareTo 메소드 public class Customer implements Comparable { private int customerId; ... @Override public int compareTo(Customer o) { return Integer.compare(this.customerId, o.customerId); } ... } // customerList가 customerId 기준으로 정렬된다. Arrays.sort(customerList); Comparable 인터페이스는 compareTo 메소드를 가지고있다. compareTo 메소드는 두 객체를 비교하고 그 결과를 반환한다. 얼핏 equals 메소드와 비슷해 보일 수 있지만, equals는 두 객.. 2-6) 불필요한 객체 생성을 피하라 불필요한 객체 생성 같은 내용을 가지는 객체를 여러개 생성하는 것은 메모리상의 낭비를 가져온다. 현재는 같은 속성 값을 가지고 있지만 추후 달라질 수 있는 객체라면 필요에 따라서 객체를 중복 생성할 수 있다. 하지만 그것이 아니라면 불필요한 객체 생성을 피하고 하나의 객체를 재사용하는 것이 옳다. // 지금은 같아 보일지라도 개명할 수 있으니, 객체를 각자 생성한다. String name1 = new String("이기수"); String name2 = new String("이기수"); // 한국은 언제나 한국이다, 객채를 재사용하는것이 옳다. String born_country = new String("한국"); String cur_country = new String("한국"); // 메소드가 호출될.. 이전 1 다음