라벨이 스칼라인 게시물 표시

(스칼라) build.sbt 설명

1. name : 프로젝트 이름 2. version : 프로젝트 버전 3. scalaVersion : 스칼라 버전 4. libraryDependencies : 의존하는 라이브러리 들을 설정한다. 또한 해당 라이브러리가 빌드 시점 중 어느 시점에 의존할지 설정한다. (예를들어 컴파일할 떄, 패키징 할 때) 5. assemblyOption in assembly : set-assembly  플러그인의 옵션 libraryDependencies에는 sbt가 관리하는 프로젝트가 의존하는 라이브러리를 설정하는데, Seq형식으로 설정한다. 여러개가 존재하는 경우 쉼표를 통해 구분하며, 하나의 의존라이브러리는 "<groupId> % <artifactId> % <version>" % "<configuration>" 형식으로 지정한다. <configuration>은 해당 라이브러리가 어느 의존 단계에 포함되어야 할지를 의미한다. provided 인 경우는 컴파일 단계에는 클래스패스에 포함되고, 패키지 단계에서는 포함되지 않는 것이다.

(스칼라) 조건문과 반복문

* for 문 for ( x <- 1 to 10) { println(x) } 또는 for ( x <- 1 until 10) { println(x) } to는 10을 포함하고 until은 포함하지 않는다. * 이중포문 for ( x <- 1 until 10; y <- 1 until 10) { println(x) } * 인덱스가 있는 for 문 for( (num, index) <- List.zipWithIndex) { println(num) println(index) } List의 zipWithIndex메소드를 이용해 인덱스를 표현 할 수 있따.

(스칼라) 변수선언

* 변수사용은 아주 간단하다. var a = "변수입니다." val b = " final 변수입니다." 이 두가지가 전부이다. var 은 일반적인 변수이며 변수의 내용이 언제든 바뀔 수 있따. val 은 final 변수이다. 그럼 왜 잘 사용하지 않는 final 을 val을 만들어 가면서까지 만들었을 까요? -> 스칼라는 함수형 언어프로그래밍언어로써 변수 뿐만 아니라 함수까지 집어넣을 수 있다. 그래서 그 안에 담길수 있는 범위가 굉장히 넓다. 범위가 넓다보니 확정지어줘야 하기 때문이다. 또한 스칼라언어는 변수를 초기화 해주어야 한다. 그이유는 컴파일시 어떤 자료형인지 알아야 하기 때문이다. 만약 초기화가 필요없다면 var a = null; 또는 var a = None; 로 설정 해준다. 또한 자료형을 명시적으로 적어 해당 자료형만 넣도록 하는 것이 가능하다. var b : Int = 10 <기본 자료형과 참조자료형> AnyVal -> Byte , Short , Int, Long, Char, Unit, Boolean, AnyRef -> 사용자가 만든 객체, AnyVal이 아닌 객체 * 기본 자료형은 생략 <type 예약어를 이용해 자료형을 별칭화 하기> type 예약어는 자료형이 길고 복잡할 경우 별칭을 주어 쉽게 쓸 수 있습니다. type Name = String type Person = (String, Int) type FType = String => Int// 함수표현식. 첫번째 자료형은 String 두번째 자료형은 (String, Int) 세번쨰는 String 을 받고 Int 를 반환하는 형식입니다. val name: Name = "김말자"; val person: Person = ("김동욱", 24); val f: fType = text =...

(스칼라) 모든것은 객체이다.

* 자바는 클래스로 선언되지만, 스칼라는 객체선언으로 시작됩니다. 스칼라에서 객체는 자바로치면 static class 형식으로서 , new 를 통해 인스턴스를 생성하는 것이 아니라 처음부터 단 하나의 인스턴스만 생성가능하느 싱글턴 객체입니다. 싱글턴객체는 여러 인스턴스를 생성하지 못하고, 단 하나의 인스턴스만 생성해야 합니다. * 함수가 다르다. 함수는 def로 정의할 수 있습니다. Unit은 자바의 void 라고 보면된다. 명시적으로 아무것도 반환하지 않음을 나타낸다. 예) object Ex1_1 {   def main(args: Array[String] ): Unit = {   println("핼로 스칼라~"); } }

(스칼라) 스칼라란?

* 스칼라 코드는 짧으며 직관적이다. val otherList = list.filter( i => i>=5); * 스칼라에는 다양한 연산자가 존재한다. 이 연산자들은 모두 하나하나 메소드로 되어있다. 예를들어 , 리스트에는 ++라는 메소드가있따 list1 ++ list2 는 리스트1과 리스트2를 합친결과이다. 이렇게 연산자들이 직관적으로 구현되어있고, 띄어쓰기를 통해 깔끔하게 표현가능하기 때문에 스칼라의 유연성과 가독성은 상당히 높은 수준이다. * 동시성에 강한 언어. 동시성이 뛰어난 라이브러리 아카(akka)가 있따. 아카는 동시성이 뛰어난 액터모델로 이루어져있다. 액터모델이란, 각각의 액터가 서로 간의 메시지를 통해서만 의사소통을 하고 액터를 이루는 변수나 속성은 서로 공유하지 않는 것이다. * 객체지향 + 함수형 언어 스칼라에서는 모든 것이 객체이다. 함수의 매개변수에 함수객체를 집어넣을 수도있고, 변수에 함수를 할당할 수도 있따. Member.members.filter(_userId === 'admin').delete * 맥락을 읽는 언어 자바같은 경우는 자료형 하나하나 명시적으로 지정하고 매개변수를 써야하지만, 스칼라는 필요할 때 implicit 예약어 를 사용하면 명시적인 표현을 감춰버릴 수 있습니다. * 자바와 뛰어난 연계성 자바의 라이브러리를 언제든지 import해서 사용할 수 있습니다. 또한 JVM을 사용합니다.

(Scala) tratit

* 자바언어의 Interface에 해당하는 녀석이다. 이를 이용해 코드의 재사용을 극대화 할 수 있다. 클래스의 상속관계와는 다르게 여러 trait를 섞어 사용할 수 있다. 여기서 섞어서 사용한다는 것이 중요하다. Java언어의 interface 는 이 interface를 상속받는 클래스들의 뼈대를 제공해 주지만 정작 메소드 구현은 interface를 상속받는 클라이언트 클래스를 구현하는 개발자가 전부 구현해야 한다. 하지만 Scala언어에서의 trait은 이와 다르게 구체적인 함수가 구현되어 있어서 이를 사용하는 개발자는 특별히 mix(섞어서) 함수를 구현하지 않고 바로 사용할 수 있다는 장점이 있다. trait philosophical {  def philosophize() {    println("블라블라")   } } 다른 클래스에서 이 trait을 mix 해서 사용하는 방법은 아래와 같다. class Frog extends philosophical {  override def toString = "Green"; } 여러개의 trait를 사용하는 방법은 다음과 같다. class Frog extends Animal with philosophical with HashLeg {    override def toString = "Green"; } with를 사용하면 된다.