본문 바로가기

이팩티브 자바

(5)
열거 타입과 에너테이션 머리말 이번장은 열거타입과 애너테이션으로 자바에서 열거타입을 어떻게 사용하고 또 애너테이션은 어떤 기능을 가지고 있고 어떤 상황에쓰는지 파악해 보는 시간을 갖도록 하겠습니다. int 상수 대신 열거 타입을 사용하라 아래와 같이 int 상수 대신하여 enum 타입을 사용하교 int 상수형을 지향하라 public static final int APPLE = 0; public static final int BANANA = 1; public static final int ORANGE = 2; public enum Fruit { APPLE, BANANA, ORANGE; } 전략 열거타입 요일별로 일한 만큼의 수당을 계산해주는 enum 타입인데, 그 안의 하위 타입으로 평일과 주말을 나누고 위임하여 계산한다. pu..
제네릭 머리말 친구가 이팩티브 자바 책을 읽으면서 가장 어려웠던 부분이 제네릭이라고 해서 더욱더 열심히 보았던 파트였습니다. 5장을 읽으면서 자바 제네릭에 대하여 학습해보고, 제네릭의 장점을 살리고 단점을 최소화 하는 방법을 이번장을 통해서 익히도록 하겠습니다. 용어정리 공변, 반공변 타입 : 리스히코프 치환법칙을 적용할 수 있는 타입 **타입끼리 다운캐스팅(공변), 업캐스팅(반공변)**이 가능한 타입 // 공변성 Object[] Covariance = new Integer[10]; // 반공변성 Integer[] Contravariance = (Integer[]) Covariance; // 공변성 ArrayList Covariance = new ArrayList(); // 반공변성 ArrayList Contr..
클래스와 인터페이스 머리말 객체지향 프로그래밍에서의 가장 중요한 클래스와 인터페이스 Java에서는 클래스와 인터페이스를 어떤식으로 사용 권장 하는지 알아보는 시간을 갖도록 하겠습니다. 클래스와 맴버의 접근 권한을 최소화하라. 소프트웨어가 정상 동작하는 이상 항상 가장 낮은 접근 수준을 부여하라. 구현과 API를 깔끔하게 분리하자 오직 API를 통해서만 다른 컴포넌트와 소통하며, 내부 동작 방식에는 절때 개의치 말아야 한다. 정보은닉, 캡슐화는 소프트웨어 설계에 되는 원리이다. 클래스는 private-package와 public이 있는데 API를 제공해야하는 객체라면 public, 패키지 내에서 사용되는 클래스라면 private-package를 사용하라 API를 공개하는순간 내부 구현이 아니므로 관리의 대상이 된다. priv..
모든 객체의 공통 메서드 머리말 객체가 공통으로 사용하는 메서드가 무엇이 있고, 어떻게 다뤄야하는지 알아보는 시간을 갖도록 하겠습니다. Object에서 제공하는 equals(), hashCode(), toString(), clone(), finalize()는 모두 재정의(overriding)을 염두해 두고 설계한것이다. HashMap, HashSet에서 해당 Object를 사용하려면 equals()와 hashCode()를 오버리이딩 해서 구현해야한다. Compareable 인터페이스는 CompareTo()를 구현해야하는데 이부분은 배열의 정렬이나, TreeMap, TreeSet에서 해당 Object를 사용하려면 구현을 해야한다. equals는 일반 규약을 지켜 재정의 하라 자기자신은 true를 반환해야한다. 해당인스턴스가 아니라..
객체 생성과 파괴 머리말 자바 공부를 첫 시작하면서 이팩티브 자바 책을 선정하여 자바를 공부하려고 합니다. 저는 기존에 C/C++ Typescript 언어를 통하여 객체지향 개념이 어느정도 익숙하다고 생각하여 어느정도 난이도가 있는 책을 선정하게 되었습니다. 자바에서는 과연 객체를 어떻게 생성하고, 소멸시킬지 파해쳐 나아가 봅시다😀 생성자 대신 정적 팩터리 메서드를 고려하라 매개 변수가 많은 생성자일경우 클라이언트가 어떤 생성자를 사용해야할지 명확하게 구분 할 수 없으며 또한 필요하지않는 파라미터까지 제공을 해야하는 문제가 발생한다면 정적 팩터리 매서드를 사용하여 해당 문제를 해결할 수 있다. 정적 팩터리 메서드 사용시 장점 어떤 생성자를 생성할 것인지 메소드의 이름으로 유추를 할 수 있어 그 생성자가 어떤 역할을 하는지..