자바를 공부하면서 자주 듣는 툴이 Maven입니다.

 

자바를 시작한지 얼마 안된 저로서는 참~~ 궁금하더군.

 

과연 얼마나 프로젝트 개발을 편하게 해 주길래 Maven을 사용해야 할까 하고 말이죠~

 

그래서 검색을 해보니 설치 및 사용 방법 등에 대해서는 매우 많이 나오더군요.

 

저는 일단 아래 두 개 주소를 주로 봤습니다. 저자들이 설명을 잘 해 주셔서 사용하기는 어렵지 않더군요.

 

http://dimdim.tistory.com/entry/Maven-%EC%A0%95%EB%A6%AC

 

http://www.gliderwiki.org/wiki/105#Maven

 

위 주소의 글들이 너무 길어서 간단히 설치법 정도만 알고 싶다 하시는 분들은 아래 주소의 글을 확인 해도 됩니다.

 

http://bigmark.tistory.com/30

 

이제 설치는 다 한 상태에서 간단하게 Maven을 이용하여 아래 포스팅에서 작성했던 자바로 복소수 사용하기 예를 다시 해 봤습니다.

 

2014/03/19 - [programming language/JAVA] - 자바에서 복소수(Complex Number) 사용하기 commons.apache.math

 

일단 아래 그림과 같이 Maven Project를 하나 만듭니다.

 

아래 화면에서 Create a simple project 를 선택해 줍니다. 그렇지 않으면 오만가지 폴더들이 생기더군요.

 

다음으로 Grup id 에 적당히 3단계 정도로 이름을 정해 주고~ Artifact ID 는 프로젝트 명을 적어 줍니다.

 

결과적으로 생성되는 프로젝는 다음과 같은 구조 입니다.

 

위 그림과 같이 src >> main >> java 에 Class 를 만들어서 코딩하면 되고~ pom.xml 파일에 dependencies에 라이브러리들을 추가하면 됩니다.

 

아래 그림과 같이 pom.xml 파일을 더블 클릭하고~ Dependencies 탭에서 Add 를 누립니다. Add 를 눌러서 나오는 Select Dependency 창에서 아래 그림과 같이 math3 라고 타이핑 하고 조금 기다립니다.

그럼 아래 그림과 같이 org.apache.commons 의 commons-math3 라이브러리가 나옵니다.

검색이 완료 되면 해당 라이브러리를 선택하고 OK 를 눌러 줍니다.


자바 라이브러리들은 아래 주소에서 검색할 수 있습니다.


http://mvnrepository.com/


라이브러리를 추가했으면 이제 pom.xml 파일을 CTRL + S 를 눌러서 저장해 줍니다.

 

다음으로 src >> main >> java 폴더에 Class 파일을 하나 만듭니다. 저는 아래 그림과 같이 ComplexTest 라는 클래스로 만들었습니다.

 

이제 main 함수 안에 코딩 하면 되겠죠~ 전체 코드는 다음과 같습니다.

 

package com.tistory.iamaman;

 

import org.apache.commons.math3.complex.Complex;

 

public class ComplexTest {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Complex c1 = new Complex(4, 3);

        Complex c2 = new Complex(5, 2);

        Complex c3 = null;

 

        c3 = c1.multiply(c2); // 곱하기

        double realV = c1.getReal(); // Real part

        double ImagV = c1.getImaginary(); // Imaginary part

 

        System.out.println("복소수 곱하기 : " + c3);

        System.out.println("Real Part :" + realV);

        System.out.println("Image Part: " + ImagV);

 

    }

}

 

Ctrl + F11 을 눌러서 실행해보니 이전에 했던것과 같이 동일한 결과가 나오더군요.

 

복소수 곱하기 : (14.0, 23.0)

Real Part :4.0

Image Part: 3.0

 

간단하게 나마 Maven 을 사용해 보니 자바 라이브러리를 찾으러 오만 군데 찾을 필요도 없고~ jar 파일을 어케 프로젝트에 추가하는지 고민 안 해도 되고~ 해서 좋더군요.

 

앞으로 적극적으로 사용하게 될 것 같네요.


요즘 자바가 쓰이는 데가 워낙 많다 보니 본의 아니게 JAVA 를 공부하게 됐다

 

아래 주소에서도 볼 수 있는 바와 같이

 

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

 

 

자바는 여전히 그 사용률에 있어 상위에 랭크 되어 있는 컴퓨터 언어이다.

 

어쨌든 자바를 공부하기 위해 보통은 책을 한 권쯤은 구매하곤 하는데

 

사고 나서 보니…… 인터넷에 자바 공부 자료들이 넘쳐났다.

 

첫 번째로는 JABOOK 라는 사이트 이다.

 

http://www.jabook.com/

 

자바뿐만 아니라 C, C#, JSP 에 대한 내용도 있으니 찬찬히 훑어 보기 바란다. 코드도 바로 바로 복사해서 실행해 볼 수 있어서 두꺼운 책보는 것보다 훨씬 효율적으로 공부 할 수 있고 군더더기 없는 설명들이 좋다.

 

두 번째로는 opentutorials 이다. 생활코딩으로 잘 알려진 사이트이며 자바뿐만 아니라 웹 관련 전반적인 언어들(HTML, CSS, JavaScript, JQuery, PHP…… )을 배울 수 있는 곳이다.

 

http://opentutorials.org/module/516

 

보통의 컴터 학원 선생들은 짧은 시간에 많은 내용을 전달하려다 보니 짜증내가며 따라 쳐 보라는 식으로 설명하는 반면에 opentutorials 의 주인장인 egoing 님은 목소리도 좋고~ 지금 이해 안 되도 걱정 마라~ 나도 그때는 몰랐다는 따뜻한 위로와 함께 수업을 진행한다. 감사한 사이트이다.

 

세 번째로는 http://www.soen.kr/ 이다.

 

 

위 사이트는 winapi 로 유명했던 사이트 같은데~ 아무튼 지금은 이름이 바뀐 것 같다.

 

아래 그림과 같이 라이브러리 → JAVA 에 들어가면 내용을 볼 수가 있다. 나처럼 C/C++ 에 익숙한 개발자들을 위한 설명이니 만큼 C/C++ 을 하다가 자바를 공부하고자 하는 분들에게 좋을 것 같다.

자바에는 정말 많은 클래스들이 존재하고~ 정말 헤아릴 수 없을 정도로 많더군요.

 

자바 코딩하는 분들이 많이 사용하는 Eclipse 역시도 너무 좋아서 Ctrl + Space 를 누르면~ 긴 자바 구문들도 외울 필요가 없어서 좋더군요.

 

자바에서 수학과 관련한 작업을 할 때 원주율, 지수, sin, cos등과 같은 기본적인 수학 함수들은 Math 클래스를 사용하곤 하는데~~ 복소수를 사용하려고 찾아보니 복소수 관련한 클래스는 제공하지 않더군요.

 

그래서 찾아보니 아래 주소의 Apache Commons Math 라이브러리에서 수학과 관련한 훨씬 다양한 기능들을 제공해 주더군요.

 

http://commons.apache.org/proper/commons-math/

 

일단 아래 주소에서 아래 그림과 같이 binaries 를 다운로드 받습니다.

http://commons.apache.org/proper/commons-math/download_math.cgi

 

현재 최신 버전은 3.2 버전이더군요. 저는 현재 윈도우 운영체제라 zip 파일을 다운로드 받았습니다.

 

다운도드 받은후에 commons-math3-3.2-bin.zip 파일의 압축을 풀어줍니다.

 

저는 자바 프로젝트에서 lib 폴더를 하나 만들고 commons-math3-3.2.jar 파일을 넣어놓고 사용합니다.

 

Eclipse에서 아래 그림과 같이 Add JARs를 눌러서 commons-math3-3.2.jar 파일을 추가 합니다.

 

이제 자바에서 복소수를 맘껏 사용해 보세요~

 

저는 다음과 같이 복소수를 사용해 봤습니다.

 

package test;

 

import org.apache.commons.math3.complex.Complex;

 

public class ComplexTest {

 

    public static void main(String[] args) {

        Complex c1 = new Complex(4, 3);

        Complex c2 = new Complex(5, 2);

        Complex c3 = null;

 

        c3 = c1.multiply(c2); // 곱하기

        double realV = c1.getReal(); // Real part

        double ImagV = c1.getImaginary(); // Imaginary part

 

        System.out.println("복소수 곱하기 : " + c3);

        System.out.println("Real Part :" + realV);

        System.out.println("Image Part: " + ImagV);

    }

}

 

이렇게 결과가 나오더군요~

 

복소수 곱하기 : (14.0, 23.0)

Real Part : 4.0

Image Part: 3.0

 

Apache Commons Math 라이브러리에는 복소수 뿐만 아니라 아래 내용과 같이 다양한 수학 라이브러리를 제공해 줍니다. FFT, DCT, DST, Fast Hadamard Transform 등과 같은 transform 뿐만 아니라 Machine Learning 까지도 제공하더군요.

 

http://commons.apache.org/proper/commons-math/userguide/overview.html

 

org.apache.commons.math3.stat - statistics, statistical tests

org.apache.commons.math3.analysis - rootfinding, integration, interpolation, polynomials

org.apache.commons.math3.random - random numbers, strings and data generation

org.apache.commons.math3.special - special functions (Gamma, Beta)

org.apache.commons.math3.linear - matrices, solving linear systems

org.apache.commons.math3.util - common math/stat functions extending java.lang.Math

org.apache.commons.math3.complex - complex numbers

org.apache.commons.math3.distribution - probability distributions

org.apache.commons.math3.fraction - rational numbers

org.apache.commons.math3.transform - transform methods (Fast Fourier)

org.apache.commons.math3.geometry - geometry (Euclidean spaces and Binary Space Partitioning)

org.apache.commons.math3.optim - function maximization or minimization

org.apache.commons.math3.ode - Ordinary Differential Equations integration

org.apache.commons.math3.genetics - Genetic Algorithms

org.apache.commons.math3.fitting - Curve Fitting

org.apache.commons.math3.ml - Machine Learning

 

간단하게 Fast Fourier Transform 을 한번 해 봤습니다. FFT 는 당연히 2의 자승으로 넣어주셔야 합니다.

 

package test;

 

import org.apache.commons.math3.complex.Complex;

import org.apache.commons.math3.transform.DftNormalization;

import org.apache.commons.math3.transform.FastFourierTransformer;

import org.apache.commons.math3.transform.TransformType;

 

public class ComplexTest {

 

    public static void main(String[] args) {

 

        FastFourierTransformer v = new FastFourierTransformer(

                DftNormalization.STANDARD); // FFT

 

        Complex[] vv = new Complex[16]; // 16 size FFT

        for (int j = 0; j < vv.length; j++) {

            vv[j] = new Complex(3, 0);

        }

        vv = v.transform(vv, TransformType.FORWARD); //

        for (Complex c : vv) {

            System.out.println(c);

        }

    }

}

 

FastFourierTransformer 의 옵션인 DftNormalization.STANDARD 는 FFT 의 스케일을 정규화 하지 않겠다는 것이고~ DftNormalization.UNITARY 는 정규화 하겠다는 뜻입니다.

 

Transform() 의 TransformType.FORWARD 은 FFT 를 TransformType.INVERSE 는 Inverse FFT 를 의미 합니다.

 

다음과 같이 정상적인 결과가 나오더군요.

 

(48.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

(0.0, 0.0)

 

이번에는 그냥 간단하게만 사용해 봤는데~ 시간을 가지고 깊이 있게 공부해 보고 싶더군요.


  1. 조기원 2014.04.24 01:13

    좋은 정보 감사합니다.^^

+ Recent posts