> Java > java지도 시간 > 객체 지향 프로그래밍에서 Getter와 Setter를 언제 피해야 합니까?

객체 지향 프로그래밍에서 Getter와 Setter를 언제 피해야 합니까?

Susan Sarandon
풀어 주다: 2024-12-12 18:55:09
원래의
859명이 탐색했습니다.

When Should You Avoid Getters and Setters in Object-Oriented Programming?

Getter 및 Setter: 지혜롭게 설계

소프트웨어 엔지니어링에서 getter와 setter는 각각 개인 변수의 접근자 및 수정자 역할을 합니다. 이는 좋은 객체 지향 프로그래밍 관행에 필수적일 수 있지만 잠재적인 디자인 단점에 관한 논쟁이 있어 왔습니다.

한 가지 일반적인 비판은 getter와 setter가 불필요한 캡슐화 위반을 만들어 내부 변수를 조작에 노출시킨다는 것입니다. 다음 코드 조각을 고려하세요.

private int score;

public int getScore() { return score; }

public void setScore(int score) { this.score = score; }
로그인 후 복사

getScore() 메서드를 사용하면 개인 점수 변수에 직접 액세스할 수 있고 setScore()를 사용하면 임의의 값 할당이 가능합니다. 이는 아래 코드에 설명된 것처럼 일관되지 않거나 유효하지 않은 상태 변경으로 이어질 수 있습니다.

// Attempt to increment score by destroying an enemy
game.setScore(game.getScore() + ENEMY_DESTROYED_SCORE);
로그인 후 복사

이 접근 방식은 점수를 임의로 설정하지 않고 증가만 할 수 있는 경우 오류가 발생하기 쉽습니다. 더 적절한 디자인은 점수 증가 작업을 캡슐화하는 전용 방법을 만드는 것입니다.

public void addScore(int delta) { score += delta; }
로그인 후 복사

세터를 제한하고 점수 조작을 위한 대체 방법을 도입함으로써 이 디자인은 데이터 일관성을 보장하고 잘못된 상태 전환을 방지합니다. .

또한 getter와 setter는 객체 간의 긴밀한 결합을 초래할 수 있습니다. 객체의 "활성" 상태가 setter 및 getter 메소드를 통해 제어되는 다음 예를 고려하십시오.

private boolean alive = true;

public boolean isAlive() { return alive; }

public void setAlive(boolean alive) { this.alive = alive; }
로그인 후 복사

나중에 이 논리의 구현이 변경되면 getter 및 setter 서명은 유지 관리를 위해 동일하게 유지됩니다. 호환성. 그러나 이로 인해 기본 데이터 구조(예: "살아 있음" 상태를 나타내는 부울)가 더 이상 객체의 상태를 정확하게 반영하지 못하는 상황이 발생할 수 있습니다.

이러한 설계 문제를 해결하려면 메소드를 생성하는 것이 좋습니다. getter 및 setter에만 의존하는 대신 원하는 작업을 직접 수행합니다. 예를 들어, "살아있음" 상태는 전용 메서드를 통해 처리될 수 있습니다.

private int hp; // Hit points set in constructor

public boolean isAlive() { return hp > 0; } // Same method signature

public void kill() { hp = 0; } // Same method signature

public void damage(int damage) { hp -= damage; }
로그인 후 복사

이 접근 방식은 개체의 활성 상태를 조작하기 위한 논리를 캡슐화하고 다른 개체가 상호 작용할 수 있도록 명확하고 간결한 인터페이스를 제공합니다. .

결론적으로 getter와 setter는 특정 상황에서 유용할 수 있지만 잠재적인 디자인 단점을 인식하는 것이 중요합니다. 데이터 일관성, 개체 캡슐화 및 느슨한 결합을 우선시하는 대체 설계 패턴을 수용함으로써 개발자는 장기적으로 더욱 강력하고 유지 관리가 가능한 소프트웨어를 만들 수 있습니다.

위 내용은 객체 지향 프로그래밍에서 Getter와 Setter를 언제 피해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿