<Lambda> 8. JAVA8 in Action - Chapter 8
by BFine반응형
JAVA8 in Action - part3
Chapter 8 - 리팩토링, 테스팅, 디버깅
8.1.0 가독성과 유연성을 개선하는 리팩토링
- 람다식은 익명클래스보다 코드를 좀 더 간결 하게 만든다.
- 동작파라미터화 형식을 지언하기 때문에 코드는 더 큰 유연성 을 갖출 수 있다.
8.1.1 코드 가독성 개선
- 가독성 이 좋다는 것은 다른사람이 봐도 쉽게 이해할 수 있는 것을 의미한다.
- 가독성을 개선한다는 것은 다른사람이 쉽게 이해하고 유지보수할 수 있게 만드는 것이다.
- 자바8은 코드의 의도를 쉽게 표현할 수 있다.
8.1.2 익명 클래스를 람다 표현식으로 리팩토링하기
- 모든 익명 클래스를 람다식으로 바꿀 수는 업다.
- 익명클래스에서 this는 익명클래스 자신, 람다식에서는 감싸는 클래스를 의미한다.
- 람다식에서는 외부변수를 내부에 지역변수로 가릴수 없다.
- 오버로딩에 대한 모호함이 발생할 수 있다.
8.1.3 람다표현식을 메서드 레퍼런스로 리팩토링하기
- 람다식을 바로 쓰는 것 보다 메서드 레퍼런스 를 이용하면 가독성을 높일 수 있다.(메서드명)
8.1.4 명령형 데이터 처리를 스트림으로 리팩토링하기
- 스트림 API는 데이터 처리 파이프라인의 의도 를 더 명확하게 보여준다.
- 명령형 코드를 스트림 API로 바꾸도록 도움 주는 도구도 있다.
8.1.5 코드 유연성 개선
- 람다식에는 함수형 인터페이스가 필요하다. 이를 활용하는 두가지 패턴이 있다.
- 조건부 연기 실행
- 특정 조건에서만 코드가 실행될 수 있게 생성 과정을 연기해야 한다.
- 실행 어라운드
- 같은 준비,종료 과정을 반복해야하는 코드는 람다식을 사용한다.
8.2.0 람다로 객체지향 디자인 패턴리팩토링하기
- 디자인 패턴은 공통적인 소프트웨어 문제를 설계할때 재사용할 수 있는 기본틀을 제공한다.
- 전략 패턴
- 한 유형의 알고리즘을 보유한 상태에서 런타임에 적절한 알고리즘을 선택하는 기법이다.
- 람다식을 이용하면 클래스를 만드는 부분들을 줄일 수 있다.
- 템플릿 메서드 패턴
- 알고리즘 개요를 제시한 후 일부를 고칠 수 있는 유연함을 제공하는 기법이다.
- 람다식을 이용하면 상속받아 구현하는 부분을 인수 전달 방식을 사용하여 표현할 수 있다.
- 옵저버 패턴
- 이벤트가 발생했을때 주체객체에 있는 다른 객체 리스트(옵저버)도 영향을 주는 기법이다.
- 예를 들어 주식 가격 변동하면 알림보내기, 영상올라오면 구독자들에게 알림보내기
- 람다식을 이용하면 인스턴스화 할필요없이 람다식을 전달해서 실행동작을 지정할 수 있다.
- 의무체인
- 객체의 체인 (작업->처리->다른객체->작업~~)을 만들때 사용하는 기법이다.
- 람다식을 이용하면
andThen
같은 메서드를 이용해 함수를 조합할 수 있다.
- 팩토리
- 인스턴스화 로직을 클라이언트에 노출하지 않고 객체를 만들때 사용하는 기법이다.
- 메서드 레퍼런스를 이용하면 간략하게 객체생성을 표현할 수 있다.
8.3.0 람다 테스팅
- 메서드가 의도한 대로 동작하는지 확인할 수 있도록 하는 것이 단위테스트 이다.
8.3.1 보이는 람다 표현식이 동작 테스팅
- 람다식는 익명이기 떄문에 이름을 테스트클래스로 호출할 수 없다.
- 람다식을 필드에 저장해서 테스트클래스로 호출해야한다. (정적 필드 활용)
8.3.2 람드를 사용하는 메서드의 동작에 집중하라
- 세부 구현을 포함하는 람다식은 공개하면 안된다.
- 람다식을 사용하는 메서드 동작 을 테스트해서 공개안하면서 검증할 수 있다.
8.3.3 복잡한 람다를 개별 메서드로 분할 하기
- 람다식을 메서드 레퍼런스로 바꾸면 테스트가 가능하다.
8.3.4 고차원 함수 테스팅
- 함수를 인수로 받거나 다른 함수를 반환하는 메서드는 다른람다를 만들어 동작을 테스트한다.
8.4.0 디버깅
- 문제가 발생한 코드를 디버깅 할때 스택트레이스 와 로깅 을 확인한다.
- 하지만 람다와 스트림은 기존 방법으로 확인하기 어렵다.
8.4.1 스택트레이스 확인
- 스택프레임 은 어디서,어떻게 멈췄는지 정보를 제공한다.
- 이 정보는 프로그램에서 호출 위치, 인수값, 메서드 지역변수 등 인수값 등이 저장되어있다.
- 프로그램이 멈췄다면 프로그램이 어떻게 멈췄는지 프레임별로 보여주는 스택트레이스를 얻을 수 있다.
- 람다식은 이름이 없기때문에 컴파일러가 참조하는 이름을 만들어낸다. (보기어려움)
- 그렇기 때문에 메서드 레퍼런스를 최대한 활용해야 한다.
8.4.2 정보 로깅
peek
메서드를 이용하면 중간값 을 출력할 수 있다.
출처
- Java8 in Action
반응형
'개발서적 > 자바8 인 액션' 카테고리의 다른 글
<Lambda> 9. JAVA8 in Action - Chapter 9 (0) | 2019.04.16 |
---|---|
<Lambda> 7. JAVA8 in Action - Chapter 7 (0) | 2019.04.03 |
<Lambda> 6. JAVA8 in Action - Chapter 6 (0) | 2019.04.02 |
<Lambda> 5. JAVA8 in Action - Chapter 5 (0) | 2019.04.01 |
<Lambda> 4. JAVA8 in Action - Chapter 4 (0) | 2019.04.01 |
블로그의 정보
57개월 BackEnd
BFine