T.I.L #8 Getter와 Setter

개발자지망생·2023년 10월 20일
0

Getter와 Setter란?

Getter와 Setter는 객체 지향 프로그래밍에서 사용되는 메소드로, 객체의 데이터(상태)를 캡슐화하고 제어하기 위해 사용된다. 이들 메소드는 클래스의 인스턴스 변수(멤버 변수)에 접근하고 값을 가져오거나 설정하는 데 사용된다.

1. Getter(접근자 메소드)

  1. Getter 메소드는 주로 객체의 인스턴스 변수 값을 반환하는 메소드이다.
  2. Getter 메소드의 이름은 get으로 시작하며, 그 뒤에 해당 변수의 이름(첫 글자는 대문자)을 붙인다.
  3. Getter 메소드는 주로 인스턴스 변수를 읽기 위해 사용되며, 외부에서 객체의 데이터를 읽는 데 활용된다.
  4. Getter 메소드는 데이터를 읽는 용도로만 사용하며 변수 값을 수정하지 않는다.
  5. Getter 메소드는 보통 public 접근 제어자를 사용하여 외부에서 접근할 수 있도록 한다.
public class Person {
    private String name;

    public String getName() {
        return name; // name 변수의 값을 반환
    }
}

2. Setter(설정자 메소드)

  1. Setter 메소드는 주로 객체의 인스턴스 변수에 값을 설정하는 메소드이다.
  2. Setter 메소드의 이름은 set으로 시작하며, 그 뒤에 해당 변수의 이름(첫 글자는 대문자)을 붙인다.
  3. Setter 메소드는 주로 인스턴스 변수에 값을 설정하거나 수정하는 데 사용된다.
  4. Setter 메소드는 변수 값을 설정하는 용도로만 사용하며, 값을 읽지 않는다.
  5. Setter 메소드는 데이터를 수정하기 위해 사용되므로, 보통 public 접근 제어자를 사용하여 외부에서 접근할 수 있도록 한다.
public class Person {
    private String name;

    public void setName(String name) {
        this.name = name; // name 변수에 값을 설정
    }
}

3. Getter와 Setter의 사용 이점

  1. 캡슐화 : Getter와 Setter는 데이터 캡슐화의 핵심 요소이다. 직접 인스턴스 변수에 접근하지 않고 메소드를 통해 데이터에 접근하면 데이터의 무결성을 유지하고 보호할 수 있다.

  2. 제어 : Setter를 사용하면 데이터에 대한 입력을 검증하거나 제한할 수 있으며, Getter를 통해 읽기 전에 데이터를 가공할 수 있다.

  3. 유지보수 : 클래스의 내부 표현을 변경하지 않고도 Getter와 Setter를 수정할 수 있다. 이로써 다른 코드에 영향을 주지 않고 객체의 동작을 변경할 수 있다.

  4. 확장성 : 나중에 인스턴스 변수에 더 많은 로직 또는 계산을 추가하려면 Getter와 Setter를 수정하면 된다.

일반적으로 인스턴스 변수를 private로 선언하고, Getter와 Setter를 통해 외부에서 해당 변수에 접근하도록 하는 것이 객체 지향 프로그래밍의 모범 사례이다.

Getter와 Setter 추가 설명

1. Getter와 Setter의 사용 사례

  • 데이터 유효성 검사 : Setter를 사용하여 데이터의 유효성을 검사하고, 잘못된 값이 설정되는 것을 방지할 수 있다. 예를 들어, 나이가 음수가 될 수 없다면 Setter에서 유효성 검사를 수행할 수 있다.
public class Person {
    private int age;
    
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}
  • 읽기 전 계산 : Getter를 사용하여 데이터를 반환하기 전에 특정 계산을 수행할 수 있다. 예를 들어, 화씨 온도를 섭씨로 변환하여 반환할 수 있다.
public class Temperature {
    private double fahrenheit;
    
    public double getCelsius() {
        return (fahrenheit - 32) * 5/9;
    }
}

2. Lombok 라이브러리와 Getter/Setter 자동 생성

Lombok은 Java의 Getter와 Setter를 자동으로 생성하는 라이브러리이다. Lombok을 사용하면 코드의 간결성을 유지하면서 Getter와 Setter를 생성할 수 있다.

import lombok.Getter;
import lombok.Setter;

public class Person {
    @Getter @Setter
    private String name;
}

3. 자동 생성 도구

몇몇 통합 개발 환경(IDE)과 코드 생성 도구는 Getter와 Setter를 자동으로 생성할 수 있다. 이를 통해 일일이 Getter와 Setter 메소드를 작성할 필요 없이 편리하게 사용할 수 있다.

4. 인스턴스 변수에 직접 접근 vs Getter와 Setter

인스턴스 변수에 직접 접근하는 것과 Getter와 Setter를 사용하는 것 간의 선택은 개발자의 필요에 따라 다를 수 있다. 보안성, 데이터 유효성 검사, 로깅 및 계산 등의 요소를 고려하여 결정할 수 있다.

5. 불변(Immutable) 객체

Setter 메소드를 사용하여 값을 변경하는 대신, 불변 객체를 생성하는 방식을 선택할 수 있다. 불변 객체는 객체의 상태를 변경할 수 없도록 설계되며, 불변성을 유지하기 위해 Setter를 사용하지 않는다. 이러한 방식은 다중 스레드 환경에서 안전하고 예측 가능한 객체를 만들 때 유용하다.

참고한 것 : 자바의 정석 , 구글 서칭

0개의 댓글