[java] 게터와 세터는 어떻게 작동합니까?

나는 PHP 세계에서 왔습니다. 게터와 세터가 무엇인지 설명하고 몇 가지 예를 들어 줄 수 있습니까?



답변

이를 위해 튜토리얼은 실제로 필요하지 않습니다. 캡슐화 에 대한 읽기

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;
}


답변

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 및 기타 요구 사항이 있어야합니다.


답변

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);
 }
}  

프로그램을 실행하면 프로그램이 전원에서 시작됩니다.

  1. 객체 c가 생성됩니다.
  2. 함수 setTime()는 객체 c에 의해 호출됩니다.
  3. 변수 time는 전달 된 값으로 설정됩니다.
  4. 함수 getTime()는 객체 c에 의해 호출됩니다.
  5. 시간이 돌아왔다
  6. 그것은에 패스포트됩니다 todtod인쇄 얻을

답변

Why getter and setter methods are evil ” 을 읽을 수도 있습니다 .

getter / setter 메서드는 Java에서 일반적이지만 특히 객체 지향 (OO)은 아닙니다. 사실, 코드의 유지 보수성을 손상시킬 수 있습니다. 또한 수많은 getter 및 setter 메서드가 있다는 것은 프로그램이 OO 관점에서 잘 설계되지 않았 음을 나타내는 위험 신호입니다.

이 기사에서는 게터와 세터를 사용하지 말아야하는 이유 (그리고 사용할 수있는 경우)를 설명하고 게터 / 세터 정신에서 벗어나는 데 도움이되는 설계 방법론을 제안합니다.


답변

1. 최고의 게터 / 세터는 똑똑합니다.

다음은 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 초 정도입니다. 사용자는이 물건을 좋아하고 만드는 것이 재미 있습니다.

2. PHP의 게터 / 세터

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();
        }

    }


답변