가독성 좋은 코드: 다른 사람도 쉽게 이해할 수 있는 코드
가독성을 높이기 위해 문서화를 잘하고, 표준 코딩 규칙을 준수해야 한다
가독성을 높이는 리팩터링
익명 클래스를 람다 표현식으로 리팩터링
익명 클래스는 간결한 반면 람다는 간결
하지만 익명 클래스를 람다 표현식으로 바꾸면 모호함이 초래할 수 있다
람다 표현식을 메서드 참조로 리팩터링
메서드 참조의 메서드명으로 코드의 의도를 명확히 할 수 있다
Collecters API를 사용하면 코드의 의도가 더 명확해진다
명령형 데이터 처리를 스트림으로 리팩터링
스트림은 의도를 명확히 보여준다
멀티코어 아키텍처를 효율적으로 이용할 수 있게해준다
람다를 이용해 변화하는 요구사항에 대응할 수 있는 코드를 구현 가능
한 유형의 알고리즘을 보유한 상태에서 런타임에 적절한 알고리즘을 선택하는 기법
특정 알고리즘을 사용해야 하는데 조금 수정하는 상황에서 사용
abstract class OnlineBanking{
public void processCustomer(int id){
Customer c = Database.getCustomerWithId(id);
makeCustomerHappy(c);
}
abstract void makeCustomerHappy(Customer c);
}
위 예시에서 OnlineBanking을 상속 받아 makeCustomerHappy 메서드를 구현할 수 있음
이벤트 발생시 한 객체가 다른 객체에 자동으로 알람을 보내야 하는 상황에서 사용
한 객체가 작업 처리 → 다음 객체로 결과 전달 → 다른 객체에서 작업 처리 → 다른 객체로 결과 전달 하는 패턴
인스턴스화 로직을 클라이언트에 노출하지 않고 객체를 만들 때 사용
public class ProductFactory {
public static Product createProduct(String name) {
switch(name){
case "loan": return new Loan();
case "stock": return new Stock();
case "bond": return new Bond();
default: throw new RuntimeException("No such product " + name);
}
}
}
Product p = ProductFactory.createProduct("loan");
생성자와 설정을 외부로 노출하지 않고 클라이언트가 단순하게 상품을 생성
디버깅은 다음 두개를 확인해야 한다
람다 표현식과 스트림은 기존의 디버깅을 무력화
프로그램이 메서드를 호출할 때마다 프로그램에서의 호출 위치, 호출할 때의 인수값, 호출된 메서드의 지역 변수 등을 포함한 호출 정보가 생성되며 이들 정보는 스택 프레임에 저장
문제가 발생한 지점에 이르게 된 메서드 호출 리스트를 얻어서 문제를 파악
람다 표현식은 이름이 없기 때문에 복잡한 스택 트레이스가 생성
스트림 파이프라인에서 요소를 처리할 때 peek 메서드를 사용하면 스트림을 소비하지 않고, 중간 값을 확인 하는 것이 가능하다.