어제에 이어서, 계속 개인 프로젝트를 Kotlin으로 옮기는 작업을 시작했다.
분명, 단순히 옮기는 작업이라서 시간이 오래 걸리지 않을 것이라 예측했는데, 원본이 생각보다 안 좋은 점이 계속 보여서 이것을 어떻게 수정을 해야할 지 고민하고, 추가할 부분이 없을지 고민하느라, 생각 외로 시간이 많이 소모되는 것 같다.
일단은, 이전 프로젝트에서 QueryDSL을 통한 검색과 페이징을 제외한 주요 기능은 거의 다 옮겼다, 조회수, 좋아요 같은 추가 기능도 옮겨야하는데 이 부분은 수정이 많이 필요할 것 같다. 이전 프로젝트에서는 각각 Long 타입과 Set을 활용해서 구현을 했는데, 이러면, 조회수가 중복이 되거나 동시성이 문제가 발생(다만 중요하진 않다), 하고, 좋아요의 경우 Set을 생으로 사용했는데, 내가 이 부분에 대해 이해가 부족해서 그냥 테이블을 하나 더 생성해서 사용하는 것이 낫다고 판단된다.
첫 웹 프로젝트라서 수정사항이 많이 눈에 띄지만, 회사에 제출할 프로젝트인만큼 그동안 부트캠프를 통해 배운 것을 동원하려한다. 예로 백오피스도 한 번 구현을 고려중인데, 이것을 위해 그동안 경시되었던 Role을 제대로 해야한다. 그런데, 이 Role이 Enum 클래스로 구현되어 있는데, 내가 Kotlin에서의 Enum Class를 잘 모른다는 것을 깨닫게 되었다. 그래서 이번엔 Enum에 대해 배웠다.
보통 enum을 사용한다고 하면 switch(Kotlin에서는 when)을 사용해서 특정 Enum 상태일 때, 특정 행동을 한다는 방식으로 많이 사용한다. 그런데 이렇게 하면, Enum을 추가할 때 마다, 그 Enum을 다루는 함수를 수정해야해서 불편하다.
그런데, enum class에서는 공통 함수를 안으로 넣을 수 있다. 이 방식은 Enum을 사용하는 함수에게 행동의 책임을 전가하는 것이 아닌 Enum 자체에게 넘겨줘서, 상당히 편리하다. 다음 코드와 같이 사용할 수 있다.
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
fun main() {
println(ProtocolState.TALKING.signal())
println(ProtocolState.WAITING.signal())
}
나는 그동안 디자인 패턴 중 템플릿 메소드 패턴을 사용하는 법만을 떠올렸는데, 이렇게 코드를 구성하면 이전의 방법보다 훨씬 쉽게 코드를 구성할 수 있다는 점이 놀라웠다, 위의 코드가 작동한다는 것은, 인터페이스를 상속받아서 구현할 수 있다는 것도 가능하다. 위의 기능은 기본적으로 Enum 클래스는 추상 클래스로써 기능한다는 점을 인지해 두는 것이 좋을 것 같다.
사실 생각치도 못한 수확이였는데, 그냥 단순히 이해가 부족한 것 같아서 찾아본 것인데, 생각보다 유용하게 사용할만한 것을 배우게 되어서 정말로 기쁘다. 앞으로 적극적으로 사용을 고려해보자.
- 참조:
https://banziha104.github.io/2020/05/05/kotlin-enum/
Kotlin의 Enum 어디까지 써봤니?
Kotlin Enum에 관한 고찰 Kotlin Enum Enum 클래스는 많은 언어에서 지원하고 있으며, 조금 C언어나 Java 1.5 버전등 오래된 언어에서는 주로 대부분 데이터 타입을 분류하는 Flag 역할과 상수를 저장하는
banziha104.github.io
-
https://www.devkuma.com/docs/kotlin/enum-classes/
Kotlin 열거형 클래스(Enum Classes)
열거형 클래스(enum class) 열겨형 클래스는 class 키워드 앞에 enum를 붙여 선언한다. 각 열거형 상수는 객체이며, 열거형 상수는 쉼표로 구분된다. enum class Direction { NORTH, SOUTH, WEST, EAST } fun main() { prin
www.devkuma.com
후에 사용법이 기억이 안 나면 정독해보는 것도 괜찮을 것 같다.
내일도 이어서 코드를 구현해보자, 원래는 내일까지 다 할 수 있을 것 같았는데, 생각보다 오래걸릴 것 같으니까 속도를 좀 더 높여보자.
'부트캠프 일지' 카테고리의 다른 글
부트캠프 76일차 후기 (1) | 2024.03.18 |
---|---|
부트캠프 75일차 후기 (0) | 2024.03.15 |
부트캠프 73일차 후기 (1) | 2024.03.13 |
부트캠프 72일차 후기 (2) | 2024.03.12 |
부트캠프 68일차 후기 (1) | 2024.03.06 |