스터디/토비 스터디(6)
-
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 -
2장 : 테스트
테스트 : 변화에 유연하게 대처할 수 있는 자신감을 주는 기술 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확신할 수 있게 해주는 작업 테스트는 가능하면 작은 단위로 쪼개서 집중해야 성공하는 테스트만 만들면 안 됨.부정적인 케이스를 먼저 만드는 것도 방법 테스트는 자동화되고 빠르게 실행되어야 결과도 일관성이 있어야, 환경이나 테스트 실행 순서에 따라서 결과가 달라지면 안 됨. 테스트는 포괄적으로 작성 수행 간격이 짧을수록 효과적 테스트 하기 쉬운 코드가 좋은 코드임 기존 테스트 코드의 문제점 1. main() 메서드 이용 2. UserDao의 오브젝트를 가져와 메서드 호출 3. 입력 값(User 객체)를 직접 코드로 생성 4. 결과를 콘솔에 출력
2023.03.20 -
1장 : 오브젝트와 의존관계
스프링 프레임워크: 스프링 컨테이너(어플리케이션 컨텍스트) 엔진 제공 스프링 컨테이너(어플리케이션 컨텍스트) : 애플리케이션을 구성하는 오브젝트를 생성하고 관리 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공 코드가 어떻게 작성돼야 하는지에 대한 기준 제시 생성된 오브젝트를 Bean이라고 함 bean 생성, 관계설정 등 제어 작업을 총괄 애플리컨텍스트 사용시 장점 1. 구체적인 펙토리 클래스를 알 필요가 없음 2. 종합 IOC 서비스 제공 - 오브젝트가 만들어지는 방식, 시점, 전략 다르게 가져갈 수 있음 - 자동생성, 오브젝트 후처리, 설정 방식 다변화, 인터셉팅 등 다양한 기능 제공 3. 빈 검색 시 다양한 방법 제공 IOC/DI:오브젝트 생면주기와 의존관게애 대한 프로그래밍 모델 제공 서비스 추..
2023.03.20