프로그래밍/Scala 썸네일형 리스트형 Scala - Type polymorphism /** * Problem 1: Structural subtype (5 points) * * Find the **least** (i.e. most specific) common supertype of Ty1 and Ty2. * * `CommonTy >: Ty1 && CommonTy >: Ty2` * * We will check your answer by comparing it with our answer as follows: * * `checkType(Ty1 {val a: B} type Func4 = {val f: E} => {val d: F} type Ty1 = { def apply: {val func: Func1; val c: C} => {val b: B; val c: C; val f: F} def f.. 더보기 Scala Array 문법 https://school.programmers.co.kr/learn/courses/1/lessons/82 --> 유니티 강의 C# 관련 https://school.programmers.co.kr/learn/courses/12 --> 30분 scala object LearnScala { // 배열의 내용을 출력하는 메소드 def printArray[K](array:Array[K]) = println(array.mkString("Array(" , ", " , ")")) def main(args: Array[String]): Unit = { // ① Array[Int] val array1 = Array(1, 2, 3) print("① ") printArray(array1) // ② Array[Any] val.. 더보기 백준 2738번 행렬의 덧셈 import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { val input = StdIn.readLine().split(" ") val N = input(0).toInt val M = input(1).toInt var A = Array.ofDim[Int](N,M) var B = Array.ofDim[Int](N,M) var C = Array.ofDim[Int](N,M) var i: Int = 0 var j: Int = 0 i = 0; while (i 더보기 Scala Array 문법 스칼라에서 리스트는 변경 불가능한 특징이 있어서 array를 공부하게 되었다. 일단 교수님께서는 계속 해서 def나 val 만 사용하라고 하시는데 val은 한 번 선언하면 그 값을 바꿀 수 없다는 특징이 있다. 하지만 array는 val로 선언을 하더라도 그 내부 값을 내가 직접 설정할 수 있다. 1. Array 생성 (1) 배열의 크기를 정하고 Array 초기화 및 요소 접근 val a = new Array[String](2) String type이 2개 들어갈 수 있는 배열 객체를 만드는 코드이다. 지금 배열 객체는 빈 방이 2개 있는 것이랑 같아서 내가 채워주어야 한다. a(0) = "first" a(1) = "second" 이렇게 넣으면 배열의 각 인덱스에 값이 할당되게 된다. (2) 요소 접근 .. 더보기 Scala String 문법 프로그래머스 문제에서 369 게임 문제를 풀다가 알게된 사실 정수 -> 문자열 -> 정수로 바꿔서 풀고 있었는데 char을 int로 변경하는 경우 ascii코드의 형식으로 반환된다 따라서 0의 ascii 코드 값에 해당하는 48만큼을 빼주어야 우리가 원하는 값을 얻는다. 또 문자열 내부에 변수를 삽입하는 경우가 생긴다. (파이썬의 f-string과 비슷) // 변수 생성 val a = "My" val b = "Name is" val c = "unho" // 문자열 내부에 변수 삽입 val result = s"${a} ${b} ${c}" //문자열 출력 print(result) // My Name is unho 그 외 자주 쓰이는 String Method These are the most important.. 더보기 1103 Mixin, Stacking with Traits Base : Interface Core : Functionality (trait or concrete class) Custom : Modifications Stack 구현하기 1. BASE trait Stack[A] { def get():(A,Stack[A]) def put(x:A):Stack[A] } 2. CORE 피자에 해당 class BasicIntStack protected (xs: List[Int]) extends Stack[Int] { override val toString = "Stack:" + xs.toString def this() = this(Nil) //empty stack protected def mkStack(xs: List[Int]): Stack[Int] = new BasicIn.. 더보기 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.. 더보기 Structure Type 슬라이드에 있는 이 예시 코드가 조금 헷갈린다. 함수 g는 Foo 에 대해서 받겠다고 했는데 왜 g(foo)를 하는지??? /* 결론 : Foo type의 정의 요소만 갖추면 (그 이상 요소를 갖더라도) Foo type의 연산 등을 모두 이용할 수 있다. Q. 그럼 여기서 누가 subtype인가? foo와 sun은 Foo의 subtype이다 Foo의 자식 느낌... Foo에서 파생되었다고 생각하자 */ /** * Structure type (Record Type) */ val gn = 0 object foo { val a = 3;def b = a+1 def f(x:Int) = b+x+gn;def f(x:String) = "hello" + x } object sun{ val a = 5; val b = 10.. 더보기 이전 1 2 3 다음