반응형
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
반응형

[ 서 론 ]

해당 게시물은 인터넷에 여러 떠돌아 다니는 정보를 종합해서

제가 이해한 수준으로 적습니다.

우리는 HashCode 라는 메소드를 자주 사용합니다. 때론 골때리는 경우가 발생할 수 있는데요..

과연 HashCode값은 유일성을 보장해 주는것인가?  .흠... 절대 아닌듯...

[ 결 론 ]

우리가 보통

HashMap map = new HashMap();
map.put("test","1234");

라고 넣는다 key는 test 이다. 그럼 내부로직은 어떻게 될까? test라는 String 문자열값을 hasCode 화 하여 저장한다.

API에 보면 아래와 같이 공식이 적혀있다.


public int hashCode()
Returns a hashcode for this string. The hashcode for a String object is computed as
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)
Overrides:
hashCode in class Object
Returns:
a hash code value for this object.
 

주저리 주저리 영어로 되어있지만 결론적으로 네모 박스 안에가 공식이다.

저런 공식을 통해 return 값은 int 타입이다.

즉, 4,294,967,295 개 반환 가능하다는 말이다.

이말인즉 언젠가는 겹칠 가능성이 존재한다는것이다. 왜냐 String은 JVM이 뻐티는 한 무한대로

생성가능하기 때문이다.

따라서 내부적으로 HashCode값과 뭔가를 같이 써야지만, 중복없는 hashCode값이 생성될것이다.

이상!!!! 끝!

반응형

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

POJO(Plain Old Java Object) 란?  (5) 2010.11.05
Abstract Class란?  (0) 2010.09.16
Spring 설정 방법 - UPDATE중  (0) 2010.02.09
[ Factory Pattern ]  (0) 2010.02.07
Properties Class를 이용하여 설정파일 가져오기  (0) 2010.02.06
반응형

AbstractUrlHandlerMapping 를 상속받는 Handler Mapping Class

HanderMapping Class 설명
SimpleUrlHandlerMapping 패턴과 Controller의 이름을 비교하여,
url이 패턴에 매칭될 경우 지정한 컨트롤러를
사용한다.
BeanNameUrlHandlerMapping URL과 일치하는 이름을 갖는 빈을 컨트롤러로 사용한다.
ControllerClassNameHandlerMapping URL과 매칭되는 클래스 이름을 갖는 빈을 컨트롤러로 사용한다.
DefaultAnnotationHandlerMapping $RequestMapping 어노테이션을 이용하여 요청을 처리할
컨트롤러를 구현한다.


Controller Interface를 상속받는 Handler Contoller Interface

용도 INTERFACE] TEXT
단순처리 Controller
AbstractController
별도 기능을 제공하지 않는 컨트롤러.
요청파라미터 처리 등의 작업을 직접 구현해 주어야한다.
파라미터 맵핑 AbstractCommandController 요청 파라미터를 객체에 저장해 주며,
파라미터 값 검증 기능을 제공한다.
입력 폼 처리 SimpleFormController 폼을 출력하고 폼에 입력한 데이터를
처리할 때 사용된다.
다중 페이지
입력폼 처리
AbstractWizardFormController 여러 페이지에 걸쳐서 데이터를 입력하는 경우,
입력 폼의 흐름을 제어하고 입력한 데이터를 처리할 때
사용된다.
정적 뷰 매핑 ParameterizableViewController
UrlFilenameViewController
컨트롤러에서 어떤 기능도 수행하지 않고,
단순히 클라이언트의 요청을 뷰로 전달할때 사용된다.
다중 액션 MultiActionController 연관되거나 비슷한 로직을 수행하는 다수의
기능을 하나의 컨트롤러에서 구현할 때 사용된다
.

Spring이 제공하는 주요 ViewResolver 구현 Class

ViewResolver Class 설명
InternalResourceViewResolver 뷰 이름으로부터 JSP나 Tiles 연동을
위한 View 객체를 리턴한다.
VelocityViewResolver 뷰 이름으로부터 Velocity 연동을 위한
View 객체를 리턴한다.
BeanNameViewResolver 뷰 이름과 동일한 이름을 갖는 빈 객체를
View객체로 사용한다.
ResourceBundleViewResolver 뷰 이름과 View 객체 간의 맵핑 정보를
저장하기 위해 자원 파일을 사용한다.
XmlViewResolver 뷰 이름과 View 객체 간의 맵핑 정보를
저장하기 위해 XML 파일을 사용한다.
반응형

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

Abstract Class란?  (0) 2010.09.16
JAVA에서 HashCode 값이 유일한가.?  (0) 2010.03.17
[ Factory Pattern ]  (0) 2010.02.07
Properties Class를 이용하여 설정파일 가져오기  (0) 2010.02.06
JAVA - LINUX 명령어 실행하는 방법  (0) 2010.02.06

+ Recent posts