들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 Generic을 이용해서 반복되는 부분을 줄이면 코드의 전체 양이 줄어든다 코드의 전체 양이 줄어들면 유지보수 해야하는 영역이 줄어들기 때문에 손쉽게 유지보수 할 수 잇다. 완벽공략 p156, 마이그레이션 호환성을 위해 로 타입을 지원하고 제네릭 구현에는 소거 방식을 사용하기로 했다. (아이템 28) p158, 제네릭 메서드 (아이템 30) p158, 한정적 와일드카드 타입 (아이템 31) Generic DAO 만들기 + GenericRepository 만들기 이번 챕터에서 완벽공략은 위와 같이 나온다. 하지만 실제로는 다음 아이템을 공부하면서 작성할 수 있는 녀석들이기 때문에 여기서는 Generic Repositor..
들어가기 전 이 글은 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 Raw Type (List) 대신 반드시 제네릭 (List)를 사용해라. 제네릭을 사용하면 표현력 / 안정성이 더욱 향상된다. 제네릭을 사용하면 런타임 에러 대신 컴파일 에러가 발생하도록 바꿔준다. List, List 위는 로타입으로 List를 선언한 경우다. List strings는 실제로는 List으로 의도하고 만든 것이다. 따라서 unsafeAdd()가 요구하는 List 타입에 호환되지 않기 때문에 unsafeAdd() 메서드에서 컴파일 에러가 발생해야한다. 그렇지만 실제로는 발생하지 않는다. 만약, List 로타입을 List으로 타입 매개변수를 선언해주면 어떻게 될까? 위는 List으로 타입 매개변수를 ..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 어댑터 패턴은 클라이언트가 요청하는 타입과 이미 구현된 클래스가 호환되지 않을 때, 중간에 Adapter 클래스를 하나 생성해서 서로 호환될 수 있도록 해준다. Adapter 클래스는 클라이언트가 요청하는 타입(인터페이스 / 클래스)를 상속/구현한다. 따라서 호환 가능해진다. Adapter 클래스는 비정적 멤버 클래스로 선언해서 사용하면 좀 더 응집도 있게 코드를 작성할 수 있다. 완벽 공략 39. 어댑터 패턴 어댑터 패턴의 목적은 다음과 같다. 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴 예를 들어 클라이언트가 바라는 타겟은 220v를 사용하고 있는데, 우리가 이미 구현한 클래..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 중첩 클래스 중 일부는 멤버 클래스다. 멤버 클래스가 아닌 중첩 클래스는 익명 클래스, 로컬 클래스가 있다. 중첩 클래스가 바깥 클래스의 인스턴스를 참조하지 않는다면 정적 멤버 클래스로 구성해서 메모리를 효율화 할 수 있다. 중첩 클래스가 바깥 클래스의 인스턴스를 참조한다면 비정적 멤버 클래스로 구성한다. 비정적 멤버 클래스는 바깥 클래스의 묵시적 참조를 가지며, Outerclass.this로 접근 가능하다. 비정적 멤버 클래스는 주로 어댑터 패턴에 자주 사용된다. 익명 클래스는 메서드 scope에서 생성된 클래스다. 최근에는 람다 / 메서드 레퍼런스로 점차 사라지는 중이다. 로컬 클래스는 쓰지 않는다...
핵심 정리 태그 달린 클래스의 단점 쓸데없는 코드가 많다. 가독성이 나쁘다. 메모리도 많이 사용한다. 필드를 final로 선언하려면 불필요한 필드까지 초기화 해야 한다. 인스턴스 타입만으로는 현재 나타내는 의미를 알 길이 없다. 클래스 계층 구조(상속)로 바꾸면 모든 단점을 해결할 수 있다. 태그가 달린 클래스는? 태그 달린 클래스는 클래스가 가진 필드 중 일부가 클래스의 구체적인 타입을 나타내고, 이 타입에 따라 클래스의 전체 동작이 바뀌는 클래스다. 예시로는 Figure 클래스를 들 수 있다. // 코드 23-1 태그 달린 클래스 - 클래스 계층구조(상속)보다 훨씬 나쁘다! (142-143쪽) public class Figure { enum Shape {RECTANGLE, CIRCLE} // 태그 필..