Menu
Coddy logo textTech

Getter와 Setter 메서드

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 11번째.

게터(Getter)와 세터(Setter)는 프라이빗 필드에 대한 제어된 접근을 제공하는 메서드입니다. 게터는 필드의 값을 조회하고, 세터는 이를 수정합니다.

명명 규칙은 표준 패턴을 따릅니다: 접두사 get 또는 set 뒤에 첫 글자를 대문자로 바꾼 필드 이름이 옵니다.

public class Product {
    private String name;
    private double price;
    
    // name에 대한 Getter
    public String getName() {
        return name;
    }
    
    // name에 대한 Setter
    public void setName(String name) {
        this.name = name;
    }
    
    // price에 대한 Getter
    public double getPrice() {
        return price;
    }
    
    // 유효성 검사가 포함된 Setter
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

세터(setter)의 진정한 힘은 유효성 검사 로직을 추가할 수 있다는 점입니다. 위의 예시에서, setPrice은(는) 0 이상의 값만 허용하여, 유효하지 않은 데이터로부터 객체를 보호합니다.

boolean 필드의 경우, 게터(getter)는 일반적으로 get 대신 is 접두사를 사용합니다:

private boolean active;

public boolean isActive() {
    return active;
}

또한 게터(getter)만 제공하여 읽기 전용 필드를 만들거나, 세터(setter)만 제공하여 쓰기 전용 필드를 만들 수도 있습니다. 이를 통해 외부 코드가 객체의 데이터와 상호작용하는 방식을 세밀하게 제어할 수 있습니다.

challenge icon

챌린지

쉬움

유효성 검사 로직과 함께 getter 및 setter의 강력함을 보여주는 Temperature 변환기를 만들어 보겠습니다.

코드를 정리하기 위해 두 개의 파일을 생성합니다:

  • Temperature.java: 섭씨 온도를 저장하는 Temperature 클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:
    • private celsius 필드 (double)
    • 온도가 물리적으로 가능한지 여부를 추적하는 private valid 필드 (boolean)
    • celsius 값을 반환하는 getter getCelsius()
    • 절대 영도(-273.15) 이상의 값만 허용하는 setter setCelsius(). 값이 유효하면 valid를 true로 설정하고, 그렇지 않으면 celsius를 변경하지 않고 valid를 false로 설정합니다.
    • boolean 필드에 대한 getter isValid() (참고: boolean getter는 is 접두사를 사용합니다)
    • 공식 (celsius * 9/5) + 32를 사용하여 온도를 화씨로 변환하여 반환하는 getter getFahrenheit()
  • Main.java: Temperature 객체를 생성하고, 섭씨 값을 입력으로 읽어 setter를 사용하여 설정한 다음, 온도가 유효한지 여부와 화씨에 해당하는 값을 출력합니다. 출력 형식은 다음 두 줄로 구성합니다:
    • "Valid: " 뒤에 true 또는 false
    • "Fahrenheit: " 뒤에 X.X (소수점 첫째 자리까지 표시)

입력으로 섭씨 온도를 나타내는 double 값 하나를 받게 됩니다.

화씨 출력을 소수점 첫째 자리까지 포맷팅하려면 String.format("%.1f", value)를 사용할 수 있습니다.

치트 시트

Getter와 setter는 프라이빗 필드에 대한 제어된 접근을 제공하는 메서드입니다. getter는 필드의 값을 가져오고, setter는 필드의 값을 수정합니다.

명명 규칙은 표준 패턴을 따릅니다. get 또는 set 접두사 뒤에 첫 글자를 대문자로 바꾼 필드 이름을 붙입니다.

public class Product {
    private String name;
    private double price;
    
    // name을 위한 Getter
    public String getName() {
        return name;
    }
    
    // name을 위한 Setter
    public void setName(String name) {
        this.name = name;
    }
    
    // price를 위한 Getter
    public double getPrice() {
        return price;
    }
    
    // 유효성 검사가 포함된 Setter
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

Setter에는 유효하지 않은 데이터로부터 객체를 보호하기 위한 유효성 검사 로직을 포함할 수 있습니다. 위 예시에서 setPrice는 음수가 아닌 값만 허용합니다.

boolean 필드의 경우, getter는 get 대신 is 접두사를 사용합니다:

private boolean active;

public boolean isActive() {
    return active;
}

getter만 제공하여 읽기 전용 필드를 만들거나, setter만 제공하여 쓰기 전용 필드를 만들 수 있습니다.

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: Temperature 객체 생성하기
        
        // TODO: setter를 사용하여 celsius 값 설정하기
        
        // TODO: 온도가 유효한지 여부 출력하기 (형식: "Valid: true" 또는 "Valid: false")
        
        // TODO: 화씨(Fahrenheit) 변환값 출력하기 (형식: "Fahrenheit: X.X")
        // Hint: 소수점 첫째 자리까지 표현하려면 String.format("%.1f", value)를 사용하세요
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨