Computer Science

[객체지향프로그래밍] java의 Getter, setter에 대하여

imsunbow 2024. 6. 14. 09:00

Java에서 getter와 setter는 객체의 캡슐화(encapsulation)를 지원하는 중요한 메서드이다. 이 메서드들은 클래스의 멤버 변수를 외부에서 직접 접근하지 못하도록 보호하고, 대신 간접적으로 접근하고 수정할 수 있는 방법을 제공한다. getter와 setter의 주요 목적은 데이터의 무결성을 유지하면서 접근을 제어하는 것이다.

Getter와 Setter의 개념

  • Getter 메서드: 클래스의 멤버 변수 값을 반환하는 메서드이다. 일반적으로 get이라는 접두사와 함께 변수의 이름을 사용하여 메서드를 정의한다.
  • Setter 메서드: 클래스의 멤버 변수 값을 설정하는 메서드이다. 일반적으로 set이라는 접두사와 함께 변수의 이름을 사용하여 메서드를 정의한다.

[예제]

 

public class Person {
    // private 멤버 변수
    private String name;
    private int age;

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

    // name의 setter 메서드
    public void setName(String name) {
        this.name = name;
    }

    // age의 getter 메서드
    public int getAge() {
        return age;
    }

    // age의 setter 메서드
    public void setAge(int age) {
        // age가 0 이상일 때만 설정
        if (age >= 0) {
            this.age = age;
        } else {
            System.out.println("Age cannot be negative.");
        }
    }

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

        // setter 메서드를 사용하여 값 설정
        person.setName("John");
        person.setAge(25);

        // getter 메서드를 사용하여 값 가져오기
        System.out.println("Name: " + person.getName()); // 출력: Name: John
        System.out.println("Age: " + person.getAge());   // 출력: Age: 25
    }
}

 

주요 특징

  1. 캡슐화: 멤버 변수를 private로 선언하고 getter와 setter를 통해 접근함으로써, 외부 코드가 변수에 직접 접근하지 못하게 하고 데이터의 무결성을 유지할 수 있다.
  2. 유효성 검사: setter 메서드 내부에서 유효성 검사를 할 수 있다. 예를 들어, 나이(age)가 음수가 되지 않도록 제약을 걸 수 있다.
  3. 변경 용이성: 클래스의 내부 구현을 변경하더라도, getter와 setter를 통해 외부 인터페이스를 유지할 수 있다. 예를 들어, 멤버 변수의 이름을 변경하더라도 getter와 setter 이름을 그대로 유지하면 외부 코드에 영향을 주지 않는다.

장단점

  • 장점:
    • 데이터 캡슐화를 통해 클래스 내부 데이터를 보호할 수 있다.
    • setter 메서드를 통해 데이터 설정 시 유효성 검사를 할 수 있다.
    • 객체의 상태를 제어하고 관리하기 쉬워진다.
  • 단점:
    • 단순히 변수에 접근하는 경우에도 메서드를 사용해야 하므로 코드가 길어질 수 있다.
    • 잘못된 사용 시 오히려 코드의 가독성이 떨어질 수 있다.

getter와 setter를 사용하면 객체 지향 프로그래밍의 기본 원칙인 캡슐화를 효과적으로 구현할 수 있으며, 데이터의 무결성을 유지하면서 클래스의 멤버 변수에 접근하고 수정할 수 있다.

 
 
반응형