세터 및 게터 정보

5733 단어 phpwebdev
간단히 말해서 항상 그런 것은 아닙니다.

나는 그들의 사용에 대해 논의하고 싶습니다.

부인 성명



나는 그것이 오래된 논쟁이라는 것을 알고 있지만 여전히 가치가 있다고 생각합니다. 이 글은 제 생각을 반영합니다.

기초



다음 코드에 익숙할 것입니다.

class Character {

    private $name;

    public function setName(string $name){
        $this->name = $name;
    }
    public function getName(){
        return $this->name;
    }
}

그것이 우리가 게터와 세터라고 부르는 것입니다. 개인 속성에 액세스하는 데만 사용하지 않습니다. 그것은 이상한 사용이 될 것입니다 (일부는 사용이 좋지 않다고 말할 수도 있습니다). 데이터 주위에 유효성 검사 계층을 추가할 수 있습니다.

머피의 법칙



Anything that can go wrong will go wrong.



그것은 당신의 물건에 충분합니다. 오용될 수 있다면 오용될 것입니다. 주로 변경 가능한 클래스를 만들 때 많이 발생합니다. 즉, 클래스 생성 후 상태를 변경할 수 있는 경우입니다.

$character = new Character();
$character->setName("Gokû");
$character->setName("Freezer");
echo $character->getName();// displays "Freezer"

손오공은 이제 냉동실입니다. Universe 7은 더 이상 의미가 없습니다.

별거 아니야? 흠, 당신은 놀랄 수 있습니다. 지불 및 전자 상거래는 어떻습니까? 돈으로 그런 일이 일어나게 하시겠습니까?

미친 사용을 허용하지 마십시오



코드에서 setter를 사용하는 대신 다음과 같이 생성자를 사용할 수 있습니다.

class Character {

    private $name;

    public function __construct(string $name){
        $this->name = $name;
    }
    public function getName(){
        return $this->name;
    }
}

$character = new Character("Gokû");
echo $character->getName();// displays "Gokû"

이렇게 하면 개체를 만들 때 이름이 주입되고 변경할 수 없습니다. 세터가 없으며 속성은 비공개로 유지됩니다.

사용 시기



이 기사에서 명확하지 않을 수 있는 한 가지는 세터와 게터를 사용하는 시기입니다. 방금 우리는 세터가 때때로 잘못된 선택임을 보았습니다.

특히 초보자의 경우 데이터를 캡슐화하는 강력한 방법으로 setter 및 getter를 고려하는 것은 드문 일이 아닙니다. 음, 그런 관점에서 볼 때 누군가 객체의 상태를 그렇게 여러 번 변경할 수 있다면 좋은 생각이 아닐 것입니다.

캡슐화를 깨는 것 같습니까?

어느 정도 그리고 사용에 따라 그렇습니다. 그러나 접근자에 대한 아이디어는 값을 적용하기 전에 값을 확인하고(세터) 처리가 적용될 때마다 값을 가져오는 것입니다.

즉, 세터와 게터는 특정 유형만 허용하고 개발자로서 기대하는 것을 검색하기 위한 것입니다.

개체 디자인



좋은 객체 디자인이란 무엇입니까? 너무 방대한 주제입니다. 이 기사가 짧기를 원하기 때문에 여기서 구체적으로 이야기하지 않을 것입니다.

그러나 세터와 게터의 경우에는 확실히 그렇지 않은 구현 세부 사항을 모르는 것이 가장 좋습니다. 자세한 설명은 해당 게시물을 읽을 수 있습니다.





또한 유효성 검사 계층이 없는 경우 세터와 게터는 거의 관심이 없습니다.

일부 IDE(통합 개발 환경)는 종종 자동화 기능(예: "모든 속성에 대해 getter 및 setter 설정")과 함께 setter 및 getter의 사용을 권장합니다. 의심 할 여지없이 편리하지만 (모든 것을 반복해서 입력 할 필요는 없음) IMHO는 이상적이지 않습니다.

일부 개발자는 세터와 게터를 안티 패턴으로 간주합니다.

결론



IMHO, 불변성은 가능할 때 더 나은 선택이므로 세터가 없습니다. 팀의 새로운 개발자에게 특히 유용합니다. 클래스가 변경 가능해야 하지만 변경할 수 없기 때문에 몇 가지 버그가 발생할 수 있습니다.

세터를 절대 사용해서는 안 된다는 의미는 아닙니다(일부 개발자는 그렇다고 말합니다). 체계적으로 사용하지 마십시오. 문제가 해결된다고 생각하더라도 함정입니다.

좋은 웹페이지 즐겨찾기