12345
1. 일반 자바 빈즈의 엔터프라이즈 자바 빈즈의 차이점
자바빈이란 용어는 재사용이 가능한 컴포넌트를 뜻합니다. 줄여서 빈이라고 부르기도 해요.
기존의 엔터프라이즈 빈이 아닌 일반 빈은 개발도구에서 쓰일수 있는 명명 관행을 따르는
재사용이 가능한 컴포넌트를 뜻합니다.

자바빈 가운데 가장 대표적인 것으로 스윙 버튼이나 텍스트 필드와 같은 GUI 컴포넌트를 들 수
있습니다. 거의 모든 자바 IDE는 자바빈 호환 기능을 갖추고 있기 때문에 비쥬얼 레이아웃 툴에서
작업을 할때는 버튼만 클릭하면 색, 크기, 폰트 등을 설정할수 있는 속성창이 자동으로 뜹니다.

빈은 게터와 세터에 대한 어떤 관행을 따르기 때문에 그런 툴에서 해당 빈이 가지고 있는 속성을
파악할수 있습니다.

하지만 일반 자바빈이 GUI 컴포넌트에서만 쓰이는 것은 아닙니다. 지니나 서블릿과 같은 다른
자바 기술에서도 자바빈 기능을 사용할 수 있습니다.

엔터프라이즈 자바빈은 재사용이 가능한 컴포넌트라는 점을 제외하면 일반 자바빈과 비슷한 점이
없다고 할수 있습니다. 일반 자바빈의 빈으로써의 특징은 대부분 개발과정에서 한 빈의 이벤트를
다른 빈의 메소드에 연결한다거나 속성값(대부분의 경우에 인스턴스 변수값)을 설정하는 과정을
쉽게 또는 빠르게 하기 위한 용도로 쓰입니다. 그리고 일반 빈은 보통 자바 클래스와 마찬가지로
JVM에서 실행이 되요. 하지만 엔터프라이즈 빈의 빈으로서써의 특징은 실행 시에 발휘되며
엔터프라이즈 빈은 반드시 EJB 컨테이너의 관리 하에 실해되어야 합니다.


2. POJO(Plain Old Java Object)
순수 자바 클래스들을 이르는말, POJO(Plain Old Java Object, 보통의 기존 자바 오프젝트라는 뜻으로, EJB와 같은 거창한 컴포넌트가 아닌 일반적인 자바 클래스를 가리킵니다. 영화 ‘오스틴 파워스’에 등장하는 모조(Mojo)의 패러디처럼 들리기도 하지요)의 활용과 비동기 호출의 지원입니다.

간단하게 말하면 자바 SDK에 있는 순수 자바 클래스들을 프로그래밍 하는것.




3. 객체와 인스턴스의 차이점
인스턴는 클래스를 근거로 생성된 인스턴스의 관점, 즉 생성된 인스턴스를 초점을 맞추어 이야기 할때 많이 사용.  하지만 객체는 이렇게 하나의 클래스로 만들어진 객체들을 전체적인 집합적인 의미로
객체를 가리킬때 사용되곤 한다. 이런 개념도 논란이 많은거 같고. 자세히는 잘 이해가 안간다..


4. 추상클래스와 인터페이스의 차이점
둘다 스스로 객체 생성은 불가능하다. 두개 전부를 미완성 설계도로 이해하면 편할듯 하다.
미완성 설계도로 제품을 만들수 없듯이 :)
하지만 추상클래스와 인터페이스를 쓰는 이유는 각기 다른 TV가 공통된 기능을 가진 설계도를
가질수 있듯이 공통된 부분만을 그린 미완성 설계도를 만들어 놓고  설계도를 이용하여 각각의
설계도를 완성하는것이 훨씬 효율적~

추상클래스가 미완성 설계도라면 인터페이스는 기본설계도
인터페이스로 다중상속과 같은 효과를 낼수도 있음.

tagged with  java
TRACKBACK ADDRESS : http://josuae.tistory.com/trackback/168 관련글 쓰기
이름 :
비밀번호 :
홈사이트 :
비밀글 :

1. WEB 2.0

기존의 웹(여기서는 웹 1.0으로 부르겠다)의 개념은 생산자가 이따금 갱신하는 정적 HTML 페이지들의 집합일 뿐이었다. 이보다 좀 더 동적인 웹(종종 '웹 1.5'로 불리는)의 출현은 닷컴 분야의 성공을 이끌어냈다. 이러한 동적인 웹은 콘텐츠 데이터베이스의 변화를 즉시 반영해 생성한 동적 HTML 페이지를 콘텐츠 관리 시스템이 제공함으로써 만들어졌다. 흥미를 불러 일으키는 것이 웹 경험에서 본질적인 요소로 간주되었으며, 페이지 조회와 미적인 시각 요소가 중요한 부분으로 자리 잡았다. 또한 대부분의 웹은 콘텐츠를 만들어 내는 생산자와 이를 단순히 이용하는 소비자로 구분되었다.

웹 2.0의 주창자들은 블로그트랙백이나 위키와 같이 각 주체가 생산자이면서 동시에 소비자가 되는 상호 작용을 통해 콘텐츠를 재생산하며 사회적 네트워크를 형성해 나가는 것에 주목했다.

최초의 웹 2.0 콘퍼런스에서 Tim O'Reilly와 John Battelle는 웹 2.0의 특징을 다음의 핵심 요소들로 정리했다.

  • 플랫폼으로서의 웹.
  • 원동력이 되는 데이터.
  • 참여 구조(architecture of participation)에 의한 네트워크 효과
  • (오픈 소스 개발과 같이) 여러 시공간에 흩어져 있는 독립적인 개발자들이 공동으로 참여해 혁신하는 시스템이나 사이트
  • 콘텐츠와 서비스 신디케이션을 통한 가벼운 비지니스 모델(lightweight business model)
  • 기존의 소프트웨어 개발 사이클과는 다른 "영원한 베타(the perpetual beta)"
  • 롱테일의 힘을 극대화 시키는 소프트웨어 (하나의 장치에서만 동작한다는 기존의 소프트웨어 관념을 뛰어 넘어 여러 이기종(異機種) 장치에서 하나의 소프트웨어로서 구동됨

** reference : http://www.likejazz.com/doc/web2.html


2. Hibernate

자바 프레임워크 종류중 하나.
스트러츠 어느정도 숙달되면 한번 해볼계획 :)

** reference : http://wiki.javajigi.net/display/FRAMEWORK/Hibernate
                    http://blog.naver.com/jdkim528.do


3. indexOf()  / charAt()

예전에 봤던 내용인데 혼동했던 두개의 메소드의 차이;;
indexOf() : 해당문자가 들어있는 위치(왼쪽에서 첫번째), 오른쪽에서 첫번째는 lastindexof()
charAt() : 인수위치에 들어이는 문자를 반환


4. query : connect by / siblings by


5. 오라클 관련 정보 사이트
   
http://www.oracleclub.com/main.action
     http://www.sqler.pe.kr/


6. SAS는 SOA랑 AOP 이해하고 다음에;;


7. RAD(Rational Application Developer)

IBM Webspare 서버에서 좀더 쉽고 자동화된 개발하기 하기 위한 툴,
이클립스에 plugin을 첨가한 제품으로 상용으로 IBM에서 판매중이라고 한다.
Webspare 서버 설치할 필요도 없이 내부적으로 서버 모듈을 가지고 있어서 개발이나 배포등을
손쉽게 할수 있는데 가격이 비싸다고 하다.. IBM 홈페이지에서 가격정보를 찾을려고 하는데 못찾겠다;;


tagged with  java, 스터디
TRACKBACK ADDRESS : http://josuae.tistory.com/trackback/161 관련글 쓰기
이름 :
비밀번호 :
홈사이트 :
비밀글 :

Outer 클래스의 멤버 변수를 Inner 클래스에서 접근할시에는 서로 static 과 instance의 차이가 아닌 한,
에러가 발생하지 않습니다.

하지만 Outer 클래스의 멤버변수를 Inner 클래스에서 변경을 시도할 경우에는 아래와 같은 에러가
발생하는군요. ( x변수에 대한 값 변경 시도시 : 대입연산자 )

Syntax error on token "x", VariableDeclaratorId expected after this token

내부클래스에서 외부클래스에 대한 멤버변수가 참조는 되지만 변경은 되지 않는다 라는건 새로운 사실
같습니다. 원리에 대해서는 조금 더 찾아봐야 할거 같네요 =_=

다음으로 자바의 소멸자에 대한 내용입니다.
C++ 에서는 ~으로 시작하는 클래스의 이름과 같은 메소드를 소멸자로 정의하는데요.
자바에서는 ~이 비트전환 연산자 일뿐 메소드에 ~ 붙이면 소멸자로 인식하지 않습니다;;

딱히 자바를 사용하면서 소멸자에 대한 것을 써본적이 없어서 한번 검색해보았는데요.
자바에서도 소멸자가 존재하였습니다. Object 클래스의 finalize() 메소드 입니다.

JAVA API를 검색해본결과 아래와 같은 내용이 나오네요.

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

자바에서 버려진 객체에 대한 메모리 회수를 해주는 가비지 컬렉터가 해주는 가비지 컬렉션을 수행한다고
언급되어 있는것 같네요.

따라서 자동으로 JVM에서는 위의 object 클래스의 finalize() 메소드를 통하여 가비지 컬렉션을 수행하는것
같습니다.  물론 유저가 finalize()을 임의로 사용도 가능합니다.

finalize()에 대한 내용은 아래의 블로그에서 이해가 쉽게(!) 언급되어 있네요 :)

[java.lang.Object 메쏘드 분석 5 - finalize]


tagged with  java, 소멸자
TRACKBACK ADDRESS : http://josuae.tistory.com/trackback/158 관련글 쓰기
이름 :
비밀번호 :
홈사이트 :
비밀글 :

C언어에서 문자열을 생성하고 싶을때, 힘들게 작성하던 기억이 가물가물 거립니다.
C언어에서 새롭게 자바를 배울때 너무 간단히 문자열을 생성할수 있는 것을 보고 신기했던 기억이 나네요.

자바를 공부하시는 분들은 알겠지만 String 클래스를 이용하여 문자열을 생성하는 방법은 크게 2가지로 나뉘고 있습니다.
예를들어, a라는 String(이하 스트링) 객체에 abc라는 문자열을 삽입할때를 보면,

 1. String a = "abc"
 2. String a = new String("abc");

이렇게 2가지 방법이 존재하지요.

막상 1번과 같이 생성한다고 해도, 자바 내부에서는 2번과 같이 변환된다고 대학교 2학년 자바시간때 교수님이 말씀하시던게
생각납니다.

하지만 과연 위의 1,2번이 같을까요?

단순하게 스트링 객체 2개를 비교하는 방법으로 부터 시작해보겠습니다.

문자열을 비교할때 어떤 방법을 사용하시나요?

이전에 C언어를 하신분이나, 자바 기본서를 조금 읽어보신 분은 ==  비교연산자를 이용할거라 생각하실수도 있습니다.

== 을 이용해 볼까요?


위와 같이 리터럴을 지정하는 유형으로 했을때, 같다고 출력하네요..^^;
그럼 이번엔 스트링 클래스의 생성자를 이용했을시도 과연 같은 결과가 출력될까요?



어..? 이번에는 같다고 안나옵니다 -_-;

그럼 결론이 스트링을 사용할시, 리터럴과 생성자의 차이점이 존재하는거 같아요.

그런데 그전에 스트링 생성자를 이용할시 문자열이 같을시에 같게 하려면 어떻게 할까요?

답은 String 클래스의 equals 메소드를 이용하시면 됩니다..^^




이제는 같다고 출력되는걸 볼수가 있네요~ JAVA API에서 String 클래스의 equals 메소드의 사용법은 아래와 같이 나와있습니다.

Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.

앞에서 봤던 리터럴 지정 유형으로 equals 메소드로 비교 해볼까요?



문제없이 같다고 나오고 있습니다..^^


그럼 이제 본격적으로 왜 2가지 방식의 차이가 존재할까요?

간단히 말해서 JVM 에서는 리터럴로 문자열을 생성할 경우, 같은 내용의 문자열은 하나의 스트링 인스턴스를 참조하도록
되어 있습니다. 즉, String a = "abc"; 을 이용하여 스트링 인스턴스를 생성하고, 그 뒤에 String b = "abc"; 가 오면,
JVM에서는 이전에 생성된 스트링 인스턴스와 문자열과 새로운 문자열을 비교합니다. 

이때 문자열이 서로 같을시에는 b 인스턴스를 생성하는것이 아닌, b의 레퍼런스 변수가 a 인스턴스를 참조하도록 해주는 것이지요.^^

따라서, 결론적으로 리터럴를 이용한 스트링 생성시에는 문자열이 같을 경우에는 하나의 스트링 인스턴스를 여러 레퍼런스
변수가
참조한다. 라고 생각할수 있겠습니다..^^

정확히 말하면, 최초 문자열 생성시에, 문자열을 constant pool(상수풀)에 보관을 합니다. 이 상수풀에 보관된 문자열을
다음에 스트링 인스턴스를 생성하기 전에 JVM에서 비교해 주는 것이지요~

여기서 중요한건 생성자를 이용하여 생성할시에는 constant pool에 보관을 안하고, 리터럴을 이용하여 스트링 생성시에
constant pool에 보관되는 효과를 보여준다는 점입니다..

따라서, == 비교 연산자를 이용한 연산결과의 출력도 이제 이해가 갈텐데요.
레퍼런스 변수가 같은 인스턴스의 주소를 가지고 있기때문에 서로 같다고 출력이 되는 것입니다~

하지만, 생성자 를 이용하여 문자열을 생성시에는, 위와 같은 과정들을 하지 않습니다.
문자열이 같아도 그냥 단순히 문자열 인스턴스를 계속 생성하고, 레퍼런스 변수가 각각의 인스턴스를 참조할 뿐이지요..^^
따라서, == 비교 연산자의 출력도 같이 않기 때문에 false 로 출력될수밖에 없습니다.

하지만, String 클래스에서 제공하는 equals 메소드는 문자열 자체를 비교하는 것이기 때문에 위의 스트링을 생성하는 것과 무관하게,
올바른 결과값을 보여줍니다..^^

그럼 생성자를 이용한 스트링 인스턴스를 리터럴로 생성된것과 같은 효과를 낼수는 없을까요?
답은 String 클래스의 intern() 메소드입니다.

JAVA API에서 intern() 메소드의 사용법은 아래와 같이 나와 있습니다.

Returns a canonical representation for the string object.

A pool of strings, initially empty, is maintained privately by the class String.

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t)
is true.


간단히, intern() 메소드는 해당 스트링이 constant pool(상수풀)에 등록된 스트링일 경우에는, 그 스트링의 주소값을 반환합니다.
즉, 생성자를 이용해 생성한  스트링의 레퍼런스 변수가 상수풀에 등록된 스트링을 참조하게 됩니다.
이전에 따로 생성된 인스턴스는 JVM의 가비지컬렉터에 의하여 사라지겠지요..

아래와 같은 예제를 실행해보시면 알것 같습니다..^^



intern() 메소드 실행후에 == 비교연산자가 true로 반환되는 것을 알수가 있네요..^^

이제 어느정도 String 클래스를 이용한 문자열 생성법의 2가지 차이에 대해 이해가 되셨으면 좋겠습니다..!


tagged with  IT, java, string, 자바, 대한민국>서울
TRACKBACK ADDRESS : http://josuae.tistory.com/trackback/149 관련글 쓰기
이름 :
비밀번호 :
홈사이트 :
비밀글 :

예전부터 자바 공부를 하면서 궁금했던 사항입니다.

BufferedReader 클래스와 Scanner 클래스의 차이는 무엇일까요?

우선 네이버 검색을 시도해봤는데, 딱히 적당한 결과를 찾지도 못했습니다.

우리의 구글링으로 검색한 결과, Sun사의 JAVA 포럼에서 비슷한 질문이 올라온거 같네요..^^
(http://forums.sun.com/thread.jspa?threadID=773648&tstart=35835)

결론적으로 Scanner 클래스는 JDK 1.5 버젼부터 등장한 클래스고, 초보자들이 쓰기는 쉬운거 같은데, 아래와 같이 메세지를 주시네요.

The Scanner should not be used for simple input for beginner's programs.


아래와 같은 메세지도 존재하네요..^^

Scanner seems like such a simple, but Swiss-Army-Knife kind of tokenizer (it does all sorts of things, without regard to any particular context) that it seems like it was introduced specifically for newbies or for people who want to write some quick-and-dirty code. I would think that if you were doing any really advanced stuff you'd write a specialized parser or use whatever the java equivalent of lex is.


하지만 정확히도 저도 자세히는 잘 모르겠네요..

코드 간결도에 있어서는 BufferedReader가 Scanner보단 더 나을거 같기도 하지만, 속도면에서는 BufferedReader가 나은것
같습니다만, 2개중에 무엇을 더 하는게 좋을거 같은지는 조금 더 찾아봐야 할거 같습니다.. ㅠㅠ



tagged with  java, 자바, 프로그래밍
TRACKBACK ADDRESS : http://josuae.tistory.com/trackback/148 관련글 쓰기
이름 :
비밀번호 :
홈사이트 :
비밀글 :
*1 
ㅠㅠ
알립니다
episode
activity
blog
everyday
programming
portfolio
seminar
thinking
nonclassified
secret scrap
ipod touch
count total 68,934, today 3, yesterday 4