본문 바로가기

scala

1101 Inheritance vs. Composition 코드 reuse 관점에서 상속은 좀 비효율적임 + 상속을 받게 되면 가독성도 떨어지고, 코드를 잘못 이해할 가능성이 높아짐. 상속 말고 코드를 reuse하게 해주는 방법 => Composition abstract class Iter[A] { def getValue: Option[A] def getNext: Iter[A] } class ListIter[A](val list: List[A]) extends Iter[A] { def getValue = list.headOption def getNext = new ListIter(list.tail) } abstract class Dict[K,V] { def add(k: K, v: V): Dict[K,V] def find(k: K): Option[V] } Q: H.. 더보기
Tail Recursion 추가 포스팅 Scala는 Functional 스타일을 권장해서 Loop 보다는 Recursion을 더 권장한다. Loop보다 Recursion이 사람의 사고에 더 가깝다고 하고, 모든 Loop는 재귀로 표현할 수 있다고 한다. 처음에 교수님께서 과제 조건으로 for문이나 while문을 사용하지 말라고 하셔서 잘 이해가 안갔는데 이제야 이해가 된다. 아마 앞으로도 scala를 다루는 한 recursion은 빼놓을 수 없는 부분이 될 것 같으니 이번 기회에 빠삭하게 공부해보겠다.... 아쟈아자! 아래 내용은 Scala By example의 4.6 Tail Recursion 부분에 나온 예제이다. def gcd(a:Int, b:Int):Int = if (b==0) a else gcd(b,a%b) 한줄로 끝나서 조금 허무하.. 더보기
PART 1 - Functional Programming with Function Applications (3) 4차시 수업에 해당하는 내용이자 저 긴 제목의 마지막!!!!! ▶ Conditional Expression If-else 형식 : if (b) e1 else e2 b : Boolean expression e1, e1 : same type if (true) e1 else e2 -> e1 if (false) e1 else e2 -> e2 def abs(x:Int) = if (x>=0) x else -x ▶ Boolean Expressions true / false !b b && b b || b && : AND 연산자 ( 둘다 true 여야 true 출력) | | : OR 연산자 (둘중 하나라도 true면 true 출력) ! : NOT 연산자 a >= b a > b a Boolean)= if (x) y els.. 더보기
PART 1 - Functional Programming with Function Applications (2) 이 포스팅은 3차시 내용에 관한 것이다 이제부터 살짝 헷갈릴 예정 복습을 많이 해야하는 부분이다 Evaluation Strategy : Call-by-name , Call-by-value ▶ Call-by-value (cbv) value로 call을 한다는 의미이니 value로 먼저 계산을 다 하고 나서 치환된다. 정확한 설명은 Evaluete the arguments first, then apply the function to them. 이라고 되어있다. ▶ call-by-name (cbn) 위에서 콜바이밸류는 이름값을 한다. value로 소환하니까.. 근데 이건 교수님이 왜 name인지 모르겠다고 하셨다 call-by-expression이 더 직관적으로 와닿는다. 이건 함수 body에 그냥 expre.. 더보기
Scala 란 스칼라의 특징 및 장점 파이썬처럼 간결한 문법으로 되어있음 객체지향과 함수형 프로그래밍이 모두 가능 자바와 호환 JVM 위에서 실행되기 때문에 성능이 좋음 정적 타입을 지향 REPL shell을 활용해서 Scripting Imperative vs Functional Programming 비교 ▶ Imperative Programming Computation by memory reads/writes Sequence of read/write operation Repetition by loop More procedual (describe how to do) Easier to write efficient code 예 ) Java, Javascript, C++, Python, Rust, ... ▶ Function.. 더보기