반응형
[요약정리]Scala에 대하여
github - https://github.com/jojonari/study_scala
- 스칼라는 모든것이 객체이다.
- Object는 싱클턴 객체이다.
- 스칼라 Objec = 자바의 static class
- static예약어가 필요없다.
- +와 같은 연산자도 객체이다.
- 스칼라의 Unit = 자바의 void
- 세미콜론을 쓰지 않아도 된다.
- 자료형은 컴파일러가 알아서 정해준다.
var : 일반적인 변수(값 변경 가능)
val : final 변수(값 변경 불가, immutalbe) - 변수 선언시 빈 값은 null 보다 None을 권장
- 변수 자료형 선언방법
변수명 뒤에 :(콜론)과 함께 쓴다.
var num : Int = 10 - val, var의 생략 불가
- 기본 자료형 AnyVal
- 참조 자료형 AnyRef
- if문은 자바와 같다.
- for문에서 to는 until로 바꿔 쓸 수 있다.
to는 ~ 까지
until은 ~미만
until보다 to가 한 루프 더 돈다. - --(1감소), ++(1증가) 표현을 지원하지 않는다.
- while문 do while문도 자바와 같다.
- class의 구현부를 없앨 수 있다.
- case class는 class의 확장형으로 외부에서 멤버변수에 접근이 가능하다.
case class는 new 생략가능 - 동반객체
같은 이름의 객체와 클래스
각자의 private 필드나 메서드를 자유롭게 접근할 수 있다. - 상속
부모 이기는 자식 없다. - 트레이트(trait) = 특성
트레이트 : 하나의 완성된 기능이라기 보다는 어떠한 객체에 추가될 수 있는 부가적인 하나의 특성
트레이트와 추상클래스는 그자체로 인스턴스화가 어렵다.
트레이트에서 구현된 메서드를 오버라이드 하고 싶을때 override 예약어를 꼭 써야한다.
트레이트의 기능을 보면 다중상속을 제외하고는 추상메서드와 다를게 없고, 로직을 구현할 수 있다는 점을 제외한다면 인터페이스와 다를게 없다. - 다이아몬상속이 가능함
마지막 override만 실행 할 수도 있고, 전부 다 실행 할수도 있다. - 예약어 return 생략가능
return 명시하면 리턴 타입 필수 - 리턴타입 생략가능
예약어 return 생략 불가 - '=>' call by name
'=>'를 함수 표현식이라고 한다.
매개변수가 필요할 때 해당 함수를 실행시켜 값을 가져온다.
함수를 실행 시켜 리턴 값만 가져오는 것이 아니라 함수 자체를 부른 다는 것이다. - 매개변수에 함수를 넣을 수 있다.
- 부분함수
함수의 일부 매개변수만 고정하는 것이다.
계속 변하는 매개변수는 '_'로 쓰고 자료형만 정해주면 된다. - 커링
여러 개의 인수를 받는 하나의 함수를 하나의 인수를 받는 여러개의 함수로 바꿔주는 기법
매개변수를 받을 때 각각의 매개변수를 ()로 감싸준다. - 스칼라는 매개변수가 하나면 Function1, 두 개면 Function2, 이런식으로 22개 까지 Function을 상속하는 트레이트를 제공한다.
- 스칼라는 함수 자체를 1급 시민으로 다룬다.
1급 시민 혹은 1급 객체란 매개변수의 인수로 들어갈 수도 있고 반환으로 받을 수도 있는 자격을 가진 객체를 말한다. - loop함수 - 반복문
- 함수내부에서 자신을 다시 호출 하는 함수를 재귀함수라고 한다.
- 매개 변수의 기본값을 정해 줄 수 있다.
- apply()는 변수를 받아 함수에 적용시켜 결과를 만들어내는 일종의 설정자와 같은 역할을 한다.
인스턴스를 부르면 바로 apply()가 실행된다.
자바의 생성자 역할도 한다. - implicit함수
암묵적인, 묵시적이라는 뜻으로 적당한 함수가 있으면 연결해서 에러를 줄인다. - 함수는 메서드를 아우르는 용어다.
- Any 아무 자료형이나 가능
- case class
패턴매칭에 적합한 클래스
보통의 클래스보다 기능이 많다. - Extractor 패턴 매칭
Extractor : 추출자
unapply() : 추출함수 - 한 배열안에 서로다른 타입의 자료형을 동시에 넣을 수 있다.
- 데이터의 집합을 벡터라고 한다.
벡터들이 모여있는 형태는 행렬이라고 한다.
행렬은 데이터가 횡과 종으로 모여있는 상태를 말한다. - 리스트는 초기화시 크기를 지정하지 않아도 된다.
크기가 동적이다.
리스트는 생성시 new를 쓰지 않는다.
cons("::")연산자를 통해 리스트에 속한 데이터임을 표기 한다.
마지막에 Nil을 필수로 붙여줘야 한다.
Nil은 리스트의 끝을 의미한다.
ex) val list = "a" :: "b" :: "c" :: "d" Nil
빈리스트를 생성하고 싶으면 Nil을 초기화 하면 된다.
"++"나 ":::"연산자로 리스트를 합칠 수 있다. - map은 java와 거의 비슷하다.
맵 생성시 new를 쓰지 않는다.
자료형을 명시 하지 않아도 된다. (제네릭하게 사용됨)
맵에 데이터를 추가할 때는 "+"연산자를 사용한다.
맵에 데이터를 삭제할 때는 "-"연산자를 사용한다. - set(집합)은 중복을 허용하지 않는다.
- 튜플(Tuple) 데이터의 묶음이다.
괄호와 쉼표를 통해 생성한다.
튜플은 함수를 통해 반환 될때 하나의 값으로 본다. - 옵션은 None이거나 Some()을 하나이상 가지고 있다.
None은 널 포인터 예외를 방지해준다.
반응형
'[프로그래밍] > BackEnd' 카테고리의 다른 글
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path (0) | 2017.12.05 |
---|---|
20170101 스칼라 세팅에서 hello world까지 (0) | 2017.01.01 |
WARN : org.springframework.web.servlet.PageNotFound (0) | 2015.12.02 |
스프링 시큐리티 참고자료 (0) | 2015.12.02 |
The reference to entity "characterEncoding" must end with the ';' delimiter. (0) | 2015.11.21 |
댓글