Java

Getter / Setter

공부처음하는사람 2024. 6. 23. 22:51


Setter

객체의 필드를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있다.

예를 들어 자동차의 속력은 음수가 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성이 깨지게 된다.

 

이러한 문제점 때문에 직접적인 외부에서의 필드 접근을 막고, 그 대신 메소드를 통해 필드에 접근하는것을 선호한다.

메소드가 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는게 Setter 이다.

 

요약: Java에서 Setter를 사용하면 private 필드에 접근하고 값을 설정할 수 있다. 이 때 유효성 검사를 수행할 수 있다.

Setter의 장점

1. 정보 은닉: private필드에 직접 접근할 수 없도록 해 객체 내부 상태를 보호

2. 유효성 검사: Setter 메서드 내부에서 필드 값에 대한 유효성 검사 가능

3. 제어된 접근: 필드 값을 설정할 때 추가 로직을 적용할 수 있음

 

Getter

외부에서 객체의 필드를 읽을 때에도 메소드가 필요한 경우가 있다. 필드값이 객체 외부에서 사용하기에 부적절한 경우,

메소드로 적절한 값으로 변환해서 리턴할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Getter 이다.

 

요약: Getter를 사용하면 private 필드에 대한 읽기 접근할 수 있다. 외부에서 접근할 수 없기 때문에 Getter를 통해 간접적으로 필드 값을 읽을 수 있다.

 

Getter의 장점

1. 정보 은닉: 위와 같음

2. 읽기 전용 접근: 필드 값을 읽기만 할 수 있게해 외부에서 객체 상태를 변경할 수 없도록 할 수 있음

3. 추가 로직 적용: Getter 메서드 내부에서 필드 값을 반환하기 전 추가 로직을 적용할 수 있음

 

public class Person {
    private String name;
    private int age;

    // Setter 메서드에서 유효성 검사 포함
    public void setName(String name) {
        if (name != null && !name.isEmpty()) {
            this.name = name;
        } else {
            throw new IllegalArgumentException("Name cannot be null or empty");
        }
    }

    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        } else {
            throw new IllegalArgumentException("Age must be greater than 0");
        }
    }

    // Getter 메서드
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person();

        person.setName("John");
        person.setAge(30);

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

 

 

Getter / Setter는 private한 값을 보호하기 위해 사용된다고 이해하면 될 것 같다.

'Java' 카테고리의 다른 글

인터페이스 - private 메소드  (0) 2024.07.01
싱글톤  (0) 2024.06.23
이것이 자바다 - 클래스(2)  (0) 2024.06.21
이것이 자바다 - 클래스  (0) 2024.06.19
이것이 자바다 - 열거(Enum) 타입  (0) 2024.06.17