본문 바로가기

Programming

Scala - syntax highlighting for vi vim vi 에디터를 사랑하는 나로서는, 가끔씩 IntelliJ 에서 scala 프로그램을 작성하는 것보다 vi 에디터에서 작성하는 것이 더 편할 때가 있다. 이럴때마다 문법 highlighting 이 되지 않아서 조금 불편해서 이번기회에 설정을 해두기로 했다. 이미 문법이 지원되어서 vim 공식 웹사이트에서 받아가면 된다. 하지만, 받아가는 것은 쉽지만 설정하는 것은 초보자에게 쉽지 않을 거라고 생각이 된다. 그래서 따로 정리를 해두기로 마음을 먹었다. 첨부한 파일을 자신의 HOME 디렉토리의 .vim 디렉토리에 압축 해제한다. $ cd ~/.vim $ unzip scala_vim.zip 이렇게 하면 ftdetect, indent, syntax 라는 3개의 디렉토리가 보이게 된다. 아래의 그림은 vi 에디터에.. 더보기
Scala - side effect 란 무엇인가? 아래와 같은 코드가 있다고 하자. 아래의 코드는 합계를 계산하는 프로그램이다. class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Unit = sum += b // Side Effect 가 있는 함수 def checksum(): Int = ~(sum & 0xFF) + 1 } 여기서 add 함수는 side effect 가 있는 코드이다. side effect 란 일반적으로 file I/O 나, 함수의 바깥쪽에 있는 어떤 상태를 변경시키는 것을 의미한다. 여기서 함수의 바깥쪽에 있는 어떤 상태라는 것은 private var sum 이라는 변수이다. 이 변수는 instance variable 로서 각각의 객체의 상태를 나타내준다. Scala 언.. 더보기
Scala - singleton object Scala 언어가 Java 보다 객체 지향 언어의 개념이라고 할 수 있는 것은 singleton objects 라고 할 수 있다. Scala 언어에서는 static member들을 가질 수 없다. 대신에 Scala 는 singleton objects 라는 것으로 이를 대신한다. singleton objects 의 정의는 class 라는 키워드를 object 라는 키워드로 사용하는 것을 제외하고는 클래스 정의와 비슷하다. 아래는 예제 코드이다. import scala.collection.mutable.Map object ChecksumAccumulator { private val cache = Map[String, Int]() def calculate(s: String): Int = if (cache.co.. 더보기
Scala 컴파일러 설치 필요에 의해서 Functional Language 를 하나 배워야 겠다고 생각을 했다. Functional Language 는 여러가지가 있지만, 그 중에서 Java Virtual Machine 에서 구동되고 Java API를 사용할 수 있는 유연성 좋은 Scala 라는 언어를 사용하기로 결심했다. 이 언어를 사용하여 프로그램을 작성, 컴파일, 실행을 하려면 Scala compiler 가 있어야 하고, JDK 가 필요하다. 그래서 JDK 를 먼저 설치하고 Scala 컴파일러를 설치하도록 한다. Scala 라는 여러 OS 에서 구동가능하지만, 본인은 Windows 를 사용하기 때문에 운영체제를 Windows로 가정하고 설치를 하려고 한다. Scala 컴파일러는 IzPack Installer 라는 것을 사용.. 더보기
Dump Java byte code from Java class file (Java byte code 보기) 이 포스팅의 일부는 IBM Developerworks의 Java bytecode 기사의 일부를 발췌하여 작성하였다. Java compiler는 Java source code를 Java byte code로 해석을 한다. Java byte code는 C/C++ 프로그램의 중간 표현식이라고 할 수 있는 assembler 에 해당한다. 유능한 C/C++ 프로그래머는 Debugging과 성능, 메모리 사용을 tuning하기 위해서 assembler instruction 정보를 사용한다. 이는 Java Programmer가 Java bytecode의 instruction의 의미를 이해하는 것과 같은 맥락이다. 그러므로, 좀더 고급 Java 프로그래머가 되기 위해서는 Java byte code에 대한 이해가 필요한다.. 더보기
멀티코어 시스템의 Java 동시성 버그 패턴 아래 글은 IBM developerworks 에 게재된 유용한 Java 관련 Concurrency 관련 이슈에 대한 대표적인 유형과 이를 해결하기 위한 방법들을 소개해 놓았다. 멀티코어 시스템의 Java 동시성 버그 패턴 http://www.ibm.com/developerworks/kr/library/j-concurrencybugpatterns/index.html 더보기
equals method 를 overriding 할 때 주의 점 우리는 클래스를 디자인 할 때, equals method 를 override 하게 되는 경우가 많다. override 하게 될 경우, 중요한 사항들이 있으니 4가지 정도가 있다. 첫 번째부터 세 번째 까지는 수학에서 나오는 용어와 같다고 생각하면 된다. 1. Reflexivity - 어떤 객체는 자신과 동일해야 한다. 즉 A equals A 라고 할 수 있어야 한다. 아주 당연한 이야기 이겠지만, 그렇지 않을 수 있다. 2. Symmetry - 두 객체는 그것들이 동일하다고 판단되어야 한다. 예를 들어서, A equals B 라고 한다면, B equals A 라고 할 수 있어야 한다. 3. Transitivity - 첫 번째 객체가 두 번째 객체와 같고, 두 번째 객체가 세 번째 객체와 같다면, 첫 번째.. 더보기
Creating runnable JAR using Apache ant (Apache Ant 로 Runnable JAR 파일 만들기) Java 언어로 작성된 프로그램이 들어있는 프로젝트를 빌드하기 위해서 Apache Ant 를 많이 사용한다. Eclipse 를 사용하여, 빌드, JAR 내보내기 등등 여러가지 작업들을 편리하게 할 수 있지만, 빌드 자동화 툴, 예를 들어서, Hudson 등을 사용할 경우 Eclipse 를 사용하기에 불편함이 존재한다. 이럴 경우에는 command line 으로 빌드, 패키징을 하기 위해서는 Ant 를 사용하면 간단하게 해결할 수 있다. Ant 를 사용하여 Runnable JAR 파일을 생성하기 위해서는 Ant 의 빌드 스크립트인 build.xml 을 수정하여야 한다. Runnable JAR 파일을 만들기 위해서는 manifest 라는 것을 사용하여야 하는데, 이것은 JAR file 안에 있는 패키징 된 .. 더보기
The CERT Oracle Secure Coding Standard for Java Java 프로그래밍을 하면서 보안관련 취약 코드를 작성하는 것을 미연에 방지해 주는 코딩 가이드라인이 있다는 사실을 알게 되었다. 이러한 가이드 라인을 제공하는 곳은 미국의 Carnegie Mellon 대학의 소프트웨어 엔지니어링 기관에서 운영하고 있는 http://www.cert.org 이라는 곳이다. 이 기관은 Java 뿐만 아니라 C/C++ 관련 보안관련 이슈도 다루고 있다. 아래의 링크는 자바 의 보안관련 기본적인 Coding guide line 이라고 보면 된다. https://www.securecoding.cert.org/confluence/display/java/The+CERT+Oracle+Secure+Coding+Standard+for+Java 더보기
All of Exception classes in Java 1.6 api Extracting all exception classes from java api is simple. Using linux command grep | cut | etc. AccessControlException AccessException AccountException AccountExpiredException AccountLockedException AccountNotFoundException AclNotFoundException ActivateFailedException ActivationException ActivityCompletedException ActivityRequiredException AlreadyBoundException AlreadyConnectedException Annotati.. 더보기