Private 배열에 Public 데이터 할당
정의
public으로 선언된 메소드의 인자가 private로 선언된 배열에 저장되면 private 배열을 외부에서 접근하여 배열 수정과 객체 속성 변경이 가능해집니다.
안전한 코딩기법
public으로 선언된 메소드의 인자를 private로 선언된 배열에 저장하지 않도록 해야합니다. 사용자가 전달한 값으로 클래스 외부에서 private 값을 변경해서는 안되며, 필요한 경우 별도의 인스턴스 변수로 정의하거나, 의도한 기능이라면 전달된 값의 정상 여부를 검증한 후 적용해야 합니다.
코드예제
다음은 안전하지 않은 코드예제로, __를 이용하여 파이썬 내부 배열을 생성하고 외부 값을 대입하는 pubic 메소드를 사용하는 코드입니다.
#Private 배열에 Public 데이터 할당(안전X)
class User:
__private_variable = []
def __init__(self):
pass
def set_private_member(self, input_list):
self.__private_variable = input_list
다음은 안전한 코드예제로, 내부와 외부의 배열이 서로 참조되는 것을 예방하기 위해 [:]로 새로운 객체를 생성하여 값을 대입해야 합니다.
#Private 배열에 Public 데이터 할당(안전O)
class User:
__private_variable = []
def __init__(self):
pass
def set_private_member(self, input_list):
self.__private_variable = input_list[:]
캡슐화/Private 배열에 Public 데이터 할당
[참고문헌] Python 시큐어코딩 가이드(2022) / KISA(한국인터넷진흥원)