본문 바로가기

Programming

sbt 를 사용하여 IntelliJ project 생성하기 아래 사이트에 자세한 설명이 나와있다. https://github.com/mpeltonen/sbt-idea 더보기
Sorted Array to Binary Search Tree - 정렬된 배열을 이진 탐색 트리로 변환 정렬된 배열을 이진 탐색 트리로 변환하는 알고리즘이 있다. 아래와 같이 구성되어 있는데, Recursive 하게 작성되어 있다. Code는 Java 언어로 작성 되어있다. BinaryTree* sortedArrayToBST(int arr[], int start, int end) { if (start > end) return NULL; // same as (start+end)/2, avoids overflow. int mid = start + (end - start) / 2; BinaryTree *node = new BinaryTree(arr[mid]); node->left = sortedArrayToBST(arr, start, mid-1); node->right = sortedArrayToBST(arr,.. 더보기
Parser 에 대한 기초지식 아래 글은 The Definitive ANTLR4 Reference 에서 발췌한 글이다.아주 좋은 글인 거 같아서 이렇게 남겨서 두고두고 보고 싶다. ㅎㅎ Syntax tree or parse tree This represents the structure of the sentence where each subtree root gives an abstract name to the elements beneath it. The subtree roots correspond to grammar rule names. The leaves of the tree are symbols or tokens of the sentence.Token A token is a vocabulary symbol in a language;.. 더보기
merge sort in Python - Python 으로 merge sort 구현하기 Python 을 복습할 겸, 학부시절 재미있게 공부했던 merge sort 를 구현해보았다. wikipedia 에 Pseudo code 가 있어서 쉽게 구현할 수 있었다. 다시한번 Python 언어가 얼마나 프로그램 알고리즘을 검증하는데 편한 언어인지 다시 한 번 알게 된 시간 이었다. 작성된 코드가 Pseudo code 와 거의 똑같다. 정말 최고다! '''Created on 2013. 3. 21. @author: starblood''' def merge(left, right): result = [] while len(left) > 0 or len(right) > 0: if len(left) > 0 and len(right) > 0: if left[0] 0: result.append(left[0]) l.. 더보기
Scala - Java 의 interface 의 가려운 부분을 긁어주는 trait 오늘은 뭐에 feel 받았는지, 스칼라 공부를 하면서 글을 쓰고 싶은 날이다. 벌써 스칼라 관련 글을 3개 연속으로 썼다... :) 스칼라 언어에는 Java언어의 interface에 해당하는 trait이라는 녀석이 있다.이 녀석은 Programming in Scala 2nd Edition 에서는 아래와 같이 소개가 되어있다. Traits are a fundamental unit of code reuse in Scala. A trait encapsulates method and field definitions, which can then be reused by mixing them into classes. Unlike class inheritance, in which each class must inher.. 더보기
Scala - apply 함수는 무슨 일을 하는 것일까? Scala 언어에서 각종 라이브러리마다 공통되는 함수가 존재하는데, apply 라는 녀석이다. apply 라는 녀석은 말 그대로 어떤 함수를 적용 시킨다는 의미인데, 자세히 이야기 하면, apply 와 함께 들어오는 인자에 대해서 어떤 함수를 적용 시킨다는 뜻이다. 가령 예를 들어서 아래와 같은 코드가 있다고 하자. f1 은 x 와 y 두 정수를 받아서 합쳐서 그 값을 돌려주는 함수이다. f1.apply(2,3) 을 하게 되면 이 f1 이라고 정의된 함수에 2,3 이라는 인자를 적용해서 함수의 역할을 하라는 뜻이다.여기서 신기한 것이 우리는 자연스럽게 f1(2,3) 이라고 호출하고 싶다. 왜냐하면, f1.apply(2,3) 은 좀 자연스럽지 않기 때문이다.여기서 f1 은 함수이지만 스칼라 언어에서 역시 .. 더보기
Scala - 함수를 정의 할 때 관례 (Convention) 스칼라 언어로 함수를 정의할 때 아래와 같이 두 가지 방법으로 정의할 수 있다. 결과를 확인하면, 똑같다... 하는 일도 똑같은데 왜 (...) 이 필요할까? 라는 의문을 제기할 수 있다.그래서 잘 찾아봤는데 문제의 해답은 coding convention 이라는 것이다. 스칼라 언어에서 인자가 없는 함수를 정의할 경우, 괄호(parentheses) 가 있고 없고의 차이는 side effect 가 있냐 없냐의 차이이다.side effect 라는 것은 standard out 을 출력 하거나 어떤 mutable 한 데이터의 값을 변경하는 경우를 의미한다. 그래서 side effect 가 있는 것은 (...) 를 사용하고 없는 것은 그냥 함수 이름만 사용하면 된다. 결론적으로 함수를 정의할 때 (...)의 사용.. 더보기
Scala - 함수를 사용할 때 (...) 과 {...} 의 차이 Scala 로 프로그래밍 하던 중에 궁금한 것이 생겼다. 함수를 사용할 때 (...) 과 {...} 둘 다 사용가능 한 것이었다.하지만 어떤 경우는 컴파일이 되지 않았다. 왜 그런 것일까? 이 둘의 차이는 뭘까? 라는 의문이 생겼다. 예를 들어 아래와 같은 코드는 같은 일을 한다. 그리고 컴파일 에러도 생기지 않는다. 하지만 아래와 같은 코드는 컴파일 에러를 발생 시킨다. 그래서 아래와 같이 {...} 를 사용하면 문제가 생기지 않고 잘 작동함을 알 수 있다. 아하!!! 바로 차이는 (...) 과 {...} 의 차이는 expression 이 한개인가 아니면 여러개 (block of codes) 인가의 차이이다.함수에 표현식을 여러개 넣고 싶다면 {...} 를 사용하고 한 개만 넣고 싶다면, (...) 를.. 더보기
리팩토링 설명 (Introduction to Refactoring) 1. Introduction to Refactoring 1.1 Definition of Refactoring A. Refactoring(명사) - 소프트웨어를 보다 쉽게 이해할 수 있고, 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화 없이 내부 구조를 변경하는 것. B. Refactor(동사) - 일련의 Refactoring을 적용하여 겉으로 보이는 동작의 변화 없이 소프트웨어의 구조를 바꾸다. 1.2 Reason of Refactoring A. Refactoring은 소프트웨어의 디자인을 개선시킨다. B. Refactoring은 코드를 정돈 하는 것이다. 그래서 코드의 중복된 부분을 제거 한다. 이렇게 함으로 C. 나중에 코드를 수정하더라도, 필요한 부분만 수정할 수 있을 뿐만 아니라, 각.. 더보기
디자인 패턴 설명 (Design Pattern) Explanation of Design Patterns Design Pattern은 크게 4가지 분류로 요약해 볼 수 있다. 1. Creational Patterns, 2. Structural Patterns, 3. Behavioral Patterns, 4. Concurrency patterns 이다. 그리고 각 분류마다 다양한 Pattern들이 있다. 대략 38개 정도의 정형화 되어 있는 Pattern들이 있고, 이 보고서에서는 1. – 3. 에 해당하는 Category의 대표적인 13개의 Pattern들에 대해서만 언급하고자 한다. 1.1 Creational Patterns 1.1.1 Factory Method Pattern - 이 Pattern에서는 객체를 생성하기 위한 Interface를 정의하는.. 더보기