그러면 왜 객체 지향 프로그래밍을 할까???
<객체 지향 프로그래밍>
class Cal
#생성자, constructor
def initialize(v1, v2)
@v1 = v1 # @변수 => 인스턴스 변수 -> instance가 속해있는 모든 method에서 사용가능
@v2 = v2
end
def add()
return @v1+@v2
end
def subtract()
return @v1-@v2
end
end
c1 = Cal.new(10,10)
p c1.add() # = p(c1.add())
p c1.subtract()
c2 = Cal.new(30,20)
p c2.add()
p c2.subtract()
# 동일한 행위를 하더라도 각 인스탄스가 가지고있는 변수는 다르기 때문에
# 결과는 다르다 .
<일반 함수를 이용한 프로그래밍>
def add(v1, v2)
return v1+v2
end
def subtract(v1, v2)
return v1-v2
end
num1 = 10
num2 = 10
p add(num1, num2)
p subtract(num1, num2)
num3 = 30
num4 = 20
p add(num3, num4)
p subtract(num3, num4)
f객체 지향 프로그래밍에서는 함수를 전체를 포함하고도 calss와 instance를 알아야하고 생성자도 알아야하고 instance 변수도 알고 있어야하기 떄문에 복잡하다.
오히려 객체 지향을 사용하지 않는 편이 좋을 수 있다.
하지만, 이렇게 복잡해지는데도 사용되는 이유가있다.
결국은, 프로그램이 커지는 과정에서 복잡도를 낮추기 위함이다.
<객체 지향>
c1 = Cal.new(10,10)
p c1.add() # = p(c1.add())
p c1.subtract()
<일반 함수>
p add(num1, num2)
p subtract(num1, num2)
일반 함수에서 add() 와 subtract()는 어떠한 관련도 없어보인다.
하지만 객체지향에서는 똑같은 객체에 add(), subtract()가 속해있다 . 연관성이 잘 드러나있다.
그리고, c1이라고하는 인스턴트는 내부적으로 10과 10이라는 값을 가지고 있기 때문에
add(), subtract() 모두 이 값을 대상으로 이뤄진다는 의미가 분명하게 드러나 있다.
캡슐화(encapsulation)
왼쪽과 오른쪽의 차이는??
왼쪽은 누구나 이 톱니바퀴 구조를 볼 수가있고 영향을 가할 수 있는 상태이다.
하지만 , 오른쪽은 캡슐로 감싸져있기 때문에 구조가 어떻게 되어있는지 모르고, 외부의 영향을 받지 않는다.
그래서 , 함수, 모듈, 객체를 하는 이유중 하나도 이 캡슐화하기 위함이다.
데이터와 로직
데이터와 로직중 중요한 것은 무엇일까??
답은 데이터다. 데이터안에는 남에게 보여주기 싫은 정보, 지금까지 살아오면서 모아온 사진등의 중요한 정보들이 담겨져 있기 때문에 데이터는 소중하다.
코딩에서 데이터는 변수와 같다. 그렇기 때문에 변수역시도 소중하다.
즉, 변수가 외부에 영향을 받지 않도록하는 것은 프로그래밍에 있어서 굉장히 중요한 과제이다.
instance 변수
<ruby>
class C:
def __init__(self, v):
self.value = v
c1 = C(10)
print(c1.value)
c1.value = 20
print(c1.value)
사진출처 - <YOUTUBE 생활코딩>
'IT 공부 > python' 카테고리의 다른 글
2020-10-08 Python 과 Ruby 상속 (0) | 2020.10.08 |
---|---|
2020-10-08 Python 과 Ruby 객체 지향 프로그래밍(4) (0) | 2020.10.08 |
2020-10-06 Python 과 Ruby 객체 지향 프로그래밍 (2) (0) | 2020.10.07 |
2020-10-06 Python 과 Ruby 객체 지향 프로그래밍 (0) | 2020.10.06 |
2020-10-05 Python 과 Ruby(2) (0) | 2020.10.05 |