스터디(59)
-
6장 : 열거 타입과 애너테이션
아이템 34. int 상수 대신 열거 타입을 사용하라 - 열거 타입 : 일정 개수의 상수 값을 정의한 다음, 그 외 값은 허용하지 않는 타입 - 자바의 열거 타입은 완전한 형태의 클래스 - 생성자를 제공하지 않으므로 사실상 final - 열거 타입은 싱글턴을 일반화한 형태 - 열거 타입은 컴파일 타임 타입 안정성 제공 - 고차원 추상 개념 하나를 완벽하 표현 가능 - 열거 타입에 추상 메서드를 통해 각 상수별 클래스 몸체를 재정의 가능 - 상수별 메서드 구현을 상수별 데이터와 결합 가능 - 열거 타입 상수는 생성자에서 자신의 인스턴스를 맵에 추가할 수 없음 - 열거 타입 정적 필드 중 열거 타입 생성자에서 접근할 수 있는 것으 상수 변수 뿐 - 열거 타입 생성자에서 같은 열거타입의 다른 상수에도 접근할 ..
2023.04.06 -
5장 : 제네릭
아이템 26. 로 타입은 사용하지 말라 - 로타입은 전 코드와 호환되도록 하기 위한 궁여지책 - 오류는 가능한 발생 즉시, 이상적으로는 컴파일시 발견하는 것이 좋음 - 로타입을 쓰면 제네릭이 안겨주는 안정성과 표현력 모두 잃게 됨 - List 쓸 바에 List 쓰자 : 모든 타입을 허용한다는 것을 컴파일러에게 명확히 전달 - 어떤 타입이라도 담을 수 있는 가장 벙용적인 제네릭을 만들려면 와일드카드 타입 사용 - class 리터럴에는 로 타입을 써야함 - instanceof 연산자는 비한정적 와일드카드 타입 이외의 매개변수화 타입은 적용 불가 아이템 27. 비검사 경고를 제거하라 아이템 28. 배열보다는 리스트를 사용하라 공변 : Sub가 Super의 하위 타입이면 배열 Sub[] 는 Super[]의 하위..
2023.04.06 -
4장 : 클래스와 인터페이스
아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 - 클래스 내부 데이터 및 구현 정보를 외부 컴포넌트로부터 잘 숨겨야 : 캡슐화 - 모든 클래스이 맴버와 접근성을 가능한 좀혀야 - public일 필요가 없는 클래스의 접근 수준을 최대한 낮춰야 - 리스코프 치환 원칙 : 상위 클래스의 인스턴스는 하위 클래스의 인스턴스로 대체해 사용할 수 있어야 - 즉, 상위 클래스의 메서드를 정의할 때는 그 접근 수준을 상위 클래스에서보다 좁게 설정할 수 없다 - public 클래스의 인스턴스 필드는 되도록 public이 아니어야 - public을 가변 필드로 갖는 클래스는 일반적으로 스레드에 안전하지 않음 - 정적 필드도 마찬가지이나, 상수라면 public static final 필드로 공개해도 좋음 - 길이가 0..
2023.04.06 -
3장 : 모든 객체의 공통 메서드
아이템 10. equals는 일반 규약을 지켜 재정의하라 # equals를 재정의 하면 안되는 상황 1. 각 인스턴스가 본질적으로 고유함 2. 인스턴스의 논리적 동치성을 검사할 일이 없음 3. 상위 클래스에서 재정의한 equals가 하위 클래스에서도 딱 들어맞음 4. 클래스가 private,package-private 이고, equals 메서드 호출할 일이 없음 # equals를 재정의 해야하는 경우 1. equals가 논리적 통치성을 비교하도록 재정의되지 않았을 경우 2. 객체가 같은지가 아니라 값이 같은지 알고싶을 경우 3. 같은 인스턴스가 둘 이상 만들어지지 않음을 보장하는 경우. ex) enum # equals 메서드 재정의시 따라야하는 일반 규약 1. 반사성 : x.equals(x) == tru..
2023.04.05 -
2장 : 객체 생성과 파괴
아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 ## 정적 팩터리 메서드 장점 1. 이름을 가질 수 있음 : 반환될 객체에 특성을 쉽게 묘사 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 됨 : 같은 객체가 자주 요청되는 상황에 성능 향상 3. 반환 타입의 하위 타입 객체를 반환할 수 있음 4. 입력 매개변수에 따라 매번 다른 클래스 객체 반환 가능 5. 정적 팩터리 메서드를 작성하는 시점에서 반환할 객체의 클래스가 존재하지 않아도 됨 ## 정적 팩터리 메서드 단점 1. 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없음. 생성자가 private이기 때문 2. 정적 팩터리 메서드는 프로그래머가 찾기어려움. api 문서화 필수 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 - ..
2023.04.04 -
6장 AOP
# 메소드 분리 기존 코드에서 비즈니스 로직을 사이에 두고 트렌젝션 시작과 종료 담당 코드가 전후로 위치한 것을 볼 수 있음. 또한 트랜잭션 경계설정의 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보가 없음 이 두 코드는 성격이 다를 뿐 아니라 서로 주고받는 것도 없는, 완벽하게 독립된 코드 ## 트랜젝션 경계 설정 코드 분리의 장점 - 비즈니스 로직을 담당하고 있는 코드를 작성할 때 트랜젝션과 같은 기술적인 내용에 전혀 신경을 안써도 . - 비즈니스 로직에 대한 테스트를 손쉽게 만들어낼 수 있음 # 다이나믹 프록시와 팩토리 빈 트랜잭션 기능은 비즈니스 로직과는 성격이 다르기 때문에 아예 그 정용 사실 자체를 밖으로 분리할 수 있었음. 부가기능 외의 나머지 모든 기능은 원래 핵심기능을 가진 클래스로 ..
2023.04.02