자바 설치를 한다는 것은 JDK 를 다운로드 받아 설치한다는 것을 의미합니다.

JDK (Java Development Kit) 는 자바 프로그램의 개발을 위한 소프트웨어와 라이브러리 모음입니다.

 

처음 자바를  접하시는 분들 또는 새로 JDK 설치가 필요하신 분들을 위해서

단계별로 상세하게 설명해 드리도록 하겠습니다.

 

 

 

1. JDK 다운로드

아래 링크를 통해서 Oracle 홈페이지를 방문하시면 JDK 를 무료로 다운 받을 수 있습니다.

http://www.oracle.com/ 

 

 

DOWNLOADS 에 마우스를 (클릭하지 마시고) 올려놓으시면 하위 메뉴들이 보여집니다.

그중에서 Java for Developers 를 클릭합니다.

 

 

 

일반적으로 자바 어플리케이션을 개발하기 위해 Java SE(Standard Edition) 가 사용됩니다.

현재 최신 버전인 7u13 을 다운받기 위해 위와 같이 클릭합니다.

 

 

 

License 와 관련하여 동의를 클릭하시고

리스트 중에서 자신의 컴퓨터 환경(OS)과 동일한 항목를 찾아서 Download 를 클릭합니다.

(저는 Windows7 32bit 환경이므로 Windows x86 의 jdk-7u13-windows-i586.exe 를 클릭하였습니다.)

 

 

 

브라우저 아래쪽으로 바로 실행 or 저장을 묻는 화면이 나타납니다.

실행을 선택합니다.

 

 

 

2. JDK 설치

 

 

설치여부를 묻는 다이얼로그입니다.

Next 버튼을 클릭합니다.

 

 

 

구체적인 설치요소 및 경로를  묻는 다이얼로그입니다.

Next 버튼을 클릭합니다.

* 설치요소

(1) Development Tools : 컴파일러 및 인터프리터를 포함한 각종 유틸리티와 라이브러리로 구성되는 개발환경

(2) Source code : J2SE 를 구성하는 여러 클래스의 소스코드

(3) Public JRE : 자바 프로그램 실행 환경인 J2SE Runtime

 

 

 

설치중 화면입니다.

 

 

 

설치 디렉토리 변경을 묻는 다이얼로그입니다.

Next 버튼을 클릭합니다.

 

 

 

설치가 완료되었습니다.

Close 버튼을 클릭합니다.

 

 

* 자바 설치가 완료된 후에는 환경변수 설정이 필요합니다.

아래 페이지로 이동 후 자바(Java) 환경변수 설정을 진행하시기 바랍니다.  

 자바 환경변수 설정

 

Posted by maze1008
,

FreeProxy 는 윈도우에 설치되어 간단한 방법으로 프록시 서버를 설정할 수 있는 기능을 제공합니다.

 

자신만의 작은 프록시 서버를 구축하고 싶을 때 매우 유용하게 이용할 수 있는 도구로 

 

다른 PC (윈도우 / 우분투) 에서는 프록시 서버를 통해 손쉽게 네트워크(인터넷)를 사용할 수 있습니다.

(네트워크가 차단된 PC 에서 인터넷을 사용하고 싶을 때 매우 유용합니다.)

 

그럼 지금부터 FreeProxy 를 통한 윈도우 프록시 설정 방법에 대해 소개해 드리겠습니다.

 

 

1. FreeProxy 다운로드 / 설치하기

 

아래의 링크를 클릭해 주세요.

http://freeproxy.software.informer.com/

 

 

DOWNLOAD 를 클릭합니다.

 

 

Download 를 클릭합니다.

 

 

버전은 4.1 Build 1541 입니다.

화면에 나타난 인증 문자를 입력한 후에 Download 버튼을 클릭하여 PC 에 파일을 다운 받습니다. 

 

 

 

다운받은 압축 파일입니다. 압축을 풀어주세요

 

 

 Setup 파일을 실행합니다. (더블 클릭)

 

 

 

설치 과정이 진행됩니다.

Next 버튼을 클릭합니다.

 

 

 

라이센스를 확인하는 부분입니다.

I accept the agreement 체크 > Next 버튼을 클릭합니다.

 

 

 

설치되는 경로를 확인하고 Next 버튼을 클릭합니다.

 

 

 

설치 폴더를 확인하고 Next 버튼을 클릭합니다.

 

 

 

설정한 정보들을 다시한번 확인한 후 Install 버튼을 클릭합니다.

 

 

 

설치가 진행중 입니다.

 

 

 

정보를 확인하고 Next 버튼을 클릭합니다.

 

 

 

설치가 모두 완료되었습니다. Finish 버튼을 클릭합니다.

 

 

 

2. FreeProxy 설정하기

 

 

시작 메뉴를 클릭하여 설치된 FeeProxy Control Centre 를 선택합니다.

(혹시 메뉴에 나타나지 않는다면 모든 프로그램 > FreeProxy > FeeProxy Control Centre 를 선택합니다.)

 

 

 

Proxy 를 더블클릭합니다.

 

 

 

Name 에 원하는 이름을 입력하고 (수정하지 않으셔도 됩니다.)

Client Port 에 8080 포트가 아닌 다른 값을 입력합니다. (저는 8081 을 입력했습니다.)

Done 버튼을 클릭합니다.

 

 

 

Proxy 를 선택한 후 Start/Stop 메뉴를 클릭합니다.

 

 

 

 Console mode 아래에 위치한 Start 버튼을 클릭합니다.

 

 

 

정상적으로 프록시 서버 설정이 완료되었습니다.

이제 다른 PC 를 사용하여 설정한 프록시 서버를 이용해 보도록 하겠습니다.

 

 

 

3. Proxy 서버 이용하기

 

 

* 윈도우에서 IE (인터넷 익스플로러) 를 사용하신다면

 

 

IE 실행 > 도구 메뉴 > 인터넷 옵션 > 연결 탭 > LAN 설정 버튼을 클릭합니다.

 

 

 

프로시 서버 아래의 사용자 LAN 에 프록시 서버 사용에 체크

주소에 프록시 서버의 주소(FreeProxy 가 설치된 PC 의 IP 주소) 와 포트(FreeProxy 에서 설정한 8081) 를 입력한 후 확인 버튼을 클릭합니다.

 

 

* 우분투를 사용하신다면

네트워크 다이얼로그 > 네트워크 프록시

- 방식 : 수동

- HTTP 프록시 / HTTP 프록시 / FTP 프록시 / Socks 호스트 항목 모두에

프록시 서버의 주소(FreeProxy 가 설치된 PC 의 IP 주소) 와 포트(FreeProxy 에서 설정한 8081) 를 입력

- 시스템 전체에 적용 버튼을 클릭하여 적용합니다.

 

 

잘 따라 오셨나요?

FreeProxy 를 사용한다면 생각보다 굉장히 간단하게 프록시 서버를 구축하고 이용할 수 있습니다.

 

'IT > ETC' 카테고리의 다른 글

CMD (명령 프롬프트) 명령어 모음  (3) 2015.03.22
Beyond Compare - 폴더, 파일 비교하기  (0) 2015.03.21
CSV 파일 변환  (0) 2015.03.12
맥 어드레스(mac 주소) 확인  (0) 2015.03.04
StarUML - 무료 UML 다이어그램 작성하기  (0) 2015.02.17

Posted by maze1008
,

문자열을 원하는 구분자(delimiter)를 사용하여 분리하고 싶을 때

StringTokenizer 와 String 메소드 split() 를 사용할 수 있습니다.

 

같지만 다른 두 가지 방법에 대해서 알아보도록 하겠습니다.

(예제에서는 구분자로 콤마(,) 를 사용하였습니다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class StringDivideTest {
    public static void stringTokenizerTest(String str) {
        System.out.println("====== stringTokenizerTest() result ======");
        StringTokenizer tokenizer = new StringTokenizer(str, ",");
        for (int i = 0; tokenizer.hasMoreTokens(); i++) {
            System.out.println(i + "번째 : " + tokenizer.nextToken());
        }
    }
 
    public static void splitTest(String str) {
        System.out.println("====== splitTest() result ======");
        String split[] = str.split(",");
        for (int i = 0; i < split.lenght; i++) {
            System.out.println(i + "번째 : " + split[i]);
        }
    }
 
    public static void main(String[] args) {
        String str = "apple,banana,kiwi";
        stringTokenizerTest(str);
        System.out.println();
        splitTest(str);
    }
}
cs

 

 

(1) 일반적인 상황 (데이터+구분자+데이터

=> 동일하게 동작합니다.

String str = "apple,banana,kiwi";

  

<결과>

======= stringTokenizerTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi

 

======= splitTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi 

 

 

(2) 구분자 사이에 데이터가 없는 경우(데이터+구분자+구분자+데이터

=> split 만 공백의 데이터를 반환합니다.

String str = "apple,banana,,kiwi";

 

<결과>

======= stringTokenizerTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi

 

======= splitTest() result =======
0번째  : apple
1번째  : banana
2번째  :
3번째  : kiwi

 

 

(3) 문자열이 구분자로 끝나는 경우 (데이터+구분자)

=> 동일하게 마지막 데이터를 무시하는 방식으로 동작합니다.

마지막 데이터도 표현하고 싶은 경우 split 를 통해서(오버로딩된 다른 메소드) 가능합니다. 
String str = "apple,banana,kiwi,";

 

<결과>

======= stringTokenizerTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi

 

======= splitTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi

 

 

(4) 문자열이 구분자로 끝나는 경우 (데이터+구분자) - 마지막 데이터를 표현하고 싶을 경우

String str = "apple,banana,kiwi,";

String split[] = str.split(",", -1);

 

<결과>

======= stringTokenizerTest() result =======
0번째 : apple
1번째 : banana
2번째 : kiwi

 

======= splitTest() result =======
0번째  : apple
1번째  : banana
2번째  : kiwi
3번째  :

 

 

split 메소드는 인자로 regex(정규표현식) 사용하기 때문에

속도적인 측면에서는 StringTokenizer 가 더 성능을 좋다고 볼 수 있습니다.

하지만 예제와 같이 가변적인 요소가 많은 문자열이나 정확한 분리가 필요할 때에는 split 메소드를 사용하는 것이 유용합니다.

 

 

Posted by maze1008
,

이클립스에서 Git 을 사용할 때 Private Key 를 설정하는 작업이 필요합니다.

아래와 같이 간단한 방법으로 Private Key 를 설정할 수 있습니다.

 

 

Window 메뉴 > Preferences 를 선택합니다.

 

 

 

좌측에서 General > Network Connections > SSH2 를 선택하고

우측에서 Add Private Key... 를 클릭하여 Private Key 를 등록합니다.

OK 버튼을 클릭합니다.

 

 

'IT > Eclipse' 카테고리의 다른 글

이클립스 글자크기 변경하기  (0) 2015.03.23
이클립스 단축키  (0) 2015.03.15
이클립스 테마 적용하기  (0) 2015.03.10
이클립스 다운로드 및 설치방법  (0) 2015.03.04
클래스 다이어그램 - ObjectAid UML Explorer  (1) 2015.02.15

Posted by maze1008
,

데이터를 모아서 저장하고 관리하는데 있어서 많은 자료형들이 유용하게 사용됩니다.

ArrayList, Map, Vector, Stack, Queue 등등!

 

각기 다른 장점과 단점을 가지고 있지만

요새 특히 많이 사용하고 있는 것은 HashMap 입니다.

 

key 와 value 의 1:1 한쌍으로 데이터를 저장 / 관리할 수 있고

key 를 통해 저장된 value 를 손쉽게 얻어 올 수 있는 매우 유용한 자료형입니다.

(key 의 중복은 허용되지 않습니다.)

 

key 기반의 데이터 저장 구조이기 때문에 자연스럽게 저장 순서는 의미를 갖지 않게 되어서

저장된 데이터를 출력해 보면 추가했던 순서와는 전혀 다른 형태의 모습으로 여기저기 흩어져 있는 것을 확인 할 수 있습니다.

 

그런데 아주 가끔 입력한 순서대로 저장이 필요한 순간이 있습니다.

마치 ArrayList 처럼 순서대로 데이터를 입력하고 싶은 것이죠.

그럴 때 사용하는 자료형이 바로 LinkedHashMap 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
 
public class HashMapTest {
    public static void initData(Map<StringString> map) {
        map.put("key1""1");
        map.put("key2""2");
        map.put("key3""3");
        map.put("key4""4");
        map.put("key5""5");
        map.put("key6""6");
        map.put("key7""7");
        map.put("key8""8");
        map.put("key9""9");
        map.put("key10""10");
    }
    
    public static void printResult(Map<StringString> map) {
        Set<String> set = map.keySet();
        Iterator<String> iter = set.iterator();
        while (iter.hasNext()) {
            String key = ((String)iter.next());
            String value = map.get(key);
            System.out.println("key : " + key + ", value : " + value);
        }
    }
 
    public static void main(String[] args) {
        // HashMap
        System.out.println("====== HashMap Test ======");
        Map<StringString> hashMap = new HashMap<StringString>();
        initData(hashMap);
        printResult(hashMap);
        
        // LinkedHashMap
        System.out.println("====== LinkedHashMap Test ======");
        Map<String,String> linkedHashMap=new LinkedHashMap<StringString>();
        initData(linkedHashMap);
        printResult(linkedHashMap);
    }
}
cs

 

<출력>

====== HashMap Test ======
key : key4, value : 4
key : key3, value : 3
key : key6, value : 6
key : key5, value : 5
key : key2, value : 2
key : key1, value : 1
key : key10, value : 10
key : key8, value : 8
key : key7, value : 7
key : key9, value : 9
====== LinkedHashMap Test ======
key : key1, value : 1
key : key2, value : 2
key : key3, value : 3
key : key4, value : 4
key : key5, value : 5
key : key6, value : 6
key : key7, value : 7
key : key8, value : 8
key : key9, value : 9
key : key10, value : 10

 

출력 결과에서 처럼 HashMap 은 입력된 순서와 전혀 상관 없이 데이터가 흩어져 있는 반면에

LinkedHashMap 은 입력된 순서대로 차곡차곡 데이터가 쌓여 있는 것을 확인 할 수 있습니다.

 

언뜻 보기에는 ArrayList 를 사용하는 것과 차이가 없어 보일 수 있지만

LinkedHashMap 의 경우는 HashMap 의 장점을 그대로 가지고 있기 때문에

동일한 key 의 중복을 막아주고, 특정 key 의 value 를 찾고자 할 때 for 문을 돌며 전체 값을 검색할 필요가 없습니다.

 

또한 순서대로 입력되어 있기 때문에 전체의 값을 순서대로 operation 해야 할 때도 매우 유용합니다.

 

 


 

마지막으로 LinkedHashMap 에는 특별한 기능을 가진 removeEldestEntry() 메소드가 존재합니다.

 

protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {

return false; 

}

 

이 메소드는 put() 메소드가 호출될 때 불리게 되는데 마지막으로 입력된 순서를 기억하고

LinkedHashMap 에 입력된지 가장 오래된 데이터를 파라미터로(eldest) 전달받게 됩니다.

 

1
2
3
4
5
6
7
8
9
System.out.println("====== LinkedHashMap2 Test ======");
Map<StringString> linkedHashMap2=new LinkedHashMap<StringString>() {
    @Override
    protected boolean removeEldestEntry(Entry<StringString> arg0) {
        return size() == 6true : false;
    }
};
initData(linkedHashMap2);
printResult(linkedHashMap2);
cs

 

따라서 removeEldestEntry() 메소드를 오버라이드(override) 해서 다음과 같이 사용하면

6번째 데이터가 입력될 때, 입력된지 가장 오래된 데이터(1번째 데이터)가 삭제되고

linkedHashMap2 의 최대 입력 갯수는 5 가 되게 됩니다. (지정된 크기의 데이터만 입력 가능합니다.)

 

<출력>

====== LinkedHashMap2 Test ======
key : key6, value : 6
key : key7, value : 7
key : key8, value : 8
key : key9, value : 9
key : key10, value : 10

 

Posted by maze1008
,

SWT 를 사용하여 Progress Dialog 를 만들었는데

우연히 ESC 키를 눌렀더니 Dialog 가 사라져 버리는 현상을 발견하게 되었습니다.

 

Progress Dialog 는 다른 Dialog 와 다르게 ESC 키를 눌러도 닫히지 않아야 할 것 같아서

ESC 키 이벤트에 대한 예외처리를 해 보았습니다. 

 

1
2
3
4
5
6
7
8
shell.addListener(SWT.Traverse, new Listener() {
    public void handleEvent(Event e) {
        if (e.detail == SWT.TRAVERSE_ESCAPE) {
            e.doit = false;
        }
    }
});
shell.open();
cs

'IT > SWT' 카테고리의 다른 글

VerifyListener 로 숫자만 입력받기  (0) 2015.04.17

Posted by maze1008
,

C 언어에서 출력을 담당하는 printf() 함수를 사용해 보신적이 있으신가요?

 

자바(Java)에서도 동일한 기능을 제공하는 메소드들이 존재합니다.

 

String 클래스의 format() 메소드 : String.format()

PrintWriter 클래스와 PrintStream 클래스의 printf() 메소드 : System.out.printf()

 

첫 번째 매개변수가 포맷을 포함한 문자열이면(포맷 문자열, format string), 나머지 매개변수(아규먼트, argument)의 수나 타입에 제한없이 원하는 형태의 문자열을 생성 및 출력합니다.

 

 

 

 

 

래서 이번에는 원하는 포맷 문자열(format string) 구성하는 방법에 대해서 알아보도록 하겠습니다.

 

포맷 문자열(format string)에서 %d 로 표현되는 부분은 포맷 명세자(format specifier) 라고 불리며 다음으로 입력받은 아규먼트(argument)들에 의해서 치환됩니다.

 

위의 예제에서 보면 %d 가 각각 순서대로 10, 20, 30으로 치환되어 "10 + 20 = 30 입니다." 라는 값을 출력합니다. 이처럼 포맷 명세자(format specifier)를 어떠한 형태로 구성하는 지에 따라 문자열의 결과값이 다르게 나타나게 됩니다.

 

%[인자순서$][플래그][너비][정밀도]데이터타입

 

포맷 명세자(format specifier) 는 다음과 같이 % 키워드로 시작됩니다.

 

 

1. 데이터타입

 

마지막에 위치한 데이터타입은 출력하고자 하는 데이터 구분에 따라 다른 형태로 쓰여집니다.

일반적으로 정수 %d, 실수 %f, 문자열 %s, 불리언 %b 가 이용되고 있으며 상세한 설정을 위해서는 표를 참고하시기 바랍니다.

(위의 예제에서는 정수 10 을 표현하기 위해서 %d 를 사용했습니다.

 

 

 

2. 인자순서$

 

인자 순서는 아규먼트(argument)의 치환 순서를 지정하는 것입니다.

1$ 는 첫 번째, 2$는 두 번째, 3$ 는 세 번째 아규먼트(argument) 를 의미합니다.

 

예를 들어  System.out.printf(“%2$d + %1$d %3$d 입니다.”, 10, 20, 30);  입력했다면

%2$d 에는 두 번째 아규먼트 20, %1$d 에는 첫 번째 아규먼트인 10, %3$d 에는 세 번째 아규먼트인 30 이 치환되어 "20 + 10 = 30 입니다." 라는 결과값이 나타날 것입니다. 

 

 

3. 플래그

 

플래그는 부가적인 정보를 표시하기 위해 사용됩니다.

데이터를 왼쪽으로 정렬한다던가(기본으로 오른쪽 정렬), 금액을 표현할 때와 같이 일정 자리수마다 구분문자를 표시하는 등의 옵션을 설정하고 싶을 때 이용할 수 있습니다.

 

예를 들어 System.out.printf(“%d + %d %+d 입니다.”, 10, 20, 30);  입력했다면

"20 + 10 = +30 입니다." 라는 결과값이 나타날 것입니다. 

 

 

 

 

4. 너비와 정밀도

 

너비는 데이터를 표현할 때 얼마 정도의 공간을 차지할 것인지를 지정하는 것이고

정밀도는 소수점 아래의 값을 몇 자리까지 표현할 것인지를 나타냅니다. (정밀도는 '.숫자' 형태로 표시합니다.)

 

예를 들어 %5d 는 5개의 문자를 표시할 만큼의 공간이 확보하게 되고 

%5.2f 는 5개의 문자를 표시할 만큼의 공간을 확보하고 그 중에서 2자리는 소수점 이하의 값을 표현하는데 사용됩니다.

 

System.out.printf(“파이=%5.2f”, Math.PI);  입력했다면 "파이=3.14" 라는 결과값이 나타날 것입니다.

(5자리를 표시할 수 있는 공간을 확보했지만 아규먼트(argument) 의 정수 값이 3 이므로 남은 2자리는 사용하지 않게됩니다.)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.*;
 
public class FormatTest {
    public static void main(String[] args) {    
        System.out.printf("%d + %d = %d 입니다. %n"102030);
        System.out.printf("%2$s의 위도는 %1$6.4f 입니다. %n"37.5306"서울");
        System.out.printf("%+d %n"10);
        System.out.printf("%+d %n", -10);
        System.out.printf("가격:%,d원 %n"10000000);
        
        Calendar now = new GregorianCalendar();
        System.out.printf("%1$tY/%1$tm/%1$td %1$tH:%1$tM:%1$tS %n", now);
        System.out.printf("%1$tY년%1$tm월%1$td일 %1$tp %1$tH시%1$tM분%1$tS초 %n", now);
        System.out.printf(Locale.US, "%tc %n", now);    
    }
}
cs

 

<결과>

10 + 20 = 30 입니다.
서울의 위도는 37.5306 입니다.
+10
-10
가격:10,000,000원
2015/02/19 18:15:37
2015년02월19일 오후 18시15분37초
Thu Feb 19 18:15:37 KST 2015

 

마지막으로 설명드린 부분들을 포함한 예제입니다.

 

하나씩 천천히 살펴보시면 어렵지 않게 원하는 포맷 문자열(format string)을 작성하실 수 있으실 겁니다.

 

(예제에서는 System.out.printf() 메소드만 사용했지만 String.format() 메소드도 동일한 방법으로 이용할 수 있습니다. 다만 String.format() 메소드는 결과값으로 포맷팅된 문자열을 반환합니다.)

 

 

 

Posted by maze1008
,

StartUML 은 다양한 UML 다이어그램를 작성하기에 적합한 무료 도구입니다.

 

다운로드와 설치가 매우 간단하고  클래스 다이어그램, 시퀀스 다이어그램, 유즈케이스 다이어그램 등 원하는 형태의 UML 다이어그램을 쉽게 작성할 수 있습니다.

 

지금부터 StartUML 다운로드 및 설치 방법에 대해 알아보도록 하겠습니다.

 

 

아래의 링크를 클릭해 주세요.

http://sourceforge.net/projects/staruml/

 

 

Download 를 클릭합니다.

 

 

 

브라우저 아래쪽으로 실행 or 저장을 묻는 화면이 나타납니다.

실행 버튼을 클릭합니다.

 

 

 

Next 버튼을 클릭합니다.

 

 

라이센스를 확인하는 부분입니다.

I accept the agreement 체크 > Next 버튼을 클릭합니다.

 

 

 

설치되는 경로를 확인하고 Next 버튼을 클릭합니다.

 

 

 

설치 폴더를 확인하고 Next 버튼을 클릭합니다.

 

 

 

바탕화면에 실행 icon 을 생성할지 묻는 부분입니다.

Next 버튼을 클릭합니다.

 

 

 

설정한 정보들을 다시한번 확인한 후 Install 버튼을 클릭합니다.

 

 

 

설치가 완료되었습니다.

Finish 버튼을 클릭하면 StarUML 이 자동으로 실행됩니다.

 

 

 

OK 버튼을 클릭합니다.

 

 

 

우측 상단의 Diagram Explorer 에서 원하는 다이얼그램 종류를 클릭하면 하위 메뉴로 Main 이 나타납니다.

Main 을 더블클릭하면 선택한 다이어그램에서 사용할 요소들이 좌측에 리스팅 됩니다.

(저는 Class Diagrams > Main 을 더블클릭 했더니, 좌측에 Package, Class, Interface 등의 요소들이 리스팅 되어 나타났습니다.)

 

이제 다이어그램에 표현하고 싶은 항목들을 좌측 메뉴에서 선택하여 다이어그램을 작성하시면 됩니다!!

상세한 사용법은 아래 링크를 참고하시기 바랍니다.

 

 

* StarUML 5.0 사용자 가이드
http://staruml.sourceforge.net/docs/user-guide(ko)/toc.html

 

 

'IT > ETC' 카테고리의 다른 글

CMD (명령 프롬프트) 명령어 모음  (3) 2015.03.22
Beyond Compare - 폴더, 파일 비교하기  (0) 2015.03.21
CSV 파일 변환  (0) 2015.03.12
맥 어드레스(mac 주소) 확인  (0) 2015.03.04
FreeProxy - 윈도우 프록시 설정하기  (0) 2015.03.01

Posted by maze1008
,

Java this 키워드

IT/Java 2015. 2. 16. 08:30

자바에서(Java) this 는 '객체, 자기 자신' 을 나타냅니다.

 

주로 3가지 형태로 사용되고 있으며 예를 들어 하나씩 살펴보도록 하겠습니다.

 

 

1. 클래스의 속성과 생성자/메소드의 매개변수(input parameter)의 이름이 같은 경우

- 클래스 속성을 사용할 때 this 키워드를 붙여줍니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Fruit {
    public String name;
    public String color;
    public double weight;
    public int count;
        
    public Fruit(String name, String color, double weight, int count) {
        name = name;
        color = color;
        weight = weight;
        count = count;
    }
    
    public static void main(String[] args) {
        Fruit banana = new Fruit("banana""yellow"5.010);
        System.out.println("name : " + banana.name);        // name : null
        System.out.println("color : " + banana.color);      // color : null
        System.out.println("weight : " + banana.weight);    // weight : 0.0
        System.out.println("count : " + banana.count);      // count : 0
    }
}
cs

 

일반적으로 생성자 또는 set / get 메소드의 매개변수(input parameter) 이름은

클래스의 속성 이름과 동일하게 정의되어 사용됩니다.

 

위에서 보여지는 생성자의 매개변수 역시 클래스 속성과 동일한 이름으로 정의되어 있습니다.

그런데 main 메소드에서 Fruit 객체를 생성하고 속성 값들을 출력해 보니 예상치 못한 결과가 나타납니다.

초기화가 이루어지지 않았습니다!! ("banana", "yellow", 5.0, 10 이라고 값을 입력했는데 말이죠!)

 

생성자의 구현부분에서 name = name; 처럼 사용하게 되면

"name 매개변수 = name 매개변수" 형태가 되어 Fruit 객체의 name 속성에는 값이 입력되지 않습니다.

 

안타깝게도 java 는 좌측의 name 이 Fruit 객체의 name 속성을 가리키고 있다는 사실을 인지하지 못합니다.

이럴 때 바로 this 키워드가 사용됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Fruit {
    public String name;
    public String color;
    public double weight;
    public int count;
        
    public Fruit(String name, String color, double weight, int count) {
        this.name = name;
        this.color = color;
        this.weight = weight;
        this.count = count;
    }
    
    public static void main(String[] args) {
        Fruit banana = new Fruit("banana""yellow"5.010);
        System.out.println("name : " + banana.name);        // name : banana
        System.out.println("color : " + banana.color);      // color : yellow
        System.out.println("weight : " + banana.weight);    // weight : 5.0
        System.out.println("count : " + banana.count);      // count : 10
    }
}
cs

 

 this.name = name; 은

"Fruit 객체의 name 속성 = name 매개변수" 형태가 되어 Fruit 객체의 속성에 값을 입력하게 됩니다.

 

여기에서의 this 키워드는 객체 자신의 속성을 나타내게 되는 것 입니다.

 

 

2. 클래스에 오버로딩된 다른 생성자 호출 

- 생성자의 최상단(가장 먼저)에 사용되어야 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Fruit {
    public String name;
    public String color;
    public double weight;
    public int count;
        
    public Fruit(String name, String color) {
        // Fruit(String name, String color, double weight, int count) 를 호출
        this(name, color, 0.00);
    }
    
    public Fruit(String name, String color, double weight, int count) {
        this.name = name;
        this.color = color;
        this.weight = weight;
        this.count = count;
    }
}
cs

 

하나의 클래스에 여러개의 생성자가 오버로딩 되어 있을 때

일부분을 제외하고는 서로 중복된 코드를 가지고 있는 경우가 많이 있습니다.

 

이런 순간에 내부에 정의된 다른 생성자를 호출하여 코드의 중복을 피하고 깔끔한 소스를 작성할 수 있습니다.

같은 클래스에 오버로딩된 다른 생성자를 호출때에도 this 키워드가 사용됩니다.

 

생성자를 호출할 때에는 원하는 생성자의 매개변수를 확인한 후 

메소드를 호출하는 것 처럼 this(매개변수...) 의 형태로 이용하면 됩니다.

 

위에서는 2개의 매개변수를 입력받은 생성자(name, color)의 구현부분에서

4개의 매개변수를 입력받는 생성자(name, color, weight, count) 를 호출하고 있습니다.

 

 

3. 객체 자신의 참조값을 전달하고 싶을 때 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Fruit {
    public String name;
    public String color;
    public double weight;
    public int count;
            
    public Fruit(String name, String color, double weight, int count) {
        this.name = name;
        this.color = color;
        this.weight = weight;
        this.count = count;
    }
 
    public Fruit getFruitInstance() {
        return this;
    }
}
cs

 

어떤 메소드에서는 동작을 완료하고 리턴값으로

어떤 메소드에서는 내부에서 호출하고자 하는 메소드의 매개변수(input parameter) 로 

객체, 자기 자신의 참조값을 전달하고 싶은 경우가 있습니다.

 

이럴때에는 getFruitInstance() 메소드의 구현부분에서처럼 this 키워드를 이용함으로써 구현이 가능합니다.

 

 

자바에서 this 는 자주 사용되는 키워드입니다.

3가지 상황에서처럼 명시적으로 this 를 사용하지 않더라고 "객체, 자기 자신" 을 나타내야 할 때는 묵시적으로

앞부분에 this 가 기입되어 있다고 생각하시면 이해하시기에 더욱 도움이 될 것 같습니다.

 

 

Posted by maze1008
,

UML(Unified Modeling Language) 은 프로그램의 설계를 한눈에 알아볼 수 있도록 시각화 / 문서화하여 표현하는 방법입니다.

 

세부적으로는 다양한 방법들이 존재하지만 가장 많이 이용되는 것은

클래스의 구조와 데이터의 정의를 나타내는 클래스 다이어그램과

동작의 흐름과 데이터의 이동을 나타내는 시퀀스 다이어그램입니다.

 

이번에는 클래스 다이어그램을 이클립스에서 편리하게 작성할 수 있도록 도와주는

ObjectAid UML Explorer 의 설치 및 사용 방법에 대해 알아보도록 하겠습니다.

 

 

1. ObjectAid UML Explorer 설치

 

 

 

이클립스(Eclipse) 를 실행하고 Help 메뉴 > Install New Software... 을 클릭합니다.

이클립스에 추가적인 플러그인을 설치해서 사용할 때 자주 이용하게 되는 기능입니다.

 

 

 

Add 버튼을 클릭합니다.

 

 

 

어떤 사이트로부터 플러그인을 다운받을지 위치를 추가하는 다이얼로그입니다.

Name 에는 원하는 이름을 입력하시고 (사이트를 식별하는 이름입니다.)

Location 에는 http://www.objectaid.net/update 입력한 후

OK 버튼을 클릭합니다.

 

 

 

사이트로 부터 다운로드 받을 수 있는 플러그인 리스트가 다이얼로그에 나타납니다.

입력한 사이트로부터 ObjectAid UML Explorer 를 다운받을 수 있으므로

체크박스에 나타난 항목을 모두 체크한 후 Next 버튼을 클릭합니다.

 

 

 

Install 할 것인지 다시한번 묻는 다이얼 로그 입니다.

Next 버튼을 클릭합니다.

 

 

 

라이센스 동의를 묻는 부분으로

I accept ... 항목에 체크하고 Finish 버튼을 클릭합니다.

 

 

 

설치가 진행중 입니다.

 

 

 

설치중에 보안과 관련된 경고가 나타나면 OK 버튼을 클릭합니다.

 

 

 

플러그인 설치가 모두 완료되면 이클립스를 재부팅하라는 다이얼로그가 나타납니다.

Yes 버튼을 클릭합니다.

 

 

 

2. 클래스 다이어그램 작성하기

 

재실행 된 이클립스에서 클래스 다이어그램을 작성해 보도록 하겠습니다.

 

 

 

 

클래스 다이어그램을 작성할 Fruit 프로젝트입니다.

 

 

클래스 다이어그램 파일을 따로 관리하기 위해서 폴더를 추가합니다.

Fruit 프로젝트 마우스 우클릭 > New > Folder 를 클릭합니다.

 

 

 

폴더의 이름을 입력한 후에 (저는 UML 이라고 입력했습니다.) Finish 버튼을 클릭합니다.

 

 

 

클래스 다이어그램 파일을 작성해 보겠습니다.

Fruit 프로젝트 마우스 클릭 > New > Other... 를 클릭합니다.

 

 

 

ObjectAid UML Diagram 폴더 > Class Diagram 선택 후

Next 버튼을 클릭합니다.

 

 

 

Browse... 버튼을 클릭하여 앞에서 생성한 UML 폴더를 선택하고

Name 에 클래스 다이어그램 파일 이름을 입력 > Finish 버튼을 클릭합니다.

 

 

 

Package Explorer 에서 java 파일을 클릭 (여러개 선택가능) 해서

우측에 열려있는 클래스 다이어그램 파일(ClassDiagram.ucls) 로 드래그 합니다.

 

그럼 자동으로 java 파일에 정의되어 있는 클래스들의 구조가 화면에 그려지는 것을 확인할 수 있습니다.

화면에 나타난 클래스들을 드래그해서 위치를 조정하는 것도 가능하며

속성 또는 메소드를 클릭하면 정의되어 있는 java 파일로 링크되어 소스파일도 바로 연동하여 볼 수 있습니다.

 

 

 

클래스 다이어그램 작성 및 확인이 완료되었다면

마우스 우클릭 > Save As Image 선택하여 이미지 파일로 저장합니다.

 

 

* 추가적으로...

ObjectAid UML Explorer 에서는 class diagram 은 무료로 사용이 가능하지만

sequence diagram 은 single-user license (유료, http://www.objectaid.com/install-license) 로 제공되고 있습니다.

 

상세한 사용법은 http://www.objectaid.com/class-diagram 를 참고하시기 바랍니다.

 

 

'IT > Eclipse' 카테고리의 다른 글

이클립스 글자크기 변경하기  (0) 2015.03.23
이클립스 단축키  (0) 2015.03.15
이클립스 테마 적용하기  (0) 2015.03.10
이클립스 다운로드 및 설치방법  (0) 2015.03.04
이클립스에서 SSH Private Key 설정방법  (0) 2015.02.27

Posted by maze1008
,