SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
스칼라를 통한
다양한 언어의 패러다임 맛보기
변하는 것과 변하지 않는 것
• 변하는 것
• 변하지 않는 것
오늘의 목표
• 프로그래밍 언어의 패러다임?
• 스칼라
• 실습
프로그래밍 언어의 패러다임
• 패러다임이란?
• 패러다임의 종류
• 객체지향
• 함수형
• 타입시스템
• 기타
세벌식 자판
객체지향
• 프로그래머들이 프로그램을 상호작용하는 객체들의 집합
으로 보는 시각
함수형
• 상태값을 지니지 않는 함수값들의 연속으로 보는 시각
타입 시스템
• 프로그램 각 부분이 만들어낼 수 있는 값의 종류를 나눔
으로써 그 프로그램이 특정 오류 상황을 발생시키지 않는
다는 것을 자동으로 검증해주기 위한 문법적 검증 방법
프로그래밍 언어
• 좋은 프로그래밍 언어란?
• 프로그래밍 언어의 종류와 역사
좋은 프로그래밍 언어?
실무에서 어떤 언어를 사용하나요?
• Java
• Python
• Ruby
• JavaScript
• DSL
• SQL
• Template Language
코딩하는 시간이 전체 개발에서 차지하는 비율
• CI
• 빌드
• 테스트
• 배포
• 분석
• 테스트
• VCS
• 협업
• 개발 도구
• 문서화
• 적절하게 휴가 쓰는 법
스칼라
• 스칼라 소개
• 선택의 이유
• 스칼라 패러다임과 스타일
스칼라의 탄생
• Martin Odersky
현재…
스칼라
Scalability
Functional Object
선택의 이유
• FP and OOP with Java libraries
• 자바 프로젝트의 효율성을 끌어올리기 위해서
• 실용적인 함수형 프로그래밍 언어
• 거쳐가는 언어
• 배울게 많아서
• 스타일을 강제하지 않음
• 우수한 개발자 커뮤니티
학습에 투자할 만한 가치가 있을까?
• 스칼라는 어렵다?
• 스칼라를 배움으로써 얻을 수 있는 것은?
어렵다는 것은?
• 학습에 필요한 기반 지식이 필요하다.
• 외워야 할 것이 많다.
• 생소한 개념을 익혀야 한다.
• 문서나 샘플이 부족하다.
스칼라를 배움으로써 얻을 수 있는 것은?
• More OOP
• Pure Functional
• Be better developer
Scala vs Java
• Simple Simple Simple
• More OOP
• Pure Functional
// Java
ClassA classA = new ClassA(“myFirstClass”);
ClassB classB = new ClassB(“mySecondClass”);
!
// Scala
val classA = ClassA(“myFirstClass”)
val classB = ClassB(“mySecondClass”)
Simple
// 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
// Java
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add(“3");
!
!
// Scala
val list = List("1", "2", "3")
Simple
// 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
5 + 3
More OOP
Imperative vs Functional (Declarative)
• 퀵소트 알고리즘
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)
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)
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)
Python vs Scala
Python
• 코드의 의미가 명료하고 간결하다.
• 적절한 함수형 스타일, 절차형 스타일, 객체지향
• 훌륭한 라이브러리와 프레임워크
• 유용한 Wrapper 언어
• 동적언어
• 통일된 스타일
Scala
• 확장성 (타입 시스템, 순수 함수형)
• 잘 설계된 기본 라이브러리
• 풍부한 자바 라이브러리
• 확장 가능성
• 깊이 이해하기까지 익혀야 할 개념들이 많음
• JVM
• 다양한 스타일
Swift와의 비교
// Swift
var myString: String?
!
// Scala
val myString: Option[String]
Option Type
// 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
// Swift
var x: (String,String) = ("dog","cat")
!
// Scala
val x: (String,String) = (“dog","cat")
Tuple
// Swift
typealias MyString = String
!
// Scala
type MyString = String
TypeAlias
// Swift
func f() -> (Int -> Int)
!
// Scala
def f: Int => Int
!
함수 선언
// Scala
@lazy var x = complexFunction()
!
// Swift
lazy val x = complexFunction()
Lazy
// Scala
extension SomeType {
	
 var convert(x: Int): Int = { return x * 2 }
}
!
// Swift
trait myTrait {
	
 def convert(x: Int) = x * 2
}
Extension & Trait
스칼라의 패러다임
• 객체지향
• 함수형
• 타입 시스템
함수형
타입 시스템
실습
• Functional
• Lazy
• Pattern matching

Weitere ähnliche Inhalte

Was ist angesagt?

좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
Daum DNA
 

Was ist angesagt? (20)

SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
3-1. css
3-1. css3-1. css
3-1. css
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
 
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
 
Java class
Java classJava class
Java class
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
Java inner class
Java inner classJava inner class
Java inner class
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
Java JPA
Java JPAJava JPA
Java JPA
 
Java extends
Java extendsJava extends
Java extends
 

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

0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
Sung-hoon Ma
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
destinycs
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
destinycs
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
준일 엄
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
Sukjoon Kim
 

Ähnlich wie [D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기 (20)

0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
Scalability
ScalabilityScalability
Scalability
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
 
Scala
ScalaScala
Scala
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operator
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
자바 8
자바 8자바 8
자바 8
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
자바8강의 0강. java8 overview
자바8강의 0강. java8 overview자바8강의 0강. java8 overview
자바8강의 0강. java8 overview
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
 

Mehr von NAVER D2

Mehr von NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

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