본문 바로가기

Development

Find Bug Eclipse에서 버그가 우려되는 부분을 찾아주는 Plug-in이다.~~ ㅎㅎ 마켓에 들어가서~!! findBugs를 찾자~~ 설치를 완료하나면 내가 버그가 있는지 살펴보고 싶은 코드에서 오른쪽 키를 누르면......아래와 같이 Find Bugs가 나오고 여기서 Finds Bugs를 누른다.!! 검색을 하면 아래와 같이 버그 유발 코드를 찾아준다. 그리고 왜 버그인지 이유도 설명해준다. 더보기
[Scala] Local Type Inference 스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??설계를 한듯하다. 하나씩 예시를 살펴보자~! 첫번째 예시는 코드로 파악이 가능하다. object InferenceTest1 extends App { val x = 1 + 2 * 3 // the type of x is Int val y = x.toString() // the type of y is String def succ(x: Int) = x + 1 // method succ returns Int values} 두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다. object InferenceTest2 { def fac(n: Int) = i.. 더보기
[Scala] Explicitly Typed Self References 자기 자신을 다른 Type으로 선언이 가능하다. 예시를 보자 Graph라는 클래스와 abstract class Graph { type Edge type Node def connectWith(node: Node): Edge = { val edge = newEdge(this, node) // now legal edges = edge :: edges edge } } ...} 더보기
[Scala] Lower Type Bounds 아래의 예시를 보면 LinkedList를 구현하였다. 하지만 ListNode[String]이라고 선언하면 ListNode[Object]를 사용할 수 없게 되는 상황이 나온다. case class ListNode[T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t def prepend(elem: T): ListNode[T] = ListNode(elem, this)} 조금 더 규칙을 허술하게 하고 싶을때 ?? 사용하면 좋다. prepend 함수에 [U >: T] 라고 해주면 case class ListNode[+T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t de.. 더보기
[Scala] Upper Type Bounds 스칼라는 추상타입의 경계를 조정? 이 가능하다. 예시로 보자 아래의 코드를 보면 T 더보기
[Scala] Traits 스칼라에서는 JAVA에서 interface와 비슷한 Traits가 있다. 하지만 구현이 가능한 것이 약간 다르다. trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x)} 이렇게 trait을 선언하고 아래와 같이 사용해 보자 class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x&& obj.asInstanceOf[Point].y == y}obj.. 더보기
[Scala] Polymorphic Methods 스칼라에서는 다형성 메소드를 지원한다. 아주 간단하게 사용 할 수 있다. 아래의 예시 코드를 보자 object PolyTest extends App { def dup[T](x: T, n: Int): List[T] = if (n == 0) Nil else x :: dup(x, n - 1) println(dup[Int](3, 4)) println(dup("three", 3))} dup라는 함수가 있고 [T]로 선언이 되어지게 되면 다형성이 적용이 된다. 출력 결과는 다음과 같다.List(3, 3, 3, 3)List(three, three, three) 더보기
ARC란.... 이번에 면접을 보게 되면서 ARC에 대해서 물어봤는데 단순히 Compiler가 retain / release를 대신 작성해주는 것으로 알고 있었다. 그렇지만 면접관은 조금 더 내용을 알았으면 하는 뉘앙스가 있어서 다시 한번 알아보기로 하였다. 공식 홈페이지에서 살펴보니 기본적인 설명은 컴파일 타임시 retain / release 자동으로 추가해준다고 한다.그리고 retain, release, autorelease 사용할 필요가 없으며 Property는 기본설정은 Strong이라고 한다. 그리고 ARC가 적용이 되면서 새로운 룰이 생겼다. 하나하나 번역하기는.. 본인의 영어실력도 좋지 않고 귀찮아서.. 그대로 올리면.. You cannot explicitly invoke dealloc, or impleme.. 더보기
[Scala] Pattern Matching 다른 언어에서 Switch와 Case문을 Scala에서는 간편하게 match라는 키워드로 구현하면 된다. 우선은 Int를 사용하는 예제를 보자 object MatchTest1 extends App { def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } println(matchTest(3))} 두번째 예제는 Any라는 키워드를 통해 다양한 키워드 매칭이 가능하다. 그리고 또 놀라운 점은case y : 보자 case에 매칭되지 않는 Int 타입인 경우 y라는 변수로 활용이 가능하다. object MatchTest2 extends App { def matchTest(x: Any): Any = x .. 더보기
[Scala] Higher-order Functions 스칼라에서는 고차 함수를 지원한다. 간단하게 설명하면 다른 함수의 파라미터를 받아서 처리하는 것이 가능하다?! 아래의 예제를 보면 decorator의 layout과 7이라는 파라미터를 전달하면 apply에서 실행을 시켜준다. class Decorator(left: String, right: String) { def layout[A](x: A) = left + x.toString() + right}object FunTest extends App { def apply(f: Int => String, v: Int) = f(v) val decorator = new Decorator("[", "]") println(apply(decorator.layout, 7))} 실행결과는 아래와 같이 나온다. [7] 여기서 .. 더보기