set / get method
instance 변수의 값을 불러오거나 변경하기 위한 method
<ruby>
p c1.value
c1.value = 20
ruby에서는 instance(c1)에 직접 접근해서 value 값을 불러오거나 변경하는 것이 불가능 하다.
def show()
p @value
end
c1.show()
그래서 instance 변수에 접근하기 위해서는 method를 만들어서 instance 변수에 접근해야한다.
다만, 이것을 편리하게 해주는 명령어가 있다.
속성 (attribute)
내부에서 접근하는 것이아니라 외부에서 접근하도록 도와주는 instance변수를 속성이라고 한다.
attr_reader :value
attr_writer :value
attr_accessor :value
attr_reader :value -> value 값을 불러올 수 있게 해줌
attr_writer :value -> value 값을 변경할 수 있게 해줌
attr_accessor :value -> 위에 두가지 기능을 모두 수행가능하게 해줌
그러면 attr_accessor만 쓰면 되는거 아니야???
-> value의 값이 변경될 수 있는 위험이 있는 경우에는 reader만 사용하게 하기 위해서
<python>
c1 = C(10)
print(c1.value)
c1.value = 20
print(c1.value)
python에서는 method를 통해서 접근하지 않고 직접 instance( c1)에서 접근이 가능하다.
하지만! python도 set / get method를 만들어서 접근하는 것이 좋다
def getValue(self):
return self.value
def setValue(self, v):
self.value = v
c1 = C(10)
print(c1.getValue())
c1.setValue(20)
print(c1.getValue())
instance 변수를 불러오기 위한 get method 와 변경하기 위한 set method를 이용해 불러옴
그렇다면 왜? 이렇게 method를 만들어서 접근을 할까??
다른 사용자가 의도에 맞지않는 변수를 잘못 지정할 수 있기 때문
-> 잘못 된 데이터로 잘못 된 결과가 나올 수 있기 때문에
python은 set / get method를 사용하지 않아도 직접 instance 변수에 접근할 수 있기 때문에 이런 것을 막을 수 없다.
하지만 , ruby는 set method를 만들지않고 get method만 만들어 놓으면 다른 사용자는 변수를 불러오는 것만 가능하고
값을 변경할 수 있는 방법이 없기 때문에
훨 씬더 엄격하게 프로그래밍을 하도록 할 수 있다.
Python의 instance 변수를 외부에서 접근 못하고 내부에서만 접근하게 만들기위한 방법은??
class C:
def __init__(self, v):
self.__value = v
def show(self):
print(self.__value)
c1 = C(10)
# print(c1.__value)
c1.show()
__변수명 으로 해주게되면 외부에서 instance변수에 접근하는 것이 불가능하다.
def show(self):
print(self.__value)
c1.show()
method를 통해서 내부에서 접근하는 것은 가능하다 .
그래서, instance 변수에 직접적으로 접근할 수 있는 python은 이러한 것을 막기 위해서는 위의 방법대로
코딩을 하면된다.
'IT 공부 > python' 카테고리의 다른 글
2020-10-08 Python 과 Ruby 상속 (2) (0) | 2020.10.08 |
---|---|
2020-10-08 Python 과 Ruby 상속 (0) | 2020.10.08 |
2020-10-07 Python 과 Ruby 객체 지향 프로그래밍(3) (0) | 2020.10.07 |
2020-10-06 Python 과 Ruby 객체 지향 프로그래밍 (2) (0) | 2020.10.07 |
2020-10-06 Python 과 Ruby 객체 지향 프로그래밍 (0) | 2020.10.06 |