Private 배열 직접 반환

Private 배열 직접 반환

설명

공개 메서드가 내부 private 리스트나 배열을 그대로 반환하면 호출자가 반환된 참조를 통해 객체 내부 상태를 직접 변경할 수 있습니다.

잠재적 영향

  • 권한 목록, 정책 목록, 검증된 값 목록이 외부 코드에 의해 변경될 수 있습니다.
  • 객체의 불변 조건이 우회될 수 있습니다.

해결 방법

  • Python 리스트는 슬라이스, list(), copy() 등으로 복사해 반환하세요. NumPy 배열의 기본 슬라이싱은 뷰를 만들므로 독립된 데이터가 필요하면 배열의 copy()를 사용하세요.
  • 외부 수정이 불필요한 값은 튜플 같은 불변 자료형으로 노출하세요. 얕은 복사와 튜플도 내부의 변경 가능한 요소는 공유하므로 해당 요소까지 보호해야 하는지 확인하세요.

예시

아래는 요소 자체를 별도로 복사할 필요가 없는 Python 리스트를 가정합니다.

변경 전

python
def get_values(self):
    return self.__values

변경 후

python
def get_values(self):
    return self.__values[:]

설명:

  • 변경 전: 공개 메서드가 내부 private 리스트나 배열을 그대로 반환하면 호출자가 반환된 참조를 통해 객체 내부 상태를 직접 변경할 수 있습니다.
  • 변경 후: 리스트를 얕게 복사해 반환된 리스트의 추가·삭제·요소 교체가 내부 리스트에 직접 반영되지 않게 합니다.

참조