2022 12 29
2022-12-29¶
스칼라 기초 맛보기¶
- 참고: https://www.youtube.com/watch?v=C6B4EPbnvfo&list=PL8kmk2VivDmRueOZS4aKm0xUlYp0frQQS
- 참고: https://docs.scala-lang.org/tour/tour-of-scala.html
- [What is Scala]
- OOP + FP 둘 모두 사용
- Pure OOP
- 모든 값은 객체다
- 클래스, 속성, mixin based composition, 다중 상속 등을 지원
- Functional
- 모든 함수가 값이다
- 익명함수 정의에 간편한 문법
- 고차함수, 중첩함수, currying(?) 도 지원한다네
- Singleton Object가 있어 클래스 멤버가 아닌 여러 함수를 그룹지을 수 있다
- 정적 타입 언어
- 정적 추상화, 안전함, 일관성으로 타입 강제
- 제네릭
- variance annotation
- upper/lower bound
- inner class
- abstract type member: abstract method?
- compound type: 타입 조합
- explicitly typed self reference
- implicit parameter
- conversions
- polymorphic methods
- 확장 가능성
- DSL(?)을 만들기 쉽다네
- DSL: 특정 도메인에 특화된 언어를 말함
- 특정 영역의 문제 해결에는 그 영역에 맞는 특화된 도구를 사용하자
- Scala Interoperates
- 자바 런타임과 잘 동작함
-
[맛보기 (Scala 2 기준)]
- Value: 재할당 금지, 불변 객체
- Variable: 재할당 가능, 변수로 동작
- Block: 코드 블럭안에 expression 전달 가능. 전체의 결과는 마지막 줄(이게 리턴값임)을 반환
- Functions: 스칼라가 함수를 일급 객체로써 변수에 정의하는 방법은 다음과 같다
- Method: 함수를 그 자체로 선언하려면 이렇게
- Class: 생성자를 써주면서 만드는데... 여러 생성자를 통한 객체 생성은 어찌하는지 약간 궁금쓰
- Case Class: 불변이며, value 값 자체로 비교되는 Value Object
- 별도의 비교 연산자 없이도 내부 객체의 값이 같다면 같은 객체로 반환(동등성인지 동일성인지는 확인해봐야 할 듯)
- new 없이 생성
- Object: 자기 자신 클래스의 싱글턴 인스턴스 (오로지 하나의 인스턴스만 만드는 클래스 정도 같음)
- Trait: field, method 담고 있는 타입
- abstract class, interface 느낌이 나는 친구
- multiple trait 조합될 수도 있다니, 다중 상속을 지원하나 봄
trait GreeterTrait { def greet(name: String): Unit } class DefaultGreeter(prefix: String, postfix: String) extends GreeterTrait { override def greet(name: String): Unit = { println(prefix + name + postfix) } } val defaultGreeter = new DefaultGreeter("Hi! ", " Joel!"); defaultGreeter.greet("Developer");