객체(Object)
객체 지향 프로그래밍(Object Oriented Programming)이라는 말에서도 알수 있듯이
객체는 OOP의 기반이 되는 개념중의 하나이다.
함수만 묶어 놓았던 모듈과는 다르게, 객체에서는 변수와 함수를 묶어서 찍어낼수 있는 개념이다.
이렇게 객체를 기반으로 생성된 것을 인스턴스라고한다.
여기서는 객체에 대한 개념을 깊게 다루지는 않을 것이며, 사용 방법에 대해 알아보도록하겠다.
1 2 3 4 5 6 7 8 | # python class Cal(object): # 클래스 코드 #ruby class Cal # 클래스 코드 end | cs |
먼저 class 키워드를 사용해서 객체를 만들어 준다.
이때, 루비는 역시 end 키워드를 사용해서 객체 생성 코드를 닫아주며,
파이썬은 class뒤에 객체이름(object):를 적어 준다.
1 2 3 4 5 6 7 8 9 10 11 | # python class Cal(object): def __init__(self, v1, v2): print(v1, v2) #ruby class Cal def initialize(v1,v2) p v1, v2 end end | cs |
객체를 생성할 때 내부에 생성자를 만들어준다.
생성자라는 것은 객체로 부터 인스턴스가 만들어질때 자동으로 실행되는 메소드를 생성자라고한다.
이 생성자의 이름은 미리 약속되어있으므로, 해당 이름으로 사용해야한다.
파이썬은 __init__이며, 루비는 initialize이다.
따라서, 이 생성자에 원하는 코드를 작성해 놓으면 인스턴스가 생성될 때 자동으로 실행된다.
위의 코드에서 파이썬과 루비의 생성자는 v1, v2를 출력하게 설정했다.
다른점은, 파이썬은 생성자를 만들때 첫번째 인자로 self를 넣어주어야 한다는 것이다.
이 self에 대한 내용은 아래의 파이썬 코드에서 설명하도록 하겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Cal def initialize(v1,v2) @v1 = v1 @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.subtract() c2 = Cal.new(30,20) p c2.add() p c2.subtract() | cs |
최종적으로 완성된 객체와, 인스턴스 생성, 메소드 사용 코드이다.
위의 코드는 루비로 작성되었다.
먼저, 생성자가 실행될 때 인자로 받아온 2개의 값을 인스턴스 변수에 저장하게된다.
인스턴스 변수를 사용하기 위해서는 변수 이름앞에 @ 기호를 붙여주자.
이렇게 인스턴스 변수가 따로 있기 때문에 모든 인스턴스가 같은 객체로부터 생성되었더라도 다른 값을 가질수 있다.
그리고 내부에 더하기, 빼기 메소드를 만들어준다.
이렇게 생성된 객체를 인스턴스화 하기 위해서는 '객체이름.new(인자)'의 형식으로 만들수 있다.
또한 '인스턴스.메소드이름'의 형식으로 메소드 호출이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Cal(object): def __init__(self, v1, v2): self.v1 = v1 self.v2 = v2 def add(self): return self.v1+self.v2 def subtract(self): return self.v1-self.v2 c1 = Cal(10,10) print(c1.add()) print(c1.subtract()) c2 = Cal(30,20) print(c2.add()) print(c2.subtract()) | cs |
이번에는 같은 기능을 하는 파이썬 예제이다.
이 때 루비에서 사용하는 @를 사용할수 없고 self를 사용해야되는데,
파이썬에서 사용하는 모든 메소드에서는 첫번째 매개변수로 self를 적용해야한다.
이 self는 해당 인스턴스를 가리키는 값이다. 타 언어의 this라고 생각해도 좋을듯하다.
따라서, 이 첫번째 매개변수로 해당 인스턴스의 변수를 사용하거나 지정 수 있다.
물론 이 self 인자는 다른 이름으로 바꾸어도 되지만 관습적으로 self라고 사용한다.
출처 : 생활코딩, 파이썬&루비
'개발' 카테고리의 다른 글
[파이썬&루비] 캡슐화(Encapsulation) (1) | 2017.06.01 |
---|---|
[기술의역사] 자바스크립트(Java Script) (0) | 2017.06.01 |
[파이썬&루비] 모듈(Module) (0) | 2017.05.31 |
[파이썬&루비] 함수(Function) (0) | 2017.05.31 |
[기술의역사]HTML(HyperText Mark-up language) (0) | 2017.05.30 |
댓글