생활코딩

Coding Everybody

닫기

# 객체와 변수

## 인스턴스 변수의 특성

### Python

```class C(object):
def __init__(self, v):
self.value = v
def show(self):
print(self.value)

c1 = C(10)
print(c1.value)
c1.value = 20
print(c1.value)
c1.show()```
```10
20
20```

### Ruby

```class C
def initialize(v)
@value = v
end
def show()
p @value
end
end
c1 = C.new(10)
# p c1.value
# c1.value = 20
c1.show()```
`10`

## set / get 메소드

Python

```class C(object):
def __init__(self, v):
self.value = v
def show(self):
print(self.value)
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())```
```10
20```

ideone.com

```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()
```
```10
20```

ideone.com

## set/get 메소드를 사용하는 이유

### Python

```class Cal(object):
def __init__(self, v1, v2):
if isinstance(v1, int):
self.v1 = v1
if isinstance(v2, int):
self.v2 = v2
return self.v1+self.v2
def subtract(self):
return self.v1-self.v2
def setV1(self, v):
if isinstance(v, int):
self.v1 = v
def getV1(self):
return self.v1
c1 = Cal(10,10)
print(c1.subtract())
c1.setV1('one')
c1.v2 = 30
print(c1.subtract())
```
```20
0
40
-20```

ideone.com

### Ruby

```class Cal
attr_writer :v1
def initialize(v1,v2)
@v1 = v1
@v2 = v2
end
return @v1+@v2
end
def subtract()
return @v1-@v2
end
def setV1(v)
if v.is_a?(Integer)
@v1 = v
end
end
def getV1()
return @v1
end
end
c1 = Cal.new(10,10)
p c1.subtract()
c1.setV1('one')
c1.v1 = 20
c1.getV1()
```
```20
0
30```

ideone.com

## 속성

수업에서는 구분하지 않았습니다만 외부에서 접근 가능한 변수를 파이썬은 property 루비는 attribute라고 합니다.

### Python

```class C(object):
def __init__(self, v):
self.__value = v
def show(self):
print(self.__value)
c1 = C(10)
#print(c1.__value)
c1.show()```
`10`

ideone.com

### Ruby

```class C
#attr_writer :value
attr_accessor :value
def initialize(v)
@value = v
end
def show()
p @value
end
end
c1 = C.new(10)
p c1.value
c1.value = 20
p c1.value
```
```10
20```

ideone.com

## 참고

### 댓글

댓글 본문
1. Byunghawk Lee
감사합니다.
2. Victorim
완료!
3. 냥더쿠
210806
4. 미뇨르
210703 완료!!
5. 정효빈
완료했습니다!
6. 드림보이
잘 들었습니다...
7. 후니
완료
8. Hyunwoo Kim
210206 감사히 잘 들었습니다. :)
9. 홍주호
20.12.13 완료
10. 윤유상
루비에서 인스턴트객체에 직접 접근할 수 없는 이유는, 루비는 파이썬과 다르게 클래스 내 함수를 괄호없이 사용할 수 있어서, 인스턴트변수를 직접 사용할 수 있게하면 변수와 함수 둘 다 괄호없이 사용할 수 있으니까 함수와 변수가 구분이 안되서 접근을 못하게 막아놓은 건 줄 알았는데 아니었네요! 감사합니다!
11. cgoing
cgoing / 2020.09.28
12. 허우룩
2020.09.24
13. Sungjin Yoo
파이썬에서 만약 __value로 외부 접근을 막아 놓은 상태에서 getValue나 setValue 매소드로 접근이 가능한가요? 만들어서 해보긴 했는데 setValue는 되는데 getValue는 되지 않네요. 왜그럴까요.. 코드를 잘못짠건지.... 궁금합니다. 혹시 답변 달아주실 수 있으면 답변 부탁드려요 아무나ㅏ...
14. acs0209
어렵다 어려워 ㅠ
15. 캄바캄바
get 정해진거로쓰는거 set 밖에서 지정해서 변경가능
16. 캄바캄바
2020-08-20
17. PlayerSEAN
쿠키앤크림님 따라잡기
2020/08/06 완료
18. 쿠키앤크림
pupu님 따라잡기
2020/07/03 완료
좀 어렵다
19. 허클베리핀
<북마크>6.7_속성 들을 차례
20. 김광현
6/4완료
21. 라이찡뀨
10/11
22. 라이찡뀨
set/get 메소드를 사용하는이유 4분21초까지 함(기록해놓는거임 나중에 하려고)
23. 맥반장
2020-03-21 완료!
24. oxugi
2020/03/31 완료
25. liero1p
Ruby에서 attr_reader 혹은 attr_writer 를 쓸때 :value를 띄어쓰기하면 에러가 나네요. 참고하세요 :)
26. 도전차차차
2019.10.29
27. 가재준
완료
28. FIRE
20190821 완료
29. 허니비
190807
30. 김민수
루비는 매개변수의 수정과 참조가 외부에서 제한되는 반면
파이썬은 매개변수의 수정과 참조를 할때 메소드를 통하지 않아도 직접 접근이 가능하다
이는 파이썬이 객체를 다루는 사용자가 이 객체를 올바르게 사용할 것이라는 믿음을 전제로 하기 때문인데 이런 접근을 제한하는 방법으로는 __를 붙여 제한이 가능하다
루비와 같은 경우는 기본적으로 접근이 제한되지만 attr_ 을 사용해서 매개변수에 대한 접근이 가능해진다
31. 김민수
Set 메소드와 get 메소드를 사용하는 이유는 객체의 수정과 확인의 용이함 때문.
파이썬의 경우는 set메소드와 get메소드 없이도 변수의 변경 또는 참조가 가능하지만 매개변수의 변화에 대한 보장을 할수 없다. 즉 누군가가 객체를 올바르게 사용할 것 이라는 믿음을 전제로 하기에 오류에 취약해진다는 것이다.
32. 김민수
객체 = 좋은부품이다
캡슐화 하는것은 객체의 오동작을 방지하고 데이터의 오류(불필요한 변화) 를 방지한다
함수 또는 객체역시 케이스의 역할을 한다고 볼 수있다.

파이썬의 경우 객체를 사용할때 메소드 내의 인스턴스 변수를 메소드 밖에서도 접근 가능한 반면
루비의 경우 메소드 내에서만 인스턴스 변수의 참조가 가능하다. 단, show 를 이용할 경우 메소드 외부에서도 참조가 가능함.
33. 얼그레이
인스턴스 변수에 대한 강의를 어제부터 오늘 계속 들었는데 이해가 안 돼서 한번 다시 복습했어요!
그래도 두번째로 들어보니 조금은 알 것 같은 느낌이네요 ㅎㅎ
감사합니다! 190605
34. Hotak Choi
190421 !! 점점 어려워지네요 ㅜㅜ
35. wiseman
0420 1800
36. gogo
190417 1851
완료입니다. 감사합니다.
37. 19.04.15 완료
감사합니다
38. 호두
고맙습니다
39. 호두
고맙습니다
40. 정돌
좋아요! ^^*!
41. 주니
감사합니다.
42. kmw8462
감사합니다.
43. yareuk
2018-12-22
44. 포인드
3번째 강의에서 파이썬에서 setvalue 의 입력값 v 와 init 의 입력값 v가 같아야하나요? 코드결과상 setvalue 입력값이 v가 아니라 임의의 문자를 넣어도 똑같은데 v 라는 입력값이 같아야 하는게 아니라면 중복이니까 다른 문자로 바꿔줘야 되는게 아닌지 궁금합니다 ㅠ
45. 루이보스라떼
2018.12.03.
46. 닐반
2018. 10. 14.
47. 양디비
2018-08-19 수강완료!
48. 유닉스가이
감사합니다.
49. 해릭
180720 감사합니다.
50. Ji Yeoun Park
2018.07.01 감사합니다.
버전 관리
 2015-08-22 01:51:05 egoing@gmail.com
현재 버전 2015-08-22 01:51:05
graphittie 자세히 보기
• 토픽 0
• 모듈 0
• 코스 0
• 봤어요 0
• 댓글 0
• 명예의 전당 0