본문 바로가기
[Python & Ruby]

[Python & Ruby] 클래스/객체 생성

by Hevton 2020. 12. 24.
반응형

자바에서와는 달리, 파이썬과 루비에서는 생성자의 이름이 클래스의 이름과 다르다.

이미 약속되어있는 생성자의 이름이 존재한다. 하지만 객체를 생성할 때 생성자가 호출(인스턴스의 초기화를 위해)된다는 개념은 동일하다

 

클래스명 :  Cal

자바에서는 new Cal(); 를 통해, "Cal 객체를 생성(new)하는데 Cal() 생성자로 초기화하겠다" 라는 의미를 갖는데,

파이썬과 루비에서는 Cal.new() 또는 Cal()를 호출하면, Cal 객체가 생성되면서 내부에서 initalize() 생성자가 호출된다. 

 

 

 

Ruby :

루비는 모듈에서와 마찬가지로, 클래스의 이름 첫 글자는 대문자로 시작해야한다.

그리고 마찬가지로 end로 끝내준다. 이쯤되면 모든게 end로 끝내는 구조인 것 같다.

class Cal
  def initialize(v1, v2) # 생성자. 생성자의 이름이 initialize로 약속되어있음.
    p v1, v2
  end

c = Cal.new(10, 20)

end

+ ruby에는 puts 말고도 p 라는 간단한 이름의 출력함수가 있고, p 는 puts보다 더 자세히 출력해준다. 

 

Python :

파이썬은 꼭 첫글자가 대문자일 필요는 없다.

object 구문은 나중에 살펴본다.

그리고 파이썬은 마찬가지로 거의 모든 헤드가 : 로 끝내는 것 같다.

class Cal(object):
    def __init__(self, v1, v2): # 생성자. 생성자의 이름이 __init__로 약속되어있음. self가 존재(=this)
        print(v1, v2)


c = Cal(10, 20)

+ 파이썬에서는 인스턴스 변수를 나타내기 위해 self를 사용하는데, 이를 위해 모든 메소드를 정의해줄 때 첫번째 인자가 self로 사용된다.

+ 결과적으로 c 변수와 self 변수는 같은 인스턴스를 가리키는 상태.

 

 

Ruby :

골뱅이를 붙이면 인스턴스 변수를 뜻한다.

class Cal
  def initialize(v1, v2) # 생성자. 생성자의 이름이 initialize로 약속되어있음.
    p v1, v2
    @v1 = v1
    @v2 = v2
  end

  def add()
    return @v1 + @v2
  end

  def subtract()
    return @v1 - @v2
  end
end

c = Cal.new(10, 20)
p c.add()
p c.subtract()

initalize 안에서의 v1 v2는 지역변수기 때문에, 다른 메소드에서든 사용할 수 없으니 인스턴스 변수에 담아준다.

 

 

Python :

class Cal(object):
    def __init__(self, v1, v2):
        print(v1, v2)
        self.v1 = v1
        self.v2 = v2
    def add(self):
        return self.v1 + self.v2

    def subtract(self):
        return self.v1 - self.v2


c = Cal(10, 20)
print(c.add())
print(c.subtract())

 

 

 

참고

opentutorials.org/ - 이고잉님

 

m.blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220955262405&proxyReferer=https:%2F%2Fwww.google.com%2F

 

m.blog.naver.com/PostView.nhn?blogId=yun4794&logNo=221110665473&proxyReferer=https:%2F%2Fwww.google.com%2F

 

limsungju.tistory.com/19

 

 

반응형

'[Python & Ruby]' 카테고리의 다른 글

[Python & Ruby] 상속  (0) 2020.12.28
[Python & Ruby] 객체와 변수  (0) 2020.12.27
[Python & Ruby] 객체 지향 프로그래밍  (0) 2020.12.22
[Python & Ruby] Module  (0) 2020.12.20
[Python & Ruby] Block in Ruby  (0) 2020.12.18