[Ruby On Rails] enum 사용하기

sunaaa·2021년 4월 26일
0

Ruby On Rails

목록 보기
19/20

enum 이란?

  • enum은 열거형을 정의할 때 사용하는 enum 키워드로, 열거, 목록을 뜻하는 enumeration에서 따온 것이다.
  • enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.
  • enumclass, interface와 동급의 형식을 가지는 단위다.
  • 하지만 enum은 사실상 class이다.
  • 편의를 위해서 enum만을 위한 문법적 형식을 가지고 있기 때문에 구분하기 위해서 enum이라는 키워드를 사용하는 것이다.

열거형의 특성

  • 열거형은 연관된 값들을 저장한다.
  • 그 값들이 변경되지 않도록 보장한다.
  • 열거형 자체가 클래스이기 때문에 열거형 내부에 생성자, 필드, 메소드를 가질 수 있어서 단순히 상수가 아니라 더 많은 역할을 할 수 있다.

enum 사용하기

Q. 왜 굳이 integer 데이터타입을 써서 enum을 쓰는 걸까요? 그냥 string타입을 쓰면 되는 거 아닌가요?

  • string으로 저장하게 되면 매번 비즈니스로직을 짤 때 매번 string으로 값을 넣어야 하는데, 조금이라도 오타가 있다면 다른 데이터가 들어갈 수 있습니다.
    (물론 전역변수로 하면 해결이 됩니다만...)
  • enum을 쓰게 되면 기존에 저장하지 않은 데이터가 들어가게 되면 저장이 되지 않습니다. 그러므로 조금 더 엄밀하게 설계를 할 수 있다는 장점이 있습니다.

enum 만드는 방법

  1. 우선 칼럼을 생성할 마이그레이션 파일을 만들어 준다.
    rails g migration add_status_to_items status:integer

  2. 칼럼을 추가해준다. 이때 default값을 주면 좋다.

class AddStatusToItems < ActiveRecord::Migration[6.0]
  def change
    add_column :items, :status, :integer, default: 0
  end
end
  1. Model에서 관리할 enum을 정의해준다

✅ 방법1 : 배열을 사용하기

  • 이 경우, 추후에 배열 사이에 새로운 상태값을 추가하고자 한다면, 배열의 순서가 밀려 기존의 값들을 모두 변경해야 하는 상황이 생길 수 있다.
class Item < ApplicationRecord
  enum status: [:active, :pending, :disabled]
end

✅ 방법2 : 해쉬를 사용하기

  • 루비에서는 {객체}를 {해쉬}라고 부른다
class Item < ApplicationRecord
  enum status: {active: 0, pending: 1, disabled: 3}
end
  • 기본값이 0으로 들어감(default:0으로 설정해줬기 때문)
profile
Be Playful Front-end Developer

0개의 댓글