1.일반적인 숫자

- 사용시 매직넘버(아무런 설명없는 리터럴 숫자)를 피할것  (cf)0,1은 배열의 시작 인덱스, 반복문의 제어식에 사용됨으로 예외

- divide by zero 방지

- 형 변환을 명확히 수행

- 비교연산은 동일한 형간에 (정수vs정수,실수vs실수) 예전 로또 번호의 문자열 "25"의 범위 체크를 위해 정수 1~45 간 대소

  비교를 리마인드, 추가로 문자열의 대소비교 compareto 의 사전식 비교 특징을 기억

 

2.정수

-정수 나눗셈을 검사 (ex) 7/10 = 0.7이 아닌 0  =>젯수 > 피젯수 였나.. 하여간 조심

-오버 플로를 조심 (ex) int형의 표현 범위는? 자바에선 unsigned는 없다. 앞으로 최대 숫자가 증가할 것인지, 변화가 없을것인지

  예측해야한다.

 

3.부동 소수점

-float은 7자리였나 , double 은 15자리 였나

-서로 크기가 매우 다른 수간에 더하기 빼기 조심  float형 1,000,000.00 + 0.1 = 1,000,000.0 임

-동치 비교 조심 0.1 * 10 의 결과는 10이 아닌, 0.9999999

  (sol) equal를 재정의 if(절대값 a-b < 0.0001) 이면 true 식으로

-회계 프로그램등을 만들때 확실한 계산을 위해선 그제 배운 BigDecimal 인가를 사용

 

4.문자와 문자열

-코드에 때려박는 매직 문자열 조심

  (sol) 당연하지만 이러한 리소스는 외부 파일로 별개 관리후 read/write 해야함. 코드에서 데이터(외부파일)와 프로세스

  부분의 분리가 필요 (게임 스크립터라면 로직및 연산도 외부로 빠질수 있음)  <-- 상용 툴들 확인하기.

  현지화 문제에 항상 걸리는 것이.. 문자열, 인코딩 방식,해당 국가별 관련 정책,현지 법인의 특별 요청 등

 

 -현재 내경우엔 이클립스 내부 세팅을 모든 문자 인코딩을 UTF-8로 했는데 이건 옳은 결정인가? (기존 작업물을 제대로 읽지

  못하는 문제가 있고, 앞으로 작업할 것들에 문제는 없을까?)

 

 -프로그램내 여러 서브시스템에서 서로 다른 인코딩을 쓰고 있다면, 입/출력 처리 부분에서 동일한 타입으로 변환해서 처리

 

 -예전에 윈도우 property를 파일로 모두 출력했을때.. /t만 먹고, /n or /r 은 통하지 않았었다. 그 이유는?

 

5.불린

-복잡한 불린 표현식을 조건식에 여러개 배치하지 말것, 불린 변수의 이름을 명확하게 할것

  (ex) if(표현식1 && 표현식2 || 표현식3)   -->  b1 =  표현식1; b2 = 표현식2; b3 = 표현식3;  b4 = b1&&b2; if(b4 || b3) 요렇게

  풀어 쓰는 식으로 (물론 내가 조금 오버하긴 했음.. 불린 변수의 이름을 명확히 줘야하기도 하고..)

  (etc) 반복문의 초기화 식을 반복문 시작 바로 위 라인에 배치해볼것? for(int index=XX.curIndex; i<XX.length; i++)  ->

         int index=XX.curIndex;  .. 이유나 의미를 까먹었음

 

6.열거형

-컴파일러에게 입력값 평가를 세밀하게 시킬수 있음. (ex) int = -327xx ~ 327xx 라면 ok, 그러나 열거형의 경우 Day day =

  Day.Monday ~ Day.Sunday 1~7에 해당하는 범위가 아니면, 컴파일러가 잡아줄수 있음. 물론 엉뚱한 타입을 집어 넣는

  것도 방지해줄테고.

 

-타당하지 않은 값 검사할것: if나 switch문에서 else , default 부분에서 처리

 

 

7.명명된 상수의 유용성: Max를 앞에 붙일지, 뒤에 붙일지에 대해 저자는 형식의 통일성및 중요한 의미 Max가 도드라져 보인

  다고 뒤에 붙일것을 권유함.. 근데 내 생각은 max를 앞에 붙이는게 이클립스 자동완성 기능 ctril space를 통해 사용하기

  쉬웠음. 내부의 많은 변수간에 역할별 카테고리를 나누는 유용성도 있을테고.. static final int lottoNumMax = 45; VS

  maxlottoNum = 45; 

 

8.배열 다룰때 조심할 점인데.. 컨테이너를 사용할 것이니 생략함

 

 

etc)자바에서 참조형이라는 개념을 어떻게 구현했는지 어렴풋이 감을 잡았다.(포인터 사용의 특수한 기법중.. 코컴 464p

그림 참고 )

 

(ex) Object의 인스턴스 크기를 100byte 라고 가정하고 Object를 힙에 할당한다고 사용자가 요청시 new Object(); 

컴파일러는 실제론 104byte를 할당하고 앞의 4byte를 참조 카운트를 기록하기 위해 사용한다. 일반적으로 메모리 접근시엔

앞의 4btyte 다음의 번지부터 리턴해주지만, 삭제시엔 앞의 4byte에 저장된 해당 메모리에 대한 참조수를 확인해 삭제 시킨다.

 

*********************************************************************************************************

(중요)문득 지난주에 이런 저런 플러그인을 설치한답시고(현업 수준의 적응력을 키우려고) 선생님께 이것저것 물어보다

        듣게된 조언이 떠올랐다. "내가 어떤 프로젝트를 하고 필요하기 때문에 특정 플러그인을 설치하는 것이지 플러그인이

        존재하기 때문에 이런 저런 프로젝트를 플러그인에 맞추어 하는것이 아니라는 점."

 

        목적과 수단을 혼동하지 말것! 지훈 형님의 가르침과 일맥상통하는 부분이다. 주변인들의 좋은 영향을 받아 조금이라

        도 성장해야만 한다!

 

        (sol)다음주부터 1.JSP를 실전 수준으로 프로젝트에 적용(내가 사용자에게 무엇을 웹을 통해 서비스 할것인가,어떻게

        할것인가), 2.오라클 DB 12버전 삭제후 재 설치(9~11버전)->계정 생성-> 이클립스 연동-> 프로젝트에 사용   start!

        프로젝트는 로또로 할지, 지난번 떠올린 아이디어를 실제 구체화 시켜서 진행할지.. 깊은 고민이 필요하다.

 

         maven에서 배웠듯 단지 목표(마감일)를 수립하고, goal = 결과물을 만들어낸다. 이것을 반복해 결과물을 키워간다.

         하루 일별 시간표+결과를 포함하는 단기목표를 세울 필요성이 느껴짐.(divide 퀀커 다!.. 스펠링이 머였드라.. )

        

         또 다른 대안으론, 웹 커뮤니티에 참여해 공동 프로젝트 개발에 참여해 보는 방법이 있을 것이다. (조금 더 정보

         탐색이 필요)

***********************************************************************************************************

 

 

by givingsheart 2014. 1. 1. 15:25