Ruby - encapsulation,@instance variable, get/set

Minsoo·2021년 9월 23일
0

Ruby

목록 보기
7/8
post-thumbnail

1. encapsulation

  • 변수가 외부 영향을 직접적으로 영향을 받지 않게 잘 보호하는 것이 중요함.
  • 데이터도 중요
  • 따라서 캡슐레이션을 통해 보호.

2. 인스턴스 변수 접근 특성

  • 루비는 메소드 외부에서 인스턴스 변수 접근을 불허한다.
class C
 def init(v)
  @value = v # 인스턴스변수
 end
 def show()
 p @value
 end
end

c1 = C.new(10)
# p c1.value >> output error
# c1.value = 20 >> output error

c1.show() # 10 출력. 
c1 = C.new(10)

메소드로 취급해서 에러남.
메소드 안이 아니라 바깥에서 c1에서 직접 value를 쓰려고 했으니 / 메소드 외부에서 인스턴스 접근은 루비에서는 허용 안함. 따라서 undefined 결과.
(파이썬은 인스턴스 변수 접근 허용)

c1.show()

show 메소드안에서 인스턴스 변수 접근 허용되므로 값 출력 가능.

3. getter / setter

class C
  def initialize(v)
    @value = v
  end
  def show()
    p @value
  end
  def getValue()
    return @value
  end
  def setValue(v)
    @value = v
  end
end
c1 = C.new(10)
# p c1.value
p c1.getValue() 
# c1.value = 20
c1.setValue(20) 
p c1.getValue()
  • 메소드 안에서는 접근 가능
  • getValue: 인스턴스 밸류 받아오는 메소드 암시하는 이름 get을 붙이는 것은 관습적인 것. /
  • setValue : instance밸류값 설정하는 것을 암시하는 메소드 이름.
  • 이러한 스타일, 인스턴스변수를 직접 수정하지 않고, 메소드를 통해 수정하는 메소드를 set/get메소드라고 한다.
profile
Hello all 👋🏻 📍London

0개의 댓글