반응형
Vector를 사용하는 것이 좋은가? ArrayList를 사용하는것이 좋은가?

이런문제는 아주 기초적인 문제이지만, 정리를 하고 넘어가는 것이 추후 안까먹는것같다.

[1] List Interface 이하 Class들

List Interface를 구현한 Class 들은 다음과 같은것들이 있다. 그중 Vector 와 ArrayList는 아주 사용법도 비슷할 뿐더러 API 역시 매우 비슷하다. 아래그림을 보자.


[2] Vector와 ArrayList의 차이점

Vector 는 API를 보면 이러한 문구를 볼 수 있다. (
Synchronized, Thread-safe)
즉,, 동기화에 안전하다는 뜻이다. 과연 무슨뜻일까? 멀티스레드 프로그램의 경우, 별도 Syncronise 와 같은 Rock을 걸지 않아도 개별 스레드에서 사요되는 Vector의 요소에 타 Thread가 접근이 불가능하다는 뜻이다.

하지만 ArrayList의 경우 는 다음과 같다.(
Unsynchronized, unThread-safe)
이말은 즉, 동기화에 안전하지않다는 뜻이다. 즉 , 멀티스레드의 경우 타 스레드가 자신의 ArrayList 값을 수정가능 하다는 것이다.

[3] 수행속도의 차이점.

Vector의 경우 Thread 동기화가 되지 않기 때문에 매번 Thread마다 동기화를 초기화 하기 위해서 많은 메모리가 필요하고 그에따른 속도 저하가 발생한다.

하지만, ArrayList의 경우는 Vector의 경우보다 속도와 메모리 면에서는 훨씬 좋은 편이다.
capacity의경우도 Vector의 경우는 capacity > size 는 경우 현재 Capacity 만큼 증가하게 되지만, ArrayList의 경우는 50%의 capacity만큼 증가하게 된다.

[4] 결론

Multi- Thread가 아닌경우, ArrayList를 사용하는 것이 좋은 것 같다. 만약 멀티 Thread를 사용해야하는경우는 Vector를 사용하는 것보다는 ArrayList를 사용하고 만약 겹치는 부분에 대해 걱정이 된다면, DML의 경우
Synchronized 락을 거는 것이 좋은방법 인것 같다.


                                                                          - 2010.11.22 랑이씀 -


반응형
반응형
Spring 세미나를 다녀도 또는 이런저런 전공책을 뒤지다가도 POJO라는 용어를 많이 부딛치게 된다. 과연 이용어가 뭘까? 한버 알아보도록 하자.

[1] POJO 의 정의
POJO 의 약어를 풀어서 설명하면 , Plain Old Java Object 즉, 평범하고 오래된 자바 객체 라는뜻이다. 이말의 의미를 이해하기위해서는 과거로 올라가보자,
EJB가 다중 분산환경 System에서 한참 유명세를 떨치고 있던  2000년 9월쯤, 어느 컨퍼런스를 준비중던 Martin Fowler 라는 사람은 생각했다. EJB가 왜 좋은지는 알것 같지만 , Entity Bean을 구성하는 과정에서 소요되는 복잡성 및 비지니스로직이 침해되는 것 보다 일반 Java Object에 Domain에 대한 정보만 실어서 구현하는 것이 더 좋다는 생각을 하게되어 POJO란 용어를 만들게 되었다. 즉, EJB가 아닌 "평범한 자바 오브젝트"를 이용해서 개발을 해보자는 취지였던 것이다.

EJB 라는 용어를 보면 왠지 별거 아닌데도 머 있어 보이는 듯한 느낌이든다. "일반자바" 라는 말은 좀 없어 보인다 . 그렇기 때문에 사람들에게 "평범한 자바 오브젝트"를 이용해서 좀더 단순화된 개발을 하자는 의미에서 그럴듯한 이름의 POJO란 용어를 사용하였다.

[2] POJO를 알려면?
"POJO 방식을 이용했다~~" 라고 삼성SDS의 모 여직원이 그렇게 말하더라~ 얼마전에 있었던 일이다. 흠... 뭔말일까 고민했지만, 별거아니다 단순 자바로직을 통해 구현했다는 말인것을 이제는 이해한다. 단적으로 EJB가 아닌건 다 ~~ POJO다? 라는 명제가 맞을까 ? 아니다. 하지만 EJB의 반해서 나온 개념이기 때문에 EJB관련되어서 경험해본 사람은 좀더이해하기 쉬울것이다. EJB의 ENTITY BEAN -> ~~ -> 지금의 HIBERNATE 가 나오게 된 배경 역사를 알게 된다면, 좀더 높은 이해력을 지닐수 있지 않을까 생각이 든다.

[3] POJO 방식을 이용하여 개발된 Framework 는?
대표적인것이 Spring이다. EJB의 장점을 살리면서, Enterprise 급과 Server 두루두루 사용 가능하도록 도와주는 프레임워크이기 때문이다. 또한 ORM 으로 유명한 Hibernate이다. ORM를 사용하는 Field는 아직까지 경험해 보진 못했다. 이론으로 만 경험해 봤을뿐이다. 좋긴 하지만, 아직까지 우리나라 DB는 정규화과정이 제대로 되어있는 곳이 몇군데 없을 뿐만 아니라, DB Schema수정이 빈번히이루어 지고 있기 때문에 mybatis(ibatis 3.0 이후 이름바뀜) 와 같은 SQL Framework이 좀더 두각을 보이고 있다.

[4] 내생각
POJO방식으로 EJB를 모두 다 커버가능할까? 물론 "기가막히고 코가 막히는 일이다." EJB3가 나온지금, 아직까지 강력한 기능을 모두 커버할 수 없지만 , Transfer 과정이라던가 Entity , Session 등 추상메소드를 강제로 구현해야하는 짜증나는 부분들만 POJO방식을 지원하면 좀더 깔끔해 지지 않을까 생각이 든다.

2007년 쯤인가~ 3학년수업때 EJB를 들어놓았던게 POJO를 이해하는데 한층 더 다가갈 수 있는 원인인것 같다.

                                                                          - 2010년 11월 05일 랑이씀 -
반응형

'Program > JAVA' 카테고리의 다른 글

Java에서 사용되는 정규식 종류 및 소개  (0) 2012.01.25
[ Vector와 ArrayList의 차이점]  (2) 2010.11.22
Abstract Class란?  (0) 2010.09.16
JAVA에서 HashCode 값이 유일한가.?  (0) 2010.03.17
Spring 설정 방법 - UPDATE중  (0) 2010.02.09
반응형
학교에서 Java 강의를 하기위해 강의자료를 만들던중...

과거에 제대로된 예제가 없어서 확실히 이해하지 못했던 Abstract Class에 대해서 알아보게되었다.

이리저리 좋은예제가없나 해서 이책저책 뒤지다가 좋은 예제를발견하게되어 한번 정리를 하고 넘어가도록 하겠다.

이런기회에 정리하지 않으면 안될듯하다.

[1] Abstract 란?
한국말로 표현하면 "추상화"라는 단어로 말할 수있다. 과연 추상화란 무엇인가? 아주 두리뭉실한 단어이지만, 좀 쉽게 설명해보도록 하겠다. 추상화란 어떠한 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화 할 수 있도록 하는 것을 의미한다.
ㅎㅎ 적고나니 더 어렵다.ㅎㅎㅎ 뒤에 예제를 보면 쉽게 이해가 갈테이 정의는 여기서 접도록 하겠다.

[2] Abstract 메소드란?
추상화를 언급하기위해 추상메소드 부터 이해해 보도록 하자. 추상메소드란, 메소드 뒤의 {} 중괄호를 생략하여, 사실상 body즉, 내용이없는 메소드를 의미한다. 어찌보면 C언어의 header를 선언하는것과 같은 형태를 지닌다.
아래 형태를 잘 기억해 두길 바란다.


[접근제한] abstract class [클래스명] {}

ex) public abstract class testEX();

[3] 추상 클래스란?
추상클래스의 정의는 아주쉽다. 걍~ 추상메소드가 1개이상 들어가 있으면, 무조건적으로 추상클래스 라고 부른다. ㅋ

아래 예제를 통해 추상클래스의 형태를 살펴 보도록 하자.

abstract class testClass{
      public void aaa(){
            System.out.println("aaa");
      }

      public abstract class testEX();

}

위 예제에서 보듯이 다른거 없다.aaa()라는 구현된 메소드가 있긴 하지만, testEX()라는 추상메소드가 있기 때문에 이 클래스는 추상클래스 라고 부르는 것이다. ㅋ

[4] 추상클래스는 과연 어디다가 써먹는 것인가?
이 글을 쓰게된 이유다... 학생들에게 강의시 예제를 넣어주어야 하는데 어떤걸 할지 고민많이했다 ㅋㅋ 바로 스타크래프트를 예제로 드는것이다. 아래 그림을 보라.



위 그림은 간단한 클래스 다이어그램이다. 즉 Unit이 라는 클래스가 있고 Terran, Zero,  Protoss 의 3개의 클래스는 Unit 클래스를 상속받고 있는 그림이다.

잘보면 decEnerge()라는 메소드가 보일것이다. 이 메소드를 보니, 모두 동일한것들이 하위 3개의 클래스에 선언되어있다. 여기까지 애기했으면 머리좋은 놈들은 바로 알것이다. 각 종족별로 때렸을때 데미지는 틀리다. 그 데미지를 깍는 메소드가 바로 decEneger()이다. 서로다른 데미지 타격을 각각의 클래스마다 선언 후 구현하는것보다 Body가 없는 Unit의 decEnerge()를 상속받아 각각 오버라이딩만 하게 되면, 아주쉽게 하나의 메소드로 구현가능하다.

만약 이런방식을 하지않는경우 각각의 클래스마다 데미지를 감소시키는 메소드명이 서로 달라, 추후 SM시 혼돈이 발생될 우려가 있기 때문에, 이런방식을 추천하는것이다.

[5] 최종 설명끝
소스를 별도로 붙이진 않겠다. 그건 쪽팔리는 일이다. 개념을 알고 접근하는 것이 중요하기 떄문이다. 요 예제는 참 좋은것같다.
특히 게임을 좋아하는 여러 학생들에게는 아주 좋은 예제인것같다. ㅎㅎㅎ 앞으로 요걸로 강의많이해야징 ㅋ


                                                                                   - 2010.09.16 랑이씀 -

반응형

'Program > JAVA' 카테고리의 다른 글

[ Vector와 ArrayList의 차이점]  (2) 2010.11.22
POJO(Plain Old Java Object) 란?  (5) 2010.11.05
JAVA에서 HashCode 값이 유일한가.?  (0) 2010.03.17
Spring 설정 방법 - UPDATE중  (0) 2010.02.09
[ Factory Pattern ]  (0) 2010.02.07
반응형
PHP에서 DB결과를 while문을 통해 뿌리고 난뒤에

다시한번 해당 변수를 사용하고 싶은 경우가 많다.

이럴경우 메소드를 못찾아서 해맸는데

아래 메소드를 이용하면된다.

즉 아래 메소드를 사용하게 되면, Iterator 와 같은 선택 값이 가장 맨 앞단으로

초기화 된다.

 mysql_data_seek($email_selectList, 0);

요거 못찾아서 1시간 헤맸넹 ㅋㅋㅋㅋㅋ
반응형

+ Recent posts