분류 전체보기(126)
-
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 -
5장 서비스 추상화
# Enum 숫자 타입 직접 사용 X, 열거형이 더 안전하고 편리 # DAO dao는 데이터를 어떻게 가져오고 조작할 것인가를 다루는 곳이지 비즈니스 로직을 두는 곳이 아님. # 코드 개선 메뉴얼 - 코드에 중복된 부분은 없는가 - 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가 - 코드가 자신이 있어야 할 자리에 있는가 - 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? # 트랜잭션 서비스 추상화 깃헙 코드 참조 # 테스트 대역 테스트 대상이 되는 오브젝트의 기능에만 충실하게 수행하면서 빠르게, 자주 테스트를 싱행할 수 있도록 사용하는 오브젝트 ex) stub : 테스트 대상 오브젝트의 의존객체로서 존재하면서 테스트 동안에 코드가 정상적으로 수행..
2023.03.29 -
4장 예외
# 예외 종류 ## Error 시스템에 뭔가 비정상적인 상황이 발생 주로 VM에서 발생 애플리케이션 코드에서 잡으려고 하면 안 됨 ## Exception : checked exception try catch 블록 혹은 throws를 무조건 던져줘야 ## Exception : unchecked exception RuntimeException 하위 클래스들 오류가 있을 때 발생하도록 의도된 것들 # 예외처리 방법 ## 예외 복구 예외상황을 파악하고 문제를 해결해서 정상 상태도 돌려놓는 것 기본 작업 흐름이 불가능하면 다른 작업 흐름으로 자연스럽게 유도 ## 예외처리 회피 예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 것 허나, 콜백/템플릿처럼 긴밀하게 역할을 분담하고 있는 관계가 아니라면 ..
2023.03.29 -
3장 템플릿
JDBC는 중간에 어떤 이유로든 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환 try/catch/finally 블록으로 리소스 반환 가능(try - resource 도 가능) 예시 코드에서 2중 중첩, 메서드 반복 등 단점이 많음 ## 분리와 재사용을 위한 디자인 패턴 - 변하는 성격이 다른 것을 찾아내는 것 ## 템플릿 메서드 패턴 : 상속 기능을 확장, 상속을 통해 새로운 클래스를 만들어야 ## 전략 패턴 : 확장에 해당하는 변하는 부분을 별도의 클래스를 만들어 추상화된 인터페이스를 통해 위임 - 중첨 클래스의 내부 클래스에서 외부의 변수를 사용할 때 외부 변수는 반드시 final로 선언해줘야 - 익명 내부 클래스는 선언과 동시에 오브젝트를 생성해야 # 템플릿/콜백 - 템플릿 : 고정된 작업 ..
2023.03.29