오늘은 폰갭 관련 좋은 교재가 있는지 확인하러 서점에 들렀었습니다.

 

대략 12시쯤 나가서 6시쯤 돌아왔는데요.. 온갖 책들의 표지만 실컷 구경하다 와버렸네요.

 

애초에 목표로 했던 폰갭 관련 도서의 경우.. 제 눈에는 "난 폰갭으로 뭔가 만들었습니다. 그러니

내 코드 한번 따라 쳐보세요" 식이라 영 구미가 안당겼습니다.

 

그다음으로 생각했던게.. spring 관련 교재였는데요.. 저는 api문서처럼 참조하는 형식의 레퍼런스

북이 아닌, 개념 이해부터 다양한 소스까지 포함된 책을 찾다보니.. 몇몇 책이 탐지 되었습니다.

 

결국 "프로 스프링3<에이콘출판>" "스프링 MVC 프로그래밍<위키북스>" 두 책을 점찍어 왔습니다.

 

이 책 괜찮을까요?  궁금합니다~

 

 

ps.오는 길에 중고 서점에 들러 code complete2 , jsp1.2버전의 java server pages란 책을 구매해

왔는데.. jsp 1.2....

 

주말에 the c++ programming language란 책을 붙잡고 있는 중인데.. 너무 어렵습니다. OTL

 

어쩌다 보니 잡담 형식이 되었네요. 흠.. 뭔가 의미 있는 정보를 넣어야 할텐데..

 

 

 

 

상위클래스타입의 참조형 변수에 하위클래스타입의 객체를 보관할수 있다는 문제에 대해 대충 고찰해 봅니다.

 

 

사용해보니 완전 편하지요? A타입,B타입,C타입 따로 배열을 만들어 보관할 필요 없이. A,B,C,의 상위 클래스

인 Base타입 배열 하나로 보관하다니.. 얼마나 행복합니까. 물론 상속(일반화&구체화 => A is a Base, B is a Base..)

라는 개념은 이해하는 걸로 전제합니다.

 

 

상위 클래스 , 하위 클래스 구분부터 합니다.

1.포함하는 멤버필드,멤버 메서드는 :상위 클래스 <= 하위 클래스 로서 한마디로 하위클래스가 덩치는 더 크거나 같습니다.

 

2.혼란이 있을수 있는 부분이 우리는 큰 자료형에 작은 자료형을 넣을때 별다른 문제가 없다고 기억합니다.

  double d = 10.f;    

 

3.하위클래스의 덩치가 크니까 상위 클래스를 넣어도 별 문제가 없어 보이지만 한가지 고려할 부분이 있습니다.

 

 

(데이터의 타입 선언(자바에선 불필요한듯?),정의,메모리 할당,초기화에 대해 설명을 드릴까 고민해 봤지만,

처음부터 개념을 잡아주려면 시간이 많이 걸릴듯 하여 생략합니다. 서적 참고 + 개별적으로 검색)

 

 

4.프리미티브타입 vs 레퍼런스타입 : 참조(레퍼런스) 타입의 변수는 메모리상의 주소 0x11212124 를 기억하기

위한 변수 입니다. Person이란 클래스 타입이 있고, 그것의 메모리상 주소를 가리킬수 있는 Person p;에서

p가 주소를 담는 참조변수입니다. (new를 통해 실제 Person 크기만큼의 메모리를 할당하고 그 주소를 레퍼런스

타입 변수명 p에 기억시키는 것은 별개의 과정입니다. 아 글고.. 프리미티브라도 배열타입은 레퍼런스타입과 같습

니다. int a; Person p; 등의 변수명은 실제 메모리 공간의 주소를 사람이 인식하고 다루기 쉽게 연결해줍니다.)

 

프리미티브형은 타입 별로 메모리상 차지하는 공간에 차이가 있습니다. 1byte,2byte,4byte..

 

레퍼런스타입은 1,2,4byte 처럼 차이가 있지 않습니다. 자바에선 4byte로 고정입니다.(64비트 운영체제에서도

그런진 모르겠습니다)

 

5.3으로 되돌아가 보면.. 결국 상위클래스와 하위클래스의 메모리(힙영역)상 위치를 가리키는 참조변수는

크기가 4byte로 동일합니다. 그럼으로 상위클래스 타입과 하위 클래스 타입간에 형변환이 가능합니다.

 

6.2에서 거론한 프리미티브간의 형변환과 레퍼런스타입중 계층트리(상속관계) 형변환은 의미상 차이가 있습니다.

데이터 사이즈가 큰쪽 vs 작은쪽      <----->   개념상 상위타입(사람) vs 하위타입(여자or남자)

 

7.자바 컴파일러는 타입간의 계층트리에 대해 많은걸 알고 있습니다. 우리가 타입들을 선언+구현=정의해주고

타입간에 관계를 알려줬기 때문이죠. extends, implements .. 그래서 6의 두가지 형변환(크기상 형변환 vs 다형적

의미의 형변환)이 컴파일러 입장에선 of course입니다.

 

8.그럼으로 형변환을 허용해주고 얼핏 크기가 달라보이는데도 하나의 컨테이너(배열= 동일한 데이터 타입의 집합)

에 담을수 있는 것입니다.

 

long l = 10(int); <-- 문제 없습니다.(물론 컴파일 오류는 뜨겠지만;;)

int i = 10L; <--문제가 있습니다. 사이즈가 큰 타입을 작은 타입에 넣어주면 데이터 손실이 있을수 있기에 명시적인

                    형변환 int i = (int)10L; 이 필요합니다. 

Base base = new Child(); <--  문제 없습니다.(개념상 상위 타입에 하위 타입을 넣었음으로)

Child child = new Base(); <--  문제가 있습니다.(데이터 손실은 없지만 마찬가지로 명시적인 형변환이 필요합니다.)

 

=>제가 틀린 부분이 있을지도 모르겠습니다만, 하여간 시간을 투자해 지식을 공유했습니다.(제가 책볼 시간을 쪼개서)

그럼으로 이제 더 이상 제가 아는 것을 남기는 설레발은 안떨겠습니다.

 

이상입니다. 이따 봅시다. 굿나잇~

by givingsheart 2014. 1. 1. 15:00