## 루비 온 레일즈에서 enum 사용법
---
일단 enum(이눔...)이 무엇인가에 대해서 알아보자.
### enum이란
---
컴퓨터 프로그래밍에서 열거형, 이넘, 팩터는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. 일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다. - 출처 : 위키백과
이렇게 글로 쓰면 잘 모르겠으니 코드로 확인해보자.
```ruby
enum role: {
admin: 0,
manager: 1,
normal: 2,
developer: 3
}
```
사용자의 역할을 구분하는 경우가 보통인데, 위와 같이 사용자의 역할마다 번호를 부여해 사용할 수 있다.
근데 왜 이걸, enum을 써야하는가? 라는 의문이 든다. 어떻게 사용하는지와 함께 enum의 장점을 확인해보자.
### enum 사용법 & 장점
---
예를 들어 User 모델이 있으며, role 이라는 attribute 가 있다고 가정하자. 이 때 User 모델에 enum으로 role 을 정의한다.
```ruby
class User < ApplicationRecord
enum role: {
admin: 0,
manager: 1,
normal: 2,
developer: 3
}
end
```
이렇게 하면 admin은 0, manager는 1과 매핑이 된 것이다. 예를 들어 role이 normal인 유저를 찾을 때 아래에 있는 두 개 코드 모두 다 같은 값 normal_user 를 갖는다.
```ruby
normal_user = User.where(role: 2)
```
``` ruby
normal_user = User.where(role: "normal")
```
이게 끝이라면 조금 허무하다. enum은 아래와 같이도 사용할 수 있다. User id가 3인 사용자의 역할을 manager로 바꾸고 싶다면,
```ruby
User.find(3).manager!
```
라고 하면 role 이 manager로 바뀐다. 뿐만 아니라 role의 값도 확인할 수 있다.
```ruby
User.find(3).manager?
```
만약 role이 manager였다면 true, 아니면 false 를 return 해준다. 아래와 같은 것도 가능하다.
```ruby
User.manager
```
위의 코드는 User 모델에서 role이 manager 인 user를 찾아준다. 마치 where(role: manager)와 같다.
---
참고 :
[https://withrails.com/2015/07/13/activerecordenum-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%98%95%EC%9D%98-%ED%99%9C%EC%9A%A9-2/](https://withrails.com/2015/07/13/activerecordenum-데이터형의-활용-2/)
댓글
댓글 쓰기