더북(TheBook)

2.1.1 접근자 메서드와 변경자 메서드


date.plusDays(1) 메서드 호출을 다시 생각해 보자. LocalDate 클래스의 설계자들은 plusDays 메서드를 두 가지 방법으로 구현할 수 있었다. 첫 번째 방법은 date 객체의 상태를 변경하고 아무것도 반환하지 않는다. 두 번째 방법은 date를 변경하지 않고 새로 생성된 LocalDate 객체를 반환한다. 앞에서 살펴보았듯이 설계자들은 두 번째 방법을 선택했다.

호출되는 객체를 변경하는 메서드를 변경자(mutator)라고 하며, 객체를 변경하지 않는 메서드를 접근자(accessor)라고 한다. 예를 들어 LocalDate 클래스의 plusDays 메서드는 접근자다.

사실 LocalDate 클래스의 모든 메서드가 접근자다. 객체 변경은 위험할 수 있으므로(특히 두 연산이 객체 하나를 동시에 변경할 때) 갈수록 이런 형태가 보편화된다. 요즘은 대다수 컴퓨터에 CPU가 여러 개 있으므로 동시 접근의 안전성은 중요한 문제다. 이 문제를 해결하는 방법 중 하나는 접근자 메서드만 제공해 불변(immutable) 객체로 만드는 것이다.

그래도 여전히 변경이 필요할 때가 많다. 변경자 예로 ArrayList 클래스의 add 메서드가 있다. add를 호출하면 배열 리스트 객체가 변경된다.

ArrayList<String> friends = new ArrayList<>();

    // friends가 비어 있다.

friends.add("Peter");

    // friends의 크기는 1이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.