Ruby - 객체제작(class, constructor, @instance variable)

Minsoo·2021년 9월 23일
0

Ruby

목록 보기
6/8
post-thumbnail

1. class syntax

class Cal #클래스는 대문자로 시작
 def init (1,2)
  #code
 end
end

2.constructor(생성자)

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.

인스턴스를 생성할 때 전달된 값을 인스턴스 안으로 끌고 들어왔다는 것을 의미.

3. instance variable & method

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

4. 객체를 사용하는 이유

객체를 사용하지 않은 코드

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)



-  프로그램을 작성하는 방법은 객체, 함수 등 여러 방법이 있다. 
- 위의 경우 객체를 사용하지 않아도 코드를 보면 직관적으로 이해하기가 쉽고, 객체는 많은 것을 알고 있어야 이해해야하는 부분이 있으므로 규모있는 소프트웨어가 아니라면 굳이 객체지향프로그램을 할 필요는 없다.
- 복잡해지는 단점에도 불구하고 객체지향 프로그램을 하는 이유는 프로그램이 발전하면서 필연적으로 발생하는 복잡성을 해결하기 위한 좋은 방법이기 때문이다. 
profile
Hello all 👋🏻 📍London

0개의 댓글