class Cs
def Cs.class_method()
p "Class method"
end
def instance_method()
p "Instance method"
end
end
i = Cs.new()
Cs.class_method()
i.instance_method()
#Cs.instance_method() 오류발생
#i.class_method() 오류발생
class Cal
attr_reader :v1, :v2
attr_writer :v1
@@_history = []
def initialize(v1,v2)
@v1 = v1
@v2 = v2
end
def add()
result = @v1+@v2
@@_history.push("add : #{@v1}+#{@v2}=#{result}")
return result
end
def subtract()
result = @v1-@v2
@@_history.push("subtract : #{@v1}-#{@v2}=#{result}")
return result
end
def setV1(v)
if v.is_a?(Integer)
@v1 = v
end
end
def getV1()
return @v1
end
def Cal.history()
for item in @@_history
p item
end
end
end
class CalMultiply < Cal
def multiply()
result = @v1*@v2
@@_history.push("multipy : #{@v1}*#{@v2}=#{result}")
return result
end
end
class CalDivide < CalMultiply
def divide()
result = @v1/@v2
@@_history.push("divide : #{@v1}/#{@v2}=#{result}")
return result
end
end
c1 = CalMultiply.new(10,10)
p c1.add()
p c1.multiply()
c2 = CalDivide.new(20, 10)
p c2, c2.add()
p c2, c2.multiply()
p c2, c2.divide()
Cal.history()
클래스 멤버에는 클래스 메소드, 클래스 변수 등이 있다. 인스턴스 메소드는 인스턴스에서만, 클래스 메소드는 클래스에서만 작동한다. 인스턴스변수는 하나의 인스턴스 안에서만 유효한 반면, 클래스 변수는 클래스 전체에서 활용가능하다. 예를 들어 Cal.history는 클래스 변수라 Cal클래스와 상속받은 클래스를 복제한 모든 인스턴스에서 값을 push 받을 수 있다. 반면, self.v1으로 쓰인 변수는 인스턴스변수라 self.v1에 주어진 값이 하나의 인스턴스 내에서만 유효하고 다른 인스턴스에 영향을 주지 않는다. 루비는 변수 앞에 @@를 붙여서, 파이썬은 앞에 클래스 이름.을 붙여서 클래스 변수를 사용한다. 어려운 내용이라 다음에 다시 복습하러 오겠습니다 ㅎㅎ 감사합니다!
제 생각에는 우선 클래스 안에서 initialize보다 더 앞에 @@count = 0 이 있기 때문에 @@count 에 0이 설정되어 있는 상황이구요. initialize 인스턴스가 실행될때 그 안에 있는 코드대로 진행될텐데, 그 안의 코드에서 @@count에 1씩 추가하라고 했기에, 인스턴스가 매번 실행될때마다 initialize가 실행되면서 @@count 가 1씩 증가하는 것 같습니다.
결론은, @@count는 클래스 안에 있지만 initialize와는 독립된 변수로 보심이 맞을 것 같네요
클래스 변수에 대해 질문 하나 드려도 될까요?
생성자 수업에서 말씀하시길, 클래스에서 인스턴스가 생성될때 initialize/__init__이 가장 먼저 실행된다고 하셨던 것 같은데 클래스 변수 값 설정하는 부분이 (즉, @@count =0 과 count=0) initialize/__init__보다 먼저 읽히는 건가요? 그리고 만약 그런거라면 그 다음 인스턴스 생성시에도 클래스 변수 값 0으로 설정하는 부분이 다시 읽히면서 +1 됐던 값이 다시 0이 되어야 하는 건 아닌가요?
질문: 왜 Class method와 Instance method와 static method를 나누지?
내가 생각하는 답변.
class에서 받은 데이터와
instance에서 받은 데이터가 다르게 동작할수 있음. 그걸 효율적으로 관리하기 위해서.
Static method는 데이터와 관련 없는 method같음.(ㅠㅠㅠ몰라..)
진짜 답변은 무엇인가요?
6일만에 이부분까지 왔어요.
먼저 다른 언어를 많이 알고 있는 상태였어요.(matlab, C, R)
새로이 알게된부분은 모듈, 객체지향밖에 없어서 빨리 들을수 있었어요.
원동력이라 하면, 제가 python으로 하고자 하는게 있는데, 그걸 빨리 해보고싶어서 그런거같아요.
제가 만들고자 하는건 '웹크롤링'이라는 것인데, 인터넷 찾아보시면 매우 흥미롭답니다.
그리고, 다른 원동력으로는 친구들에게 언어를 배웠다고 자랑을 많이했어요.