출처 : http://kyo820.tistory.com/category/Programming%20Language/JAVA
오늘은 간단하게 래퍼클래스 녀석..까발려보자.
래퍼 클래스.. 상당히 유용하면서도 많이 사용될 것같은 느낌이 드는 녀석이다!!!
먼저 이녀석이 뭘 하는 녀석인지부터 알아보자.
그 전에~래퍼..단어부터 볼까? 이름에서부터 느낌이 팍팍 오지 않는가????..
(안온다면 어쩔 수 없고....)
wrap〔〕 ( rap) v. (wrapped, wrapt[];wrap·ping) vt.
1a (감)싸다, 입다 《up, in, with》
《wrap+목+부》 《wrap+목+전+명》 He wrapped himself (up) in his cloak. 그는 망토로 몸을 감쌌다.
She wrapped the baby in her shawl. 그녀는 아기를 숄로 감쌌다.
<<발췌 : 네이버 사전>>사전
그렇다....
이녀석은 감싸는 일을 하는 놈이다....마치 우리가 주방에서 자주 사용하는 크린랩처럼...
근데 거기에 er이 붙었으니..감싸는 일을 하는 녀석이 되겠지?..
그럼 무엇을 감싸냐?????
자.자바에서 사용되는 변수는 크게 원시변수와 레퍼런스(울 나라 말로 참조변수??정도..) 로 나눌 수 있다.
좀 더 쉽게 말하면....기본형이라고 말할 수 있는 원시변수. 그리고 객체에 접근하기 위한 리모콘이 되어주는 참조 변수??(C에서는 간단하게 기본형 변수와 포인터라고 불렀었던거 같다...C는 하도 안한지 오래되서........)
요 두 녀석의 차이는 무엇이냐?
간단한 차이는 원시변수는 변수가 값을 갖는다는 것이고, 참조 변수는 사실 어떤 값을 가진 것이 아니라 데이터의 주소를 가진다는 차이?
(C에서 변수와 포인터의 차이를 생각하면 될듯.. 이해가 안가시면 )
이 차이를 래퍼 클래스를 설명하기에 좋게 좀 더 풀어 쓰자면
객체인가? 아닌가? 의 차이??랄까...
(물론 참조 변수 자체가 객체라고 하기는 좀 뭐하지만..결국 객체에 접근하게 해주는 역활을 하는게 레퍼런스 변수이니 결국 그놈이 그놈이고...레퍼런스 변수가 없는 객체는 결국 GC에 의해 힙에서 삭제 당할테니깐 레퍼런스 변수 없는 객체는 결국 객체가 아닌게 되니..주저리 주저리...고로...그냥 그렇다 치고 넘어가자...........)
어쨋든 그렇다..;;;
그럼..객체를 참조하는 레퍼런스 변수이든 원시변수이든 그것이 왜 중요하냐?..
그것은 아직 직접적으로 포스팅 한적은 없지만 자바에서 많이 이용되는 컬렉터 때문이다.
컬렉터가 뭐하는 놈인지는....
나중에..기회가 되면 포스팅 하고.........
이 컬렉터라는 녀석은 간단히 설명하면 말 그대로 무엇가를 수집하는 녀석인데, 이 녀석은 객체 타입이 아니면 저장을 못하게 해버린다...
(이기적인 놈!!!)
고로...다시 말하자면 객체가 아닌 원시 변수들(기본형, int, char, 기타 등등등 )은 컬렉터한테 좀 저장해놓으라고 해도 이녀석이 당췌 말을 듣질 않는다는 말이다.......
그렇다면...컬렉터를 이용 안하면 되지..라고 생각하기엔 컬렉터가 가진 기능이 너무...좋다..
꼭 써야할 일들이 분명 생길 것이고, SUN사의 똑똑한 개발자분들께선~ 원시변수를 저장할 수 있도록~하자!!!해서 생긴게 레퍼 클래스이다!
아...설명이 무지 길지만...간단 3줄 요약하자면,
객체만 담을 수 있는 컬렉터에 원시변수(기본형)도 저장할 수 있도록(물론 이 일 외에도 할 수 있는 기능들이 많다. 꼭 이것만을 위한 레퍼클래스는 아니다.) 원시변수를 객체처럼 포장해주는 일을 하기 위해 존재하는 클래스가 래퍼(Wrapper)클래스이다!!!
흠..설명이 또 길어졌어.....
아무튼 래퍼 클래스로 원시 변수를 객체로 변신시키면, 이제 원시변수는 객체가 된다.
객체가 되기 때문에 다른 객체처럼 메소드도 갖게 되고, 객체형(Object)형 배열에도 넣을 수 있다.
신나지 않는가?!!!
우훗..
가장 간단하면서도 가장 많이 사용하는(난 사실 이 코드덕분에 레퍼 클래스란게 존재하는 줄 알게 되었다.) 코드를
public class Test{
public static void main(String[] args){
String str = "100";
int x = Integer.parseInt(str);
x += 20;
System.out.println(x);
}
}
간단하게 볼까?
먼저 "100"이라는 문자열(문자열이다..숫자 100과는 다른 녀석이다)을 가진 객체를 만들었다.
그리고 이 녀석을 레퍼 클래스인 Integer의 static메소드인 parseInt()를 통해 int형 데이터로 변신시켜버렸다!!!!!!!!!!!
어떻게 확인하냐고?
더해보면 되지!!!변신시킨 x에 20을 더해주고 출력해보면.
120이 출력되어 나온다..
어떤가....멋지지 않은가.....
여담이지만 저 parseInt를 제일 처음 쓴 건 JAVA시작한지 얼마 안되었을 때, 콘솔에 메뉴를 띄우고 메뉴 번호를 입력받아 case문으로 해당 구문으로 이동시켜주는 작업을 하면서 알게 된 녀석이다..
아마 ..그렇게 입력받은 값을 자신이 원하는 기본형으로 변환시키기 위한 작업을 하면서 처음 접하지 않았을까 하는 생각이 든다..
(아님 말고?^^;;)
오....레퍼 클래스 설명만으로 무지 길어졌다...
너무 긴 글은 정서에 좋지 않으니..다음 포스팅에서 실제 레퍼 클래스를 파헤쳐 보자.
'Java' 카테고리의 다른 글
다형성 (0) | 2012.04.03 |
---|---|
추상클래스(abstract), 인터페이스(interface) (0) | 2012.03.29 |
final (23) | 2012.03.27 |
카멜표기법 (0) | 2012.03.26 |
Java InnerClass(내부클래스) (0) | 2012.03.26 |