class Cal #클래스는 대문자로 시작
def init (1,2)
#code
end
end
class Cal
# def initialize(v1,v2)
p v1, v2
end
end
c3 = Cal.new(30,10)
def initialize(v1,v2)
- 이 메소드의 이름은, 루비에서 특별히 취급하는 이름 = 생성자!
- 나중에 인스턴스가 생성되고 실행될 때 자동으로 실행된다면,이 메소드의 내용으로 실행될 것이다.
- 즉 초기화를 할 수 있는것 마치 우리가 컴 키면 부팅이라는 초기화를 하는 것처럼, 객체를 만들때 초기화해야하는 작업들을 initialize라는 약속된 메소드에 넣어주면 자동으로 실행될 것임.
- init함수 실행될 때 이 메소드의 첫번째 데이터 30은 매개변수 값으로 들어오게 될 것임v1, 두번째 데이터 10은 두번째 매개변수로 들어오게 되어있음v2.
- 이 인스턴스가 만들어질 때 , init이라는 생성자함수가 실행되고, 인스턴스가 실행될 때, 실행되기를 기대하는 코드를 inti본체에 넣어주면, 실행될 것임. 그것이 바로 생성자. constructor.
인스턴스를 생성할 때 전달된 값을 인스턴스 안으로 끌고 들어왔다는 것을 의미.
class Cal
def init(v1,v2)
p v1, v2
@v1 = v1
@v2 = v2
end
def add()
return @v1 + @v2
end
def subtract()
return @v1 - @v2
end
end
c1 = Cal.new(5,5)
p c1.add()
p c1.subtract()
c2 = Cal.new(30,20)
#각각 내부적으로 인스턴스 변수를 가지고 있고, 이에 따라 내부적으로 가지고 있는 데이터, 상태가 다르다. 내부적으로 다른 상태에 대해 add,subrtract하면 각각 인스턴스 값이 다르므로 리턴되는 값이 다를 것이다.
p c2.add()
p c2.subtract()
>>
10
0
50
10
- @v1 인스턴스 변수는 인스턴스에 소속된 모든 메소드안에서 사용할 수 있다. 인스턴스 안 모든 메소드에 접근 가능하다는 말.
- @를 사용하지 않은 변수는, 다른 메소드에 접근이 불가능.
- 따라서 init 메소드안에 있는 변수가 ,add 안에서도 사용이 가능한 것이다.
- 다른 메소드에서 사용할 수 없는 변수 = 지역변수
- @variable = instance variable
객체를 사용하지 않은 코드
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)
- 프로그램을 작성하는 방법은 객체, 함수 등 여러 방법이 있다.
- 위의 경우 객체를 사용하지 않아도 코드를 보면 직관적으로 이해하기가 쉽고, 객체는 많은 것을 알고 있어야 이해해야하는 부분이 있으므로 규모있는 소프트웨어가 아니라면 굳이 객체지향프로그램을 할 필요는 없다.
- 복잡해지는 단점에도 불구하고 객체지향 프로그램을 하는 이유는 프로그램이 발전하면서 필연적으로 발생하는 복잡성을 해결하기 위한 좋은 방법이기 때문이다.