답변:
이를 위해 튜토리얼은 실제로 필요하지 않습니다. 캡슐화 에 대한 읽기
private String myField; //"private" means access to this is restricted
public String getMyField()
{
//include validation, logic, logging or whatever you like here
return this.myField;
}
public void setMyField(String value)
{
//include more logic
this.myField = value;
}
someObj.getTime().setHour(5)
하면 someObj
의 내부 상태에 영향을주지 않습니다 . 또한 setter와 getter (접근 자 및 뮤 테이터) 는 매우 엄격한 메서드 시그니처를 가지며 이는 getter에 매개 변수가 없음을 의미합니다. 일반적으로 메서드는 어쨌든 한 가지만 수행해야합니다.
this
더 구체적인 범위를 가진 항목과 충돌하지 않는 한 키워드는 선택 사항입니다. 제공 한 예제에서 생성 된 setter는 이름이 필드 이름과 일치하는 단일 매개 변수를 가지므로 this.fieldName = fieldName
는 필드가 자신에게 할당되는 매개 변수가 아니라 필드가 할당되고 있음을 구별하는 데 사용됩니다 fieldName = fieldname
. getter에는 그러한 충돌이 없습니다.
Java에서 getter 및 setter는 완전히 일반적인 기능입니다. 그들을 getter 또는 setter로 만드는 유일한 것은 관습입니다. foo에 대한 getter는 getFoo라고하고 setter는 setFoo라고합니다. 부울의 경우 getter를 isFoo라고합니다. 또한 'name'에 대한 getter 및 setter의이 예제에 표시된대로 특정 선언이 있어야합니다.
class Dummy
{
private String name;
public Dummy() {}
public Dummy(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
멤버를 공개하는 대신 getter 및 setter를 사용하는 이유는 인터페이스를 변경하지 않고도 구현을 변경할 수 있기 때문입니다. 또한 리플렉션을 사용하여 개체를 검사하는 많은 도구 및 도구 키트는 getter 및 setter가있는 개체 만 허용합니다. 예를 들어 JavaBeans 에는 getter 및 setter 및 기타 요구 사항이 있어야합니다.
error: invalid method declaration; return type required
class Clock {
String time;
void setTime (String t) {
time = t;
}
String getTime() {
return time;
}
}
class ClockTestDrive {
public static void main (String [] args) {
Clock c = new Clock;
c.setTime("12345")
String tod = c.getTime();
System.out.println(time: " + tod);
}
}
프로그램을 실행하면 프로그램이 전원에서 시작됩니다.
setTime()
는 객체 c에 의해 호출됩니다.time
는 전달 된 값으로 설정됩니다.getTime()
는 객체 c에 의해 호출됩니다.tod
및 tod
인쇄 얻을" Why getter and setter methods are evil " 을 읽을 수도 있습니다 .
getter / setter 메서드는 Java에서 일반적이지만 특히 객체 지향 (OO)은 아닙니다. 사실, 코드의 유지 보수성을 손상시킬 수 있습니다. 또한 수많은 getter 및 setter 메서드가 있다는 것은 프로그램이 OO 관점에서 잘 설계되지 않았 음을 나타내는 위험 신호입니다.
이 기사에서는 게터와 세터를 사용하지 말아야하는 이유 (그리고 사용할 수있는 경우)를 설명하고 게터 / 세터 정신에서 벗어나는 데 도움이되는 설계 방법론을 제안합니다.
다음은 mozilla의 자바 스크립트 예제입니다.
var o = { a:0 } // `o` is now a basic object
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
}
});
console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
나는 그들이 굉장 하기 때문에 이것을 많이 사용했습니다 . 코딩 + 애니메이션을 멋지게 꾸밀 때 사용합니다. 예를 들어 Number
웹 페이지에 해당 번호를 표시하는 을 처리하는 setter를 만듭니다 . setter를 사용하면 트위너를 사용하여 이전 번호를 새 번호로 애니메이션합니다 . 초기 숫자가 0이고 10으로 설정하면 숫자가 0에서 10으로 빠르게 뒤집히는 것을 볼 수 있습니다. 예를 들어 0.5 초 정도입니다. 사용자는이 물건을 좋아하고 만드는 것이 재미 있습니다.
sof의 예
<?php
class MyClass {
private $firstField;
private $secondField;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
?>
인용 :
다음은 Java에서 getter 및 setter를 사용하는 가장 간단한 방법을 설명하는 예입니다. 더 간단한 방법으로 이것을 할 수 있지만 getter와 setter는 상속에서 자식 클래스에서 부모 클래스의 private 멤버를 사용할 때 특별한 것이 있습니다. getter 및 setter를 사용하여 가능하게 할 수 있습니다.
package stackoverflow;
public class StackoverFlow
{
private int x;
public int getX()
{
return x;
}
public int setX(int x)
{
return this.x = x;
}
public void showX()
{
System.out.println("value of x "+x);
}
public static void main(String[] args) {
StackoverFlow sto = new StackoverFlow();
sto.setX(10);
sto.getX();
sto.showX();
}
}