Private 배열 직접 반환

Private 배열 직접 반환

설명

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

잠재적 영향

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

해결 방법

  • 내부 배열은 스프레드, slice(), Array.from() 등으로 복사해 반환하세요.
  • 외부 수정이 불필요한 값은 불변 자료 구조로 노출하세요.
  • 얕은 복사는 중첩 객체까지 분리하지 않습니다. 요소가 변경 가능한 객체라면 필요한 깊이까지 복사하거나 불변 값으로 만드세요.

예시

변경 전

javascript
class AccessPolicy {
  #roles = [];

  getRoles() {
    return this.#roles;
  }
}

변경 후

javascript
class AccessPolicy {
  #roles = [];

  getRoles() {
    return [...this.#roles];
  }
}

설명:

  • 변경 전: 공개 메서드가 내부 private 배열을 그대로 반환하면 호출자가 반환된 참조를 통해 객체 내부 상태를 직접 변경할 수 있습니다.
  • 변경 후: 내부 배열은 스프레드, slice(), Array.from() 등으로 복사해 반환하세요.

참조