우선 Eclipse에 있는 인코딩을 왠만하면 UTF-8로 설정.

 

 

 

 

 

 

 


이와 같이 Preferences에서 인코딩 부분을 찾아서 UTF-8로 설정을 완료한다.

 

 

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

XML, HTML TODO 마크 표기하기  (0) 2015.03.11
eclipse 단축키  (0) 2014.05.18
이클립스 단축키 설정  (0) 2014.04.28
이클립스 폰트 설정  (0) 2014.04.08

설정

트랙백

댓글

AOP 용어

S/Spring 2014. 3. 16. 22:22

1. 결합점(Joint Point)

인스턴스의 생성시점, 메소드를 호출하는 시점, Exception이 발생하는 시점과 같이 애플리케이션이 실행될 때, 특정 작업이 실행되는 시점을 의미한다. (Aspect를 플러그인 할 수 있는 애플리케이션의 실행 지점)

 

2. 교차점(Pointcut)

충고가 어떤 결합점에 적용되어야 하는지 정의. 명시적인 클래스의 이름, 메소드의 이름이나 클래스나 메소드의 이름과 패턴이 일치하는 결합점을 지정 가능토록 해준다.(스프링 설정 파일 안에서 XML로 작성)

 

3. 충고(Advice)

충고는 교차점에서 지정한 결합점에서 실행(삽입) 되어야하는 코드이다. Aspect의 실제 구현체

 

4. 에스팩트(Aspect)

에스팩트는 AOP의 중심단위, Advice와 Pointcut을 합친 것이다. 구현하고자 하는 횡단 관심사의 기능.

애플리케이션의 모듈화 하고자 하는 부분

 

5. 대상(target)

충고를 받는 클래스를 대상(target)라고 한다. 대상은 여러분이 작성한 클래스는 물론, 별도의 기능을 추가하고자 하는 써드 파티클래스가 될 수 있다.

 

 

설정

트랙백

댓글

자바 제너릭

J/Java 2014. 3. 16. 22:14

public static <T, U> T[] copyOf()의 해석

아래의 소스는 java.util.Arrays 클래스의 메소드 중 하나.

<T, U> T[]의 의미는 무엇인가? T라는 클래스가 존재한다면 무슨 용도인가?

 

제너릭의 정의

JDK 5.0에서는 GENERIC이 포함되어 실행전 컴파일 단계에서 특정 Collection에 프로그래머가 원하는 객체 타입을 명시하여 명시된 객체가 아니면 절대 저장이 안되게 할 수 있습니다.

Generic Type은 꺽쇠(<>) 사이에 컴파일 할 당시 사용될 객체를 적어 놓으면 객체를 저장할 때 제너릭 타입으로 저장됩니다.

API에서 전달되는 객체가 현 객체 내에서 하나의 자료형으로 쓰일 때는 <T>로 유도하며 전달되는 객체가 현 객체 내에서 하나의 요소로 자리 잡을 때는 <E>, 그리고 Key값으로 사용될 때는 <K>로, Value값으로 사용 될 때는 <V>로 표현하고 있습니다.

 

ex) public class GenericClass<T>{

T[] v;

public void set(T[] n){ v = n; }

public void print(){ for(T s : v){ out.println(s); }}

}

 

public class GenericTest{

public static void main(String[] args){

GenericClass<String> t = new GenericClass<String>();

String[] s = {"가", "나", "다"};

t.set(s);

t.print();

}

}

 

public static <T, U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType){

T[] copy = ((Object)newType == (Object)Object[].class)?

(T[])new Object[newLength] : (T[])Array.newInstance(newType.getComponentType(), newLength);

System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));

return copy;

}

 

제너릭스의 범위 설정

Generic

 

제네릭스 <E>는 모든 형태를 받을 수 있지만, 의도적으로 상속 관계를 기준으로 들어올 수 있는 클래스 범위를 지정 할 수 있다.

super는 하한선이고

extends는 상한선이다.

<T extends Comparable<T>>이와 같이 제네릭스의 영역을 설정하면

T로 들어올 수 있는 값은 extends(하한선)에 의해

Comparable<T> 클래스이거나 그 자식(상속받은) 클래스이어야 한다.

<T super Vector> 이와 같은 제네릭스를 설정하면

T로 들어올 수 있는 값은 super (상한선)에 의해 Vector 클래스이거나 그 조상 클래스이어야 한다.

(조상 클래스가 들어왔는데 Vector가 조상클래스의 자손인지 확인하는 방법은 아마 instanceof )

 

이와 같이 범위 제한은, 클래스 앞 부분 혹은 메소드 앞 부분에 정의한다.

// 메소드 앞부분에 정의

static <T extends Comparable<T>> void swap(T[] array, int a, int b){

T temp = array[a]; array[a] = array[b]; array[b] = temp;

}

 

// 클래스 앞 부분 정의

class Demo<T super Study>

 

private A[] element  = A[aSize]; 라고 선언

그러나 5.0 이상에서는 "generic array creation" 이라는 에러로 처리.

이유는 자바 소드 코드의 제네릭 자료형이 컴파일 시 까지만 존재하고 실제 컴파일 된 바이트 코드에는 존재하지 않기 때문에 실행시간에 해당하는 제네릭 자료형의 인스턴스를 만드는 것을 원칙적으로 불가능.

그래서 제네릭 자료형의 배열도 생성할 수 없다.

 

제네릭스 와일드 카드 ?라는 말에서 알 수 있듯이 어떠한 값도 맏을 수 있는 제네릭 자료형을 의미한다.

와일드 카드는 "?" 문자로 표시.

예를 들면 List<?> list  = new ArrayList<String>(); 에서 list 인스턴스 변수는 String 값과 Integer 값 모두를 받을 수 있다.

상속 계층 구조상의 경계도 지정이 가능하단다. 이를 위해 super, extends 라는 두 예약어를 사용한다.

 

List<? extends Number> List<? super Integer>

extends를 사용하는 와일드 카드는 흔히 와일드 카드의 하한을 지정한다고 하는 데.

그 말은 extends 다음에 나오는 클래스를 포함하여 그 자식 클래스들이 제네릭 자료형으로 올 수 있음을 나타낸다.

super를 사용하는 와일드 카드는 그 반대로 와일드 카드의 상한을 지정하는 데, 그의미는 super 다음에 나오는 클래스를 포함하여 그 부모 클래스들이 제네릭 자료형으로 올 수 있음을 나타낸다.

 

 

설정

트랙백

댓글

자바 프로그래밍을 할 때 사람들을 괴롭히는 한 가지 주제는 '메모리'이다.

관련된 주제는 가비지 컬렉션, Single 패턴 등이 있을 테지만 흔히 간과하는 것 중 하나가 final 키워드의 사용이다.

1. final 키워드는 변수, 메소드의 선언에 쓰인다.

2. final 키워드를 사용한 변수는 상속이 안된다.

3. final 키워드로 할당한 변수를 변경할 수 없다.

4. final 키워드를 사용한 변수는 객체의 생성 당시에 메모리에 값이 할당되어야 한다.

 

변수가 한번만 선언된다는 것이 왜 중요한 것인지 이해하려면 자바에서 다루는 메모리 시스템에 대한 이해가 선행되어야 한다.

우선 변수를 하나 만들어 보자. String _a = "Hi";

변수 _a는 "Hi" 라는 값을 가리키고 있다. 값을 저장하는 것이 아니라 '가리키는(reference)' 것이다.

이 행동은 쉽게 다른것들에 의해 복제 될 수 있다.

String _b = "Hi"; 이제 _b도 "Hi"를 가리키고 있다. 또 다른 경우를 생각해보라.

SomeObject obj = new SomeObject(); obj 객체를 생성했다.

좌측은 obj 객체의 주소를 저장할 공간을 생성한 것이고, 오른편은 구체적인 값을 저장한 공간을 지정해 둔 것이다.

이들을 등호로 할당하여 값과 주소를 연결했다.

한편 시스템이 아주 복잡하게 움직인다고 하자(예를 들어 쓰레드가 1000개쯤) 우연치 않게 컴퓨터는 이런 말도 안되는 생각을 할 수 있다. '아... 값을 저장할 곳이 없네.'

우리도 도서관에서 누군가 책만 샇아두고 쓰지 않으면 그책을 치워버리고 그 자리에 앉고 싶어진다.

자바가상머신(컴퓨터)도 그러지 말라는 법이 없다.

SomeObject obj의 주소 값은 그대로 살아있겠지만, obj가 가리키는 저장소가 사용되지 않는 다고 판단된다면 이 저장소를 초기화시켜 버린다. 그러면 더 이상 obj는 값을 가리키지 못하는 상태(한편, null을 가리킨다고 봐도됨)가 된다.

그러면 이와같은 웃긴 일도 벌어질 수 있다. 자바프로그램의 쓰레드들이 축구를 하다가 갑자기 공이 사라지는 것이다. 왜냐하면 선수들이 전반전을 끝내고 휴식하는 사이, 축구공을 쓰지 않는다고 판단한 누군가가 공을 가져가 버렸기 때문이다.

어떻게 막을까?

final 키워드를 붙여서 가리키는 주소와 값을 본드로 딱 붙여버리면 끝이다.

final SomeObject obj = new SomeObject();

어떤 일이 벌어지는고 하니 메모리를 생성한 후, 이 메모리를 가리키는 주소 값은 유일하게 obj가 관리한다.

다른 주소값을 가진 객체가 값을 저장하는 저장소에 접근하려고 하면 이미 obj가 버티고 있어서 막을 것이다.

결정적으로 이 obj 변수를 가지고 있는 객체가 가비지컬렉터에 의해 사라지기 전까지 obj가 가리키고 있는 저장소는 누구도 쓸 수 없다.

즉, obj가 사망해야 저장소도 풀려난다. 앞서 비유를 생각하면 축구가 끝나야 공이 다른 곳에 쓰일 수 있다.

 

 

설정

트랙백

댓글

VHD 부팅메뉴 추가

W/Windows 2014. 3. 16. 21:09

VHD에 윈도우가 설치되어 있다면 VHD을 마운트 한후

bcdboot f:\Windows /l ko-KR F:는 마운트된 VHD 드라이브이고, /l ko-KR은 설치된 윈도우 언어입니다.

 

VHD를 마운트 하지 않고 직접 부팅 메뉴에 추가

bcdedit /create /application OSLOADER /d "Windows 7 VHD"

bcdedit /set {GUID} device vhd=[D:]\vhd\win7.vhd

bcdedit /set {GUID} osdevice vhd=[D:]\vhd\win7.vhd

bcdedit /set {GUID} path .\Windows\system32\winload.exe

bcdedit /set {GUID} inherit {bootloadersettings}

bcdedit /set {GUID} systemroot \Windows

bcdedit /set {GUID} nx OptIn

bcdedit /set {GUID} detecthal Yes

bcdedit /set {GUID} locale ko-KR

bcdedit /displayorder {GUID} /addlast

 

설정

트랙백

댓글

function -> arguments는 array형태의 객체이기는 하지만 array 아님.

이러한 arguments를 array로 변환해주는 방법이 있다.

Array.Prototype.slice를 이용하면 arguments를 Array로 변환해준다.

 

var args = Array.prototype.slice.call(arguments);

array로 변환해줌으로서 얻을 수 있는 장점은 apply()의 두 번째 넘겨지는 인자(Array)를 전달 해줄 수 있는 장점이 생김. ( .apply(this, arguments) -> arguments는 배열을 받아야한다. )

설정

트랙백

댓글

Function.Prototype.delay = function(seconds){

// Remove the seconds from the parameters to pass the this function.

var args = [].slice.call(arguments, 1);

// call this function with the specified parameters in the specified amount of seconds.

var fnThis = this;

return setTimeout(function(){

fnThis.apply(undefined, args);

}, seconds * 1000);

}

 

ex) function showMsg(msg){ alert(msg); }

// In five seconds, show the appropriate message.

var timeoutID = showMsg.delay(5, &quot;Five seconds have passed. &quot;);

설정

트랙백

댓글

윈도우 7 DVD로 부팅을 하신 다음, 처음 화면에서 Shift + F10

diskpart -> diskpart 실행

 

create vdisk file=c:\win7.vhd maximum=20480 type=expandable

-> VHD 파일은 생성, 생성될 파일의 위치와 이름은 각자 지정

maximum 다음에는 MB단위의 숫자를 입력. VHD 파일의 최대 크기를 설정하는 것인데

저는 20GB로 지정하기 위해 20480을 입력

type부분은 expandable로 지정해주셔야 동적 확장 디스크가 생성. 평소엔 VHD 파일안에

들어있는 용량만큼의 크기로 존재하지만 VHD로 부팅했을 경우엔 지정해주신 용량으로 (20GB)

파일의 크기가 변경

attach vdisk

-> VHD 파일을 마운트

exit -> diskpart

 

-------------------------------------------------------------------------

자식 디스크(자식 VHD)를 생성하는 명령은 일반 VHD 가상디스크를 생성할 때와 같은 Create Vdisk이고,

여기에 Parent 매개변수만 추가하면 됩니다.

 

create vdisk file="D:\child.vhd" parent="D:\Example.vhd"

File=[생성할 자식 VHD] Parent=[연결할 부모VHD]

이때 자식 디스크의 특성상 Maximum과 Type 매개변수는 사용되지 않습니다.

또한 연결할 부모 VHD는 반드시 시스템과 분리되어 사용 중이지 않은 상태여야합니다.

 

그리하여 D:\Example.vhd를 부모로 하는 D:\child.vhd 자식 디스크를 생성하고 바로 장착하여 사용하고자 한다면 전체적으로 아래와 같은 형식으로 명령이 이루어진다.

 

diskpart

select vdisk file="D:\Example.vhd"

detach vdisk

create vdisk file="D:\child.vhd" parent="D:\Example.vhd"

attach vdisk

 

부모 Expandable + Differencing 자식도 되고, -> 80% ~ 90% 성능

부모 Fixed + Differencing 자식도 된다. -> 물리디스크와 비슷한 성능

 

자식 VHD를 생성할 때 주의 할 점

 

부모가 될 VHD에 일반적인 데이터만 담겨 있고, 자식도 그러한 용도로 사용할 것이라면, 자식 VHD를 부모 VHD와 다른 볼륨(다른 파티션, 드라이브)에 만들 수 있고 그대로 사용하는 데에도 아무런 문제가 없습니다.

 

하지만 부모가 될 VHD에 윈도우가 설치되어 있고, 자식도 마찬가지로 부팅용으로 사용할 것이라면,

자식 VHD를 반드시 부모 VHD와 동일한 볼륨(동일한 파티션, 드라이브)에 생성해야 합니다.

그렇지 않고 부모 VHD와 자식 VHD가 다른 볼륨에 위치해 있다면 자식 VHD로의 부팅은 실패하게 됩니다.

그러니 부팅용 자식 VHD를 생성할 떈 부모 VHD와 동일한 경로 위치에 생성해주는 것이 여러모로 편리.

 

자식 VHD 제거

분리하고 제거해주면 됨.

diskpart

select vdisk file="D:\child.vhd"

detach vdisk

exit

del D:\child.vhd \q

 

-------------------------------------------------------------------------

 

 

 

 

 

 

 

'W > Windows' 카테고리의 다른 글

Favorite - 즐겨찾기 폴더 위치 변경  (0) 2014.03.21
VHD 부팅메뉴 추가  (0) 2014.03.16
MS 윈도우 7 신모드 진입  (0) 2014.03.16
에어로피크 미리보기 빠르게  (0) 2011.12.25
윈도우 테마 shine 2.0  (0) 2011.12.23

설정

트랙백

댓글

1. 새폴더 만듦.

 

2. 새폴더 이름을 GodMode.{ED7BA470-8E54-46SE-825C-99712043E01C}

 

3. 폴더를 열어보면 다양한 제어옵션이 뜸. ( 폴더 이름은 GodMode 부분을 바꾸면 폴더이름이 바뀐다. )

'W > Windows' 카테고리의 다른 글

VHD 부팅메뉴 추가  (0) 2014.03.16
윈도우 7 VHD 만들어서 설치  (0) 2014.03.16
에어로피크 미리보기 빠르게  (0) 2011.12.25
윈도우 테마 shine 2.0  (0) 2011.12.23
컴퓨터 부팅시 Num Lock 키 설정이 안되어 있을 때  (0) 2011.11.05

설정

트랙백

댓글

MyBatis MDB 설정

M/MyBatis 2014. 3. 16. 18:07

path = ./db/db1.mdb

 

<sqlMapConfig>

<transactionManager type="JDBC">

<dataSource type="SIMPLE">

<property name="JDBC.Driver" value="sun.jdbc.odbc.JdbcOdbcDriver" />

<property name="JDBC.ConnectionURL" value="jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb);DBQ=./db/db1.mdb;UserCommitSync=Yes;Threads=3;SafeTransaction=0;PageTimeout=5;MaxBufferSize=2048;

MaxScanRows=8;DriverId=281;DefaultDir=./db/db1.mdb" />

<property name="JDBC.Username" value="" />

<property name="JDBC.Password" value="" />

<property name="Pool.MaximumActiveConnections" value="15" />

<property name="Pool.MaximumIdleConnections" value="15" />

<property name="Pool.MaximumWait" value="1000" />

<dataSource>

<transactionManager>

<sqlMap resource="iBatis/SqlMap.xml" />

</sqlMapConfig>

설정

트랙백

댓글