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)만 제공하여 쓰기 전용 필드를 만들 수도 있습니다. 이를 통해 외부 코드가 객체의 데이터와 상호작용하는 방식을 세밀하게 제어할 수 있습니다.
챌린지
쉬움유효성 검사 로직과 함께 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를 사용하여 온도를 화씨로 변환하여 반환하는 gettergetFahrenheit()
- private
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)를 사용하세요
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조