본문 바로가기

전체 글29

[모던 자바 인 액션] 자바 모듈 시스템 추론하기 쉬운 소프트웨어 유지보수를 하기 쉬운 코드는 추론이 쉬운 코드라고 할 수 있다. 우리는 관심사 분리와 정보 은닉을 통해서 추론하기 쉬운 소프트웨어를 만들 수 있다. 1. 관심사 분리컴퓨터 프로그램을 고유의 기능으로 나누는 것을 권장하는 원칙이다. 예를 들어서 파일, URL 등 다양한 형식으로 구성된 지출을 파싱하고, 분석한 후 결과를 고객에게 보고하는 프로그램이 있을 때, 데이터를 읽어오는 부분, 파싱하는 부분, 모델링하는 부분, 분석하는 부분으로 관심사를 분리할 수 있다. 2. 정보 은닉세부 구현을 숨기도록 장려하는 원칙이다. 세부 구현을 숨김으로써 요구 사항이 변하여 동작이 변경되어도 다른 부분에 영향을 미칠 가능성을 낮출 수 있다. 모듈 시스템의 설계 이유 1. 기존 모듈화의 한계 자바.. 2025. 5. 9.
[모던 자바 인 액션] 디폴트 메서드 변화하는 API 우리가 많은 사용자들에게 인터페이스를 제공한다고 생각해보자. 그러다가 갑자기 인터페이스에 새로운 메서드의 추가가 필요해졌다. 만약 추상 메서드로 추가하게 된다면, 이 인터페이스를 사용하고 있는 기존의 모든 코드들을 변경해야 할 것이다. 이럴 때 사용할 수 있는 것이 디폴트 메서드이다. 디폴트 메서드를 사용하면 기본 구현을 제공하기 때문에 인터페이스에 새로운 메서들을 추가해도 기존에 사용하던 코드에 사이트 이펙트를 주지 않는다. 바이너리 호환성 / 소스 호환성 / 동작 호환성 1. 바이너리 호환성뭔가를 바꾼 이후에도 에러 없이 기존 바이너리가 실행될 수 있는 상황을 의미한다. 2. 소스 호환성고드를 고쳐도 기존 프로그램을성공적으로 재컴파일 할 수 있는 것을 의미한다. 3. 동작 호환성코드.. 2025. 5. 8.
[모던 자바 인 액션] 날짜와 시간 API 기존 날짜와 시간 API의 문제점1. Date라는 하나의 클래스로 날짜와 시간을 모두 관리2. 1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스 등 모호한 설계 -> 2017년 9월 21일을 표현하려면 아래처럼 작성 필요Date date = new Date(117, 8, 21); 3. toString으로 반환되는 문자열 활용도가 떨어짐4. Calender라는 클래스를 대안으로 제공했지만, 달 인덱스는 여진히 0에서 시작하였음5. DateFormat은 스레드에 안전하지 않았음 LocalDate, LocalTime, LocalDateTime, Instant 1. LocalDate시간을 제외한 날짜를 표현하는 불변 객체# LocalDate 객체 생성LocalDate date = LocalDate.. 2025. 5. 8.
[모던 자바 인 액션] Optional 클래스 NULL로 인해 발생하는 문제 1. 에러의 근원2. 코드를 어지럽힌다.3. 아무 의미가 없다.4. 자바 철학에 위배된다.5. 형식 시스템에 구멍을 만든다. 다른 언어에서는 NULL대신에 무엇을 사용할까? 안전 내비게이션 연산자(그루비): 호출 체인에 NULL참조가 있으면 결과로 NULL반환선택형값(스칼라, 하스켈 등): 주어진 형식의 값을 갖거나 아무값도 갖지 않을 수 있는 값 자바는 선택형값 개념의 영향을 받아서 Optional이라는 새로운 클래스를 제공 Optional 클래스란? Optional이란 선택형값을 캡슐화하는 클래스이다. 값이 있으면 값을 감싸고, 없으면 optinoal.empty()를 반환한다. Optional이란 값을 사용함으로써 해당 값에 Null이 생길 수 있다는 것을 전달할 수.. 2025. 5. 8.