Scala 49

Play Framework 2.5. Singleton과 Inject

Play Framework는 2.0 버전부터 @Singleton과 @Inject 어노테이션을 기반으로 한 DI가 추가되었다. Spring과 다르게 Play Framework에서는 DI가 강제적인 요소가 아니다. 하지만 싱글톤 패턴은 객체간의 결합성을 떨어뜨리고 테스트를 용이하게 하기 때문에 대부분의 경우 유용하게 사용할 수 있다. 1. 기본적인 사용@Singleton 어노테이션을 이용해 간단하게 싱글톤 클래스를 설정한다.import javax.inject.{Named, Singleton}@Singleton @Named("s1") // Spring의 Qualifier와 같은 역할 class Something{ val message = "hello" } @Inject 어노테이션을 이용해 객체를 주입한다.im..

Play Framework 2.5 + Play Slick 2.1.0. 외래 키, 조인

외래키를 작성하고 조인해 결과를 얻어내 보자. 1. Foreign Key 함수 작성외래 키를 가진 테이블을 만들기 위해서는 기본 값 테이블의 테이블쿼리가 필요하다. 코드를 보면 이해하기 쉽다.case class Article(articleSeq: Long, userSeq: Long, title: String, createDate: Timestamp) class ArticleTable(tag: Tag) extends Table[Article](tag, "ARTICLE") { def articleSeq = column[Long]("article_seq", O.PrimaryKey, O.AutoInc) def userSeq = column[Long]("user_seq") def title = column[Str..

Play Framework 2.5 + Play Slick 2.1.0. 연동, 기본적인 쿼리

Slick은 ORM이 아닌 FRM이라고 부른다. 객체 그래프를 탐색하는 방식이 아니라 함수형 프로그래밍에서 친숙한 map이나 filter같은 고차함수로 쿼리하기 때문이다. (실제로는 고차함수를 SQL문으로 변경시켜 쿼리해준다) 그래서 ORM 프레임워크들과는 색다른 사용감을 느낄 수 있다. 하지만 테이블의 연관관계를 설정해 놓는 것이 아니라 기존 SQL문처럼 조인 구문을 사용해야 하기 때문에 때론 ORM보다 불편함을 느낀다. 자바로 만들어진 인메모리 DB H2와 Play Framework 2.5.13, Play Slick 2.1.0 버전을 이용해 테이블 작성과 기본적인 쿼리 몇가지를 해보자. 1. libraryDependency 추가Play framework에서 사용되는 Slick은 Play Slick이라..

Play Framework 2.5. routes와 Controller 클래스

Spring Framework는 자바 리플렉션을 적극적으로 활용한다. 그래서인지 각 메소드별로 @RequestMapping 어노테이션을 이용해 Request의 진입 경로를 설정한다. 하지만 Play Framework는 conf/routes 파일에 Request Method와 Request를 처리할 함수를 설정해 둔다. 또, routes 파일은 template의 링크 주소나 Redirect 주소로도 사용된다. routes를 참조해 작성한다면 URL이 변경되었을 때 routes 수정만으로 사이트 전체에서 참조하고 있는 URL도 변경되는 장점이 있다. 1. 기본 GET / controllers.SimpleController.index # Map static resources from the /public fo..

Scala Function Object의 메소드들

1. Function.tupled함수의 파라미터가 여러개의 값을 필요로 한다면 Function.tupled 메소드를 이용해 그 갯수만큼의 튜플을 입력받는 새로운 함수로 만들 수 있다. def multiplyFunction(i: Int, j: Int): Int = i * j val multiplyTuple: ((Int, Int)) => Int = Function.tupled(multiplyFunction _) val multiplyUntupled: (Int, Int) => Int = Function.untupled(multiplyTuple) val tupleValue = (10, 20) println(multiplyTuple(tupleValue)) // 200 // multiplyFunction(tuple..

Scala 2017.04.01

Java의 CompletableFuture, Scala의 Future와 Promise

대부분의 언어에는 Event-Driven으로 구현이 가능해지는 Future나 Promise가 존재한다. 그 중 Java와 Scala에서의 Future와 Promise를 적어보려 한다. Scala에서의 Future[T]는 '언젠가 사용 가능해지는 타입 T의 값', Promise[T]는 '언젠가 얻게 될 타입 T의 값'이라고 할 수 있다. 그래서 Future는 read-only, Promise는 writable하다고 한다. '언젠가'에 대한 행동이므로 비동기적인 처리를 뜻하고, Future를 위한 쓰레드가 필요하다. 자바 5의 Future는 위에서 이야기한 Future와 같다. Callable과 함께 추가되었던 Future는 '언젠가 가지게 되는 타입 T의 값'이다. 하지만 결과를 받아 값을 사용하기 위해서..

Scala 2017.03.28

P98. Scala로 풀어본 Nonogram(노노그램, 네모네모로직) - 2

이전 글에서 살펴본 특징을 바탕으로 스칼라 코드로 구현해 보자. 0. 유틸리티성 정의Int로 표기하면 굉장히 복잡해진다. 좀 더 이해하기 쉽게 Enumeration을 정의한다./** * Nonogram 문제에서 사용할 Enumeration. * 칠한 부분은 O, 칠할 수 없는 부분은 X, 알 수 없는 부분은 U로 표기한다. */ object NonogramEnum extends Enumeration { val O, X, U = Value } 이전 문제들과 달리 스택에 쌓아가며 재귀호출하는 문제는 아니기 때문에 mutable 콜렉션을 사용할 수도 있다.하지만 함수형답게 immutable 콜렉션으로 푼다면 아래 메소드들이 필요하다. /** * 행이 칠해진 보드를 리턴하는 함수 * * @param board ..

P98. Scala로 풀어본 Nonogram(노노그램, 네모네모로직) - 1

P98 (***) Nonograms.Around 1994, a certain kind of puzzles was very popular in England. The "Sunday Telegraph" newspaper wrote: "Nonograms are puzzles from Japan and are currently published each week only in The Sunday Telegraph. Simply use your logic and skill to complete the grid and reveal a picture or diagram." As a programmer, you are in a better situation: you can have your computer do the..

P97. Scala로 풀어본 Sudoku(스도쿠)

P97 (**) Sudoku. (alternate solution)Sudoku puzzles go like this: 주어진 스도쿠 퍼즐을 푸는 알고리즘을 작성하는 문제다.스도쿠의 룰은 모두가 아는 것처럼 간단하다. 9 x 9의 스도쿠 퍼즐 판이 있을 때 가로 방향으로 1에서 9까지의 숫자, 세로 방향으로도 1에서 9까지의 숫자만을 포함하고 작은 섹션에서도 1에서 9까지의 숫자만을 가지면 된다. N-Queens 알고리즘과 마찬가지로 스도쿠를 풀기 위한 알고리즘도 여러가지가 있다. 가장 유명하고 단순한 방법인 백트래킹부터 제시된 풀이인 Dancing Links(알고리즘 X)와 같은 방법까지 있다. 나는 N-Queens와 마찬가지로 재귀를 이용한 백트래킹으로 문제를 풀어 보려 한다. 이전 문제들과 마찬가지의..

P94. Scala로 만들어본 K-regular simple graph(정규 그래프)

P94 (***) Generate K-regular simple graphs with N nodes. In a K-regular graph all nodes have a degree of K; i.e. the number of edges incident in each node is K. How many (non-isomorphic!) 3-regular graphs with 6 nodes are there? 노드의 갯수 N, 각 노드의 엣지 갯수 K를 입력받아 정규 그래프를 만드는 문제다. 정규 그래프(Regular graph)란 각 노드가 동일한 갯수의 엣지를 가지는 그래프로 각 엣지는 다른 노드와 연결된다. 노드와 엣지 갯수에 따른 정규 그래프들 정규 그래프를 그려보면 몇 가지 간단한 규칙을 찾을 수 ..