반응형 SMALL 그룹 스터디 공부(IT 서적)52 chapter 11 null 대신 Optional 클래스 이 장의 내용 null 참조의 문제점과 null을 멀리해야 하는 이유 null 대신 Optional : null로부터 안전한 도메인 모델 재구현하기 Optional 활용 : null 확인 코드 제거하기 Optional에 저장된 값을 확인하는 방법 값이 없을 수도 있는 상황을 고려하는 프로그래밍 11.1 값이 없는 상황을 어떻게 처리할까? public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getName(); } 위 코드에서 person이 null이거나 getCar(), getInsurance()가 null을 반환한다면 어떻게 될까? 11.1.1 보수적인 자세로 NullPointerException .. 2023. 8. 16. chapter 10 람다를 이용한 도메인 전용 언어 이 장의 내용 도메인 전용 언어(domain-specific languages, DSL)란 무엇이며 어떤 형식으로 구성되는가? DSL을 API에 추가할 때의 장단점 JVM에서 활용할 수 있는 자바 기반 DSL을 깔끔하게 만드는 대안 최신 자바 인터페이스와 클래스에 적용된 DSL에서 배움 효과적인 자바 기반 DSL을 구현하는 패턴과 기법 이들 패턴을 자바 라이브러리와 도구에서 얼마나 흔히 사용하는가? 10.1 도메인 전용 언어 DSL은 특정 비즈니스 도메인의 문제를 해결하기 위해 만든 언어로, 자바에서는 클래스와 메서드를 이용하여 도메인을 표현합니다. DSL은 해당 도메인을 인터페이스로 만든 API와 같은 역할을 합니다. DSL은 특정 도메인에 국한된 용어와 동작을 갖는 범용 프로그래밍 언어가 아닙니다. .. 2023. 8. 10. 05 책임 할당하기_02 다형성을 통해 분리하기 할인 가능 여부를 반환해 주기만 하면 Movie는 객체가 sequenceCondition의 인스턴스인지, periodCondition의 인스턴스인지는 상관하지 않는다. 이 시점이 되면 자연스럽게 역할의 개념이 무대 위로 등장한다. Movie의 입장에서 sequenceCondition과 periodCondition이 동일한 책임을 수행한다는 것은 동일한 역할을 수행한다는 것을 의미한다. 역할을 사용하면 객체의 구체적인 타입을 추상화할 수 있다. 자바에서는 일반적으로 역할을 구현하기 위해 추상 클래스나 인터페이스를 사용한다. 역할을 대체할 클래스들 사이에서 구현을 공유해야 할 필요가 있다면 추상 클래스를 사용하면 된다. 구현을 공유할 필요 없이 역할을 대체하는 객체들의 책임만 정의하고.. 2023. 8. 9. 05 책임 할당하기_01 데이터 중심 설게로 인해 발생하는 문제점을 해결할 수 있는 가장 기본적인 방법은 데이터가 아닌 책임에 초점을 맞추는 것이다. 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다. GRASP 패턴을 이해하고 나면 응집도와 결합도, 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를 트레이오프할 수 있는 기준을 배우게 될 것이다. 01 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음의 두 가지 원칙을 따라야 한다. 1) 데이터보다 행동을 먼저 결정해라 2) 협력이라는 문맥 안에서 책임을 결정해라 데이터보다 행동을 먼저 결정하라 객체를 설계하기 위한 질문의 순서를 바꿔라 데이터 중심의 설계에.. 2023. 8. 7. 04 설계 품질과 트레이드 오프 객체지향 설계의 핵심은 역할, 책임, 협력이다. 협력: 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용이다. 책임: 객체가 다른 객체와 협력하기 위해 수행하는 행동 역할: 대체 가능한 책임의 집합이다. 이 중에서도 가장 중요한 것이 '책임'이다. 책임은 객체지향 애플리케이션의 품질을 결정한다. 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 것이다. 즉, 객체지향 설계의 핵심이 책임이고 책임을 할당하는 과정이 응집도, 결합도와 연관되어있다. 설계라는 것은 변경을 위해 존재하고 변경 시에는 반드시 비용이 발생한다. 훌륭한 설계란 적절한 비용 안에서 쉽게 변경할 수 있는 응집도가 높고 서로 느슨하게 결합된 요소로 구성된 .. 2023. 7. 31. chapter 9 리펙터링, 테스팅, 디버깅 람다 표현식으로 코드 리팩터링하기 람다 표현식이 객체지향 설계 패턴에 미치는 영향 람다 표현식 테스팅 람다 표현식과 스트림 API 사용 코드 디버깅 9.1 가독성과 유연성을 개선하는 리팩터링 람다, 메서드 참조, 스트림 등의 기능을 이용해 가독성을 높이고 유연한 코드로 리팩토링하는것을 설명. 9.1.1 코드 가독성 개선 익명 클래스를 람다 표현식으로 리팩토링 람다 표현식을 메서드 참조로 리팩토링 명령형 데이터 처리를 스트림으로 리팩토링 9.1.2 익명 클래스를 람다 표현식으로 리팩터링하기 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩토링 할 수 있다. Runnable r1 = new Runnable() { // 익명 클래스를 사용한 이전 코드 @Override public void r.. 2023. 7. 30. 이전 1 2 3 4 5 6 7 8 9 다음 반응형 LIST