Setter 대체하기

HwangBaco·2023년 5월 4일
0

Setter 설정을 피해야 합니다.

Getter는 데이터에 수정을 가하지 않아 아무리 사용해도 무방하지만, Setter는 데이터의 불변성을 해치는 메서드로, 그 자유도가 매우 높아 비즈니스 로직을 구성할 때 최대한 그 사용을 지양해야 합니다.

다행히도, Setter 메서드를 대체할 수 있는 방법은 여러가지가 있습니다. 이러한 방법들은 객체 지향 프로그래밍 원칙을 준수하며, 불변성과 코드의 유지 보수성을 개선하는데 도움이 됩니다.

빌더 패턴:

객체 생성과 초기화를 단계별로 수행할 수 있는 빌더 클래스를 사용하여 setter를 대체할 수 있습니다. 빌더 패턴을 사용하면 객체 생성 시점에 속성을 설정하고 변경 불가능하게 만들 수 있습니다.

public class Employee {
    private final String firstName;
    private final String lastName;

    private Employee(Builder builder) {
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
    }

    public static class Builder {
        private String firstName;
        private String lastName;

        public Builder setFirstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public Builder setLastName(String lastName) {
            this.lastName = lastName;
            return this;
        }

        public Employee build() {
            return new Employee(this);
        }
    }
}

생성자를 통한 초기화:

객체 생성 시점에 생성자를 통해 필요한 속성을 초기화할 수 있습니다. 이 방법을 사용하면 객체가 생성된 후 변경 불가능하게 만들 수 있습니다.

public class Employee {
    private final String firstName;
    private final String lastName;

    public Employee(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters...
}

구체적인 set 메서드 사용:

setter 대신에 객체의 상태를 변경하는데 그 목적이 명확히 드러나는 메서드를 사용할 수 있습니다. 이 방법은 객체의 상태 변경을 더 명확하게 표현하며, 더 나은 캡슐화를 제공합니다.

public class Employee {
    private String status;

    public void setStatusToActive() {
        this.status = "Active";
    }

    public void setStatusToInactive() {
        this.status = "Inactive";
    }

    // Other methods...
}

이러한 방법들을 사용하면 객체의 불변성을 유지하고, 코드의 가독성과 유지 보수성을 개선할 수 있습니다. 한 가지만 외워두고 사용하기보단, 사용 사례에 따라 적절한 방법을 선택하는 것이 좋습니다.

profile
알고리즘 풀이 아카이브

0개의 댓글