루비는 깔끔하다.

4346 단어 beginnersruby
OOP는 흥미로운 개념으로 많은 언어에서 사용됩니다. JavaScript를 소개하는 동안 OOP는 내가 건드리지 않은 과정의 일부였습니다. 말할 필요도 없이 Ruby에 입문한 후 이 개념을 이해하기가 조금 어려웠습니다.

OOP가 무엇인가요?



(거의) 루비의 모든 것은 일종의 이상한 개념인 객체입니다. 개체는 상태를 유지하고 다른 메서드에 반응하며 고유한 ID를 가질 수도 있습니다. Ruby의 모든 항목에서 .object_id를 호출하고 반복되지 않는 고유 번호를 얻을 수 있습니다.

arr = [1, 2, 3, 4]
#=> [1, 2, 3, 4]

arr.object_id
#=> 360

arr.class
#=> Array


위에서 .class 메소드도 볼 수 있습니다. 모든 루비 객체는 클래스에 속하지만 그게 무슨 뜻인가요?

클래스 및 인스턴스



제 강사는 이렇게 말했습니다. 클래스는 인스턴스를 관리하고 생성하는 역할을 하는 작은 공장과 같습니다. 우리는 무엇이든 클래스를 정의할 수 있고 고유한 메서드를 생성할 수 있습니다.to.chain.onto.it!

다음은 재미있는 예입니다.

class Dog

  def greet
    puts "Woof Woof!"
  end

end

Bug = Dog.new

Bug.greet
#=> "Woof Woof!"

Bug.class
#=> Dog


이게 말이 되요? 우리는 Dog라는 객체의 완전히 새로운 클래스를 정의하고 이를 위한 특별한 메서드를 만들고 있었습니다! JavaScript의 .map() 처럼 생각해보세요. 배열에서만 .map() 메서드를 호출할 수 있고 다른 것은 호출할 수 없습니다. 이 예제가 그렇게 엄격하지는 않지만 여기서 아이디어는 개의 인스턴스를 만들고 일부 정보를 가져오거나 해당 개 개체와 상호 작용하는 메서드를 만드는 것입니다.

인스턴스는 어떻게 생겼습니까?



인스턴스를 생성하고 조금 더 많은 정보를 제공할 수도 있습니다. 인스턴스 변수를 사용하여 이를 수행할 수 있습니다.

class Dog
  def name=(name)
    # @name is an instance variable
    @name = name
  end

  def name
    @name
  end
end

dog1 = Dog.create
dog1.name = "Bug"

dog1.name
#=> "Bug"


이제 우리가 Bug라는 인스턴스를 가져오면 다음과 같이 보일 것입니다!

# .first is a built in class method that will grab the first 
# instance of a class
Dog.first
#=> <Dog:0x000055ed811b7b90 id: 1, name: "Bug">


Dog 인스턴스에도 고유 ID가 할당된 것을 볼 수 있습니다. 이는 이름이 있거나 없는 여러 인스턴스를 저장해야 할 때 유용합니다. 이러한 인스턴스는 일종의 배열 또는 JavaScript 객체와 비슷합니다. JavaScript 개체와 유사하게 데이터에 액세스할 수도 있습니다.

Dog.first.name
#=> "Bug"


테이크 아웃



이 구조가 어떻게 유용할 수 있는지 꽤 분명해져야 합니다. 인스턴스는 게임의 사용자일 수 있고 데이터베이스에 저장할 수 있으며 해당 데이터베이스에 해당 사용자 인벤토리가 되는 별도의 테이블이 있습니다. 우리는 모든 사람을 ID로 연결하고, 클라이언트로부터 요청을 받고, 응답을 다시 보내기 전에 데이터와 상호 작용하는 사용자 지정 메서드를 구축할 수 있습니다! 가능성은 매우 광범위하며 Ruby를 읽는 것은 다른 언어에 비해 매우 쉽습니다. 나는 루비로 나의 첫 번째 작은 게임을 디자인하는 것을 기다릴 수 없습니다!

좋은 웹페이지 즐겨찾기