접근 자와 수정 자 (일명 setter 및 getter)는 세 가지 주요 이유로 유용합니다.
- 변수에 대한 액세스를 제한합니다.
- 예를 들어 변수에 액세스 할 수는 있지만 수정할 수는 없습니다.
- 그들은 매개 변수의 유효성을 검사합니다.
- 부작용이 발생할 수 있습니다.
웹의 대학교, 온라인 강좌, 튜토리얼, 블로그 기사 및 코드 예제는 모두 접근 자와 수정 자의 중요성에 대해 강조하고 있으며, 요즘에는 코드에 대해 "필수"인 것 같습니다. 따라서 아래 코드와 같이 추가 값을 제공하지 않아도 찾을 수 있습니다.
public class Cat {
private int age;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
즉, 더 유용한 수정자를 찾는 것이 일반적입니다. 실제로 매개 변수의 유효성을 검사하고 유효하지 않은 입력이 제공된 경우 예외를 발생 시키거나 부울을 반환하는 수정자는 다음과 같습니다.
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
그러나 그때조차도 수정자가 생성자에서 호출되는 것을 거의 보지 못하므로 내가 직면 한 간단한 클래스의 가장 일반적인 예는 다음과 같습니다.
public class Cat {
private int age;
public Cat(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
}
그러나이 두 번째 접근 방식이 훨씬 안전하다고 생각할 것입니다.
public class Cat {
private int age;
public Cat(int age) {
//Use the modifier instead of assigning the value directly.
setAge(age);
}
public int getAge() {
return this.age;
}
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
}
당신의 경험에 비슷한 패턴이 보입니까, 아니면 단지 운이 좋지 않습니까? 그리고 그렇게한다면, 그 원인이 무엇이라고 생각하십니까? 생성자에서 수정자를 사용하는 데 명백한 단점이 있습니까? 아니면 더 안전한 것으로 간주됩니까? 다른 것입니까?