본문 바로가기
반응형
SMALL

전체 글65

chapter 13 디폴트 자바 8이전에 자바에서는 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현하여 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그런데 인터페이스에 새로운 메서드를 추가하는 경우가 있으면 해당 인터페이스를 구현했던 모든 클래스의 구현을 고쳐야 한다. 자바8 API에서 List 인터페이스에 sort같은 메서드를 추가했기 때문에 문제가 발생할 수 있다. 자바 8에서 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공하는데 첫 번째, 인터페이스 내부에 정적 메서드를 사용하는 것 두 번째, 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 기능을 사용하는 것 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. .. 2023. 8. 25.
chapter 12 새로운 날짜와 시간 API 자바 8 이전의 날짜와 시간 API의 문제들 Date 클래스는 직관적이지 못하며 자체적으로 시간대 정보를 알고 있지 않다 Date를 deprecated 시키고 등장한 Calendar 클래스 또한 쉽게 에러를 일으키는 설계 문제를 갖고 있다 Date와 Calendar 두 가지 클래스가 등장하면서 개발자들에게 혼란만 가중되었다. 날짜와 시간을 파싱하는데 등장한 DateFormat은 Date에만 지원되었으며, 스레드에 안전하지 못했다. Date와 Calendar는 모두 가변 클래스이므로 유지보수가 아주 어렵다. 12.1 LocalDate, LocalTime, Instant, Duration, Period 클래스 java.time 패키지는 LocalDate, LocalTime, LocalDateTime, Ins.. 2023. 8. 24.
07 객체 분해 * 장기 기억: 경험한 내용을 수개월에서 길게는 평생에 걸쳐 보관하는 저장소를 의미한다. * 단기 기억: 보관돼 있는 지식에 직접 접근할 수 있지만 정보를 보관할 수 있는 속도와 공간적인 측면 모두에서 제약을 받는다. * 인지 과부화: 문제 해결에 필요한 요소의 수가 단기 기억의 용량을 초과하는 순간 문제 해결 능력은 급격하게 떨어지고 만다. * 인지 과부하 방지 : 단기 기억 안에 보관할 정보의 양을 조절하는 것 * 인류가 복잡한 분야(소프트웨어 개발 영역)의 문제를 해결하기 위해 사용한 것 * 추상화 : 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업. 즉, 한 번에 다뤄야 하는 문제의 크기를 줄이는 것 -> 한 번에 단기 기억에 담을 수 있는 추상화의 수에는 한계가 있지만 추.. 2023. 8. 21.
06 메시지와 인터페이스 훌륭한 객체지향을 위해서는 클래스가 아닌 객체를 지향해야 한다. 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 책임은 객체가 수신할 수 있는 메시지의 기반이 된다. 객체지향 애플리케이션의 가장 중요한 재료는 객체들이 주고받는 메시지다. 매시지들이 객체의 퍼블리 인터페이스를 구성한다. 1. 협력과 메시지 클라이언트-서버 모델 클라이언트: 메시지를 전송하는 객체 Screening은 '가격을 계산하라' 메시지를 전송함으로써 도움 요청 Movie는 '할인 요금을 계산하라' 메시지를 전송함으로써 도움 요청 서버: 메시지를 수신하는 객체 Movie는 가격을 계산하는 서비스를 제공함으로써 메시지에 응답 DiscountPolicy는 할인 요금을 계산하는 서비스를 제공함으로써 메시지에 응답 협력: 클라이언트가.. 2023. 8. 18.
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.
반응형
LIST