46
스칼라를 통한 다양한 언어의 패러다임 맛보기

[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Embed Size (px)

Citation preview

Page 1: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라를 통한

다양한 언어의 패러다임 맛보기

Page 2: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

변하는 것과 변하지 않는 것

• 변하는 것

• 변하지 않는 것

Page 3: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

오늘의 목표

• 프로그래밍 언어의 패러다임?

• 스칼라

• 실습

Page 4: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

프로그래밍 언어의 패러다임

• 패러다임이란?

• 패러다임의 종류

• 객체지향

• 함수형

• 타입시스템

• 기타

Page 5: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

세벌식 자판

Page 6: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

객체지향

• 프로그래머들이 프로그램을 상호작용하는 객체들의 집합으로 보는 시각

Page 7: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

함수형

• 상태값을 지니지 않는 함수값들의 연속으로 보는 시각

Page 8: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

타입 시스템

• 프로그램 각 부분이 만들어낼 수 있는 값의 종류를 나눔

으로써 그 프로그램이 특정 오류 상황을 발생시키지 않는

다는 것을 자동으로 검증해주기 위한 문법적 검증 방법

Page 9: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

프로그래밍 언어

• 좋은 프로그래밍 언어란?

• 프로그래밍 언어의 종류와 역사

Page 10: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

좋은 프로그래밍 언어?

Page 11: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

실무에서 어떤 언어를 사용하나요?

• Java

• Python

• Ruby

• JavaScript

• DSL

• SQL

• Template Language

Page 12: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

코딩하는 시간이 전체 개발에서 차지하는 비율

• CI

• 빌드

• 테스트

• 배포

• 분석

• 테스트

• VCS

• 협업

• 개발 도구

• 문서화

• 적절하게 휴가 쓰는 법

Page 13: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라

• 스칼라 소개

• 선택의 이유

• 스칼라 패러다임과 스타일

Page 14: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라의 탄생

• Martin Odersky

Page 15: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

현재…

Page 16: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라

Page 17: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Scalability

Functional Object

Page 18: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

선택의 이유

• FP and OOP with Java libraries

• 자바 프로젝트의 효율성을 끌어올리기 위해서

• 실용적인 함수형 프로그래밍 언어

• 거쳐가는 언어

• 배울게 많아서

• 스타일을 강제하지 않음

• 우수한 개발자 커뮤니티

Page 19: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

학습에 투자할 만한 가치가 있을까?

• 스칼라는 어렵다?

• 스칼라를 배움으로써 얻을 수 있는 것은?

Page 20: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

어렵다는 것은?

• 학습에 필요한 기반 지식이 필요하다.

• 외워야 할 것이 많다.

• 생소한 개념을 익혀야 한다.

• 문서나 샘플이 부족하다.

Page 21: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라를 배움으로써 얻을 수 있는 것은?

• More OOP

• Pure Functional

• Be better developer

Page 22: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Scala vs Java

• Simple Simple Simple

• More OOP

• Pure Functional

Page 23: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Java ClassA classA = new ClassA(“myFirstClass”); ClassB classB = new ClassB(“mySecondClass”); !// Scala val classA = ClassA(“myFirstClass”) val classB = ClassB(“mySecondClass”)

Simple

Page 24: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Java List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add(“3”); // Arrays.asList("1", "2", "3"); !!// Scala val list = List("1", "2", "3")

Simple

Page 25: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Java List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add(“3"); !!// Scala val list = List("1", "2", "3")

Simple

Page 26: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Java List<Integer> iList = Arrays.asList(2, 7, 9, 8, 10); List<Integer> iDoubled = new ArrayList<Integer>(); for(Integer number: iList){ if(number % 2 == 0){ iDoubled.add(number 2); } } !!// Scala val iList = List(2, 7, 9, 8, 10); val iDoubled = iList.filter(_ % 2 == 0).map(_ 2)

Java vs Scala

Page 27: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

5 + 3

More OOP

Page 28: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Imperative vs Functional (Declarative)

• 퀵소트 알고리즘

Page 29: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

public void quickSort(int left, int right){ int i,j; TableEntry p, tmp if(left<right){ i=left; j=right; p=table[left]; while(i<j){ while (table[j].key>p.key) j--; while (i<j && table[i].key<=p.key) i++; ! tmp = table[i]; table[i]=table[j]; table[j]=tmp; } table[left] = table[i]; table[i]=p; quickSort(left,i-1); quickSort(i+1,right); } }

Quick sort (Java, Imperative)

Page 30: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

def sort(xs: Array[Int]) { def swap(i: Int, j: Int) { val t = xs(i); xs(i) = xs(j); xs(j) = t } ! def sort1(l: Int, r: Int) { val pivot = xs((l + r) / 2) var i = l; var j = r while (i <= j) { while (xs(i) < pivot) i += 1 while (xs(j) > pivot) j -= 1 if (i <= j) { swap(i, j) i += 1 j -= 1 } } if (l < j) sort1(l, j) if (j < r) sort1(i, r) } sort1(0, xs.length - 1) }

Quick sort (Imperative)

Page 31: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

def sort(xs: Array[Int]): Array[Int] = { if (xs.length <= 1) xs else { val pivot = xs(xs.length / 2) Array.concat( sort(xs filter (pivot >)), xs filter (pivot ==), sort(xs filter (pivot <))) } }

Quick sort (Functional)

Page 32: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Python vs Scala

Page 33: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Python

• 코드의 의미가 명료하고 간결하다.

• 적절한 함수형 스타일, 절차형 스타일, 객체지향

• 훌륭한 라이브러리와 프레임워크

• 유용한 Wrapper 언어

• 동적언어

• 통일된 스타일

Page 34: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Scala

• 확장성 (타입 시스템, 순수 함수형)

• 잘 설계된 기본 라이브러리

• 풍부한 자바 라이브러리

• 확장 가능성

• 깊이 이해하기까지 익혀야 할 개념들이 많음

• JVM

• 다양한 스타일

Page 35: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

Swift와의 비교

Page 36: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Swift var myString: String? !// Scala val myString: Option[String]

Option Type

Page 37: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Swift switch value { case (x) where x > 0 : "positive" case (x) where x < 0 : "negative" } !// Scala value match { case x if x > 0 => "positive" case x if x < 0 => "negative" }

Switch & Pattern matching

Page 38: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Swift var x: (String,String) = ("dog","cat") !// Scala val x: (String,String) = (“dog","cat")

Tuple

Page 39: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Swift typealias MyString = String !// Scala type MyString = String

TypeAlias

Page 40: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Swift func f() -> (Int -> Int) !// Scala def f: Int => Int !

함수 선언

Page 41: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Scala @lazy var x = complexFunction() !// Swift lazy val x = complexFunction()

Lazy

Page 42: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

// Scala extension SomeType { var convert(x: Int): Int = { return x * 2 } } !// Swift trait myTrait { def convert(x: Int) = x * 2 }

Extension & Trait

Page 43: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

스칼라의 패러다임

• 객체지향

• 함수형

• 타입 시스템

Page 44: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

함수형

Page 45: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

타입 시스템

Page 46: [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기

실습

• Functional

• Lazy

• Pattern matching