홈 › 중급 › 06 / 9

메서드 활용 패턴 (중급)

섹션 6진행 0 / 9

메서드 활용 패턴 (중급)

초급에서 메서드를 "쪼개고 부르는 법"을 배웠다면, 중급은 메서드가 클래스 설계의 도구가 되는 단계입니다. 정적 팩토리, 빌더, 체이닝, 템플릿 메서드, Optional/Result 반환, with-메서드, equals/hashCode/compareTo 표준 구현, 방어적 복사까지 실무 자바 코드에서 매일 마주치는 25개 패턴을 모았습니다. 끝내면 List.of, Integer.valueOf, StringBuilder.append, Comparator.comparing이 왜 그런 모양인지 설명할 수 있습니다.

1. 왜 배우는가

자바 표준 라이브러리를 열어 보면 new로 만드는 것보다 List.of(...), LocalDate.of(2024, 1, 1), Integer.valueOf(1), Optional.empty()처럼 메서드로 만드는 경우가 훨씬 많습니다.

StringBuilder는 .append().append()로 이어지고, Stream은 .filter().map()으로 이어집니다. 이것들은 우연이 아니라 "메서드를 어떻게 설계하면 쓰는 사람이 편하고 실수하지 않는가"를 고민한 결과입니다. 이 패턴들을 모르면 라이브러리를 "외워서" 쓰게 되고, 내 클래스는 생성자 6개짜리 괴물이 됩니다.

중급 메서드 설계의 핵심 질문은 세 가지입니다. 누가 만드는가(생성자 vs 정적 팩토리 vs 빌더), 무엇을 돌려주는가(null vs 빈 컬렉션 vs Optional vs Result), 받은 것을 믿어도 되는가(방어적 복사, 불변 반환). 각 질문에 대한 답이 곧 패턴입니다. 특히 "null을 돌려주지 않는다"와 "받은 컬렉션은 복사한다"는 실무에서 NPE와 버그의 절반을 없애는 습관입니다.

또한 equals/hashCode/toString/compareTo는 모든 값 객체가 갖춰야 하는 표준 메서드 4종입니다. 이것이 잘못되면 HashSet에 같은 값이 두 번 들어가고, TreeSet이 정렬을 못 하고, 로그에 Money@1b6d3586이 찍힙니다. 01·04·05 레슨에서 흩어져 배운 것을 여기서 하나의 값 객체(Money)로 완성합니다.