p.121

math method

절대값/부호 : abs, signum (??)

최대 최소값 : max,min

올림/버림 관련 : ceil(올림),floor(버림),

*round(반올림) - float:int, dobule:long

*rint(반올림) - dobule:double.


제곱/제곱근 관련 : pow(제곱),scalb세제곱,sqrt(제곱근),cbrt(세제곱근),

hypot( 첫번재 매개변수 제곱+ 두번째 매개변수 제곱) 

 ex) (int) Math.hypot(3, 4); =   //√25 = 5


p.127

삼각함수 : toRadians(각도->라디안), toDegrees(라디안->각도), sin, cos, tan

* 삼각함수를 쓰기위한 값들은 다 라디안으로 치환해서 사용

ex) 

double num1 = 45;

double rad45 = Math.toRadians(num1);

Math.sin(rad45);

Math.cos(rad45);

Math.tan(rad45);




p.140 제네릭 타입

E:요소(Element, 자바 컬렉션(Collection)에서 주로 사용

K:키

N:숫자

T:타입

V:값

S,U,V: 두번째, 세번째, 네번째에 선언된 타입.


p.158

ArrayList

Serializable :  원격으로 객체를 전송하거나, 파일에 저장할 수 있음.

Cloneable : Ojbect 클래스의 clone()메소드가 제대로 수행될 수 있음을 지정, 즉 복제가 가능한 객체임을 의미.

Iterable<E>: 객체가 'for-Each' 문장 사용할수 있음을 지정

Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할때의 메소드 지정

List<E> :  목록형 데이터를 처리하는것과 관련된 메소드 지정

RandomAccess :  목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘.

* List -> add , Map -> put


* length: 배열의 길이 

* size : 컬렉션 타입의 길이 확인, 객체수.?

* length() : string 글자수 check.;


- length 배열에 넣을수있는 공간의 개수,

-  size : 데이터의 개수 

데이터의 수만큼이면 보통 list.size()로 가져오겠네.(헷갈..림)



p.188

*set

 - HashSet : 순사가 전혀 필요없는 데이터를 해시테이블에 저장, *set중에 가장 빠름 (속도 ↑↑)

 - TreeSet : 저장된 데이터의 값에 따라서 정렬 (속도 ↓)

 - LinkedHashSet :  연결된 목록 타입으로 구현된 해시 테이블에 데이터 저장 / 저장된 순서에 따라서 값 정렬, (속도 ↓↓



p.77

-substring : 문자열의 일부값을 잘라냄 

  ex) substring(5) :  공백포함 6번부터 나옴

  ex) substring(3,7) : 3번째와 7번째 사이의 값이 나옴.

* 시작값이 끝값보다 크면 error

-split : 문자열을 여러개의 string 배열로 나눔


p.82

-trim : 공백 제거

if(text!=null && text.tirm().length() >0 ){

 // 공백확인 if문

}


 * replace : 교체. replace("a","b") : a->로.

 * 대소문자 구분.


* format

 - %s:string

 - %d:정수

 - %f:소수

 - %%:%


p.86 대소문자 change

 - toLowerCase : 모든 문자열의 내용 소문자

 - toLowercase(Locale locale): 지정한 지역정보에 맞추어 모든 문자열의 내용을 소문자로 변경

 - toUpperCase(): 모든문자 내용 대문자

 - toUppercase(Locale locale): 지정한 지역정보에 맞추어 모든 문자열 내용 대문자.



p.90

 -intern 메소드 사용금지.


 속도 : StringBuilder> StringBuffer

 안전성 : StringBuffer> StringBuilder


* 문자열 생성하여 더할시에는 StringBuilder

여러 쓰레드에 접근시에는 StringBuffer



p.114 시간조회

 - currentTimeLillis(): 현재시간 밀리초 단위로 리턴 - 보통 현재시간 확인.

 - nanoTime(): 현재시간 나노초 단위로 리턴. - 보통 시간측정


p.119

객체 출력시는 toString -> vlalueOf() 

*이건 나중에 많이 해봐야알듯.

7/26 

 - public : 언제든 사용 가능한 class

 - final : 있는 그대로 사용.?

 - protected :  상속받은 클래스만 사용가능

 - public static  :값 변하지 않음..

euc-kr : 한글일이 4byte

utf-16 : 6byte


문자열 길이 length (공백포함)

*ignorecase(대소문자 무시) : 해당문구가 들어간 method 대소문자 무시

compareTo : string 객체가 알파벳순으로 앞에있으면 양수 

                                       뒤에 있으면 음수

                                       같으면 '0'


특정조건에 맞는 문자열이 있는지 확인

Starts with :  매개변수 값으로 시작하는지 확인

ends with : 매개변수 값으로 끝나는거 확인

contains : 매개변수값으로 중간에 존재 유무 확인


regionMatches (boolean ignoreCase, int toffset, String other, int ooffset,int len): 매개변수로 넘어온 문자열과 동일한지 비교

 - ignorecase : true일 경우 대소문자 구분없이 값 비교

 - toffset : 비교ㅗ 대상 문자열의 확인 시작 위치 지정

 - other :  존재하는지 확인할 문자열

 - ooffset :  비교객체 시작 위치 지정

 - len : 비교할 글자수..



1
2
3
4
5
6
7
8
9
10
var param = $('#form').serializeArray();
for(var i =0; i< param.length; i++){    
    var param_name = param[i].name;
    var param_value = param[i].value;
    if(param_name == 'param_name' && param_value == 'param_value'){
        alert("");
        return false;
     }
}
 
cs


form의 serializeArray() 값을 console로 출력시 json 형태로 가져오게 되는데 이것을 과연 어떻게 하여 if문 분기를 태울까 하다가 구글링 하여 찾았음.


serializeArray의 수만큼 for문을 생성후 해당 부분의 name,value 를 찾고


예외처리. 하였음..



참고 url)

https://stackoverflow.com/questions/4236768/how-do-i-access-values-created-by-serializearray-in-jquery


참고 

1
2
3
4
5
6
7
var dataArray = $("#myform").serializeArray(),
    len = dataArray.length,
    dataObj = {};
 
for (i=0; i<len; i++) {
  dataObj[dataArray[i].name= dataArray[i].value;
}
cs





1. 게임플레이 : 화면에서 보여주는 화면관련 설정인데 중요한건 코드드라이버 부분인듯 싶다.

코드 드라이버 부분에서 방향 및 헤어핀 등 게임에서 중요한 부분을 설정을 정밀하게 할지 dirt relly 처럼 대충 할지 정하며

음성도 정할수 있다. (다만 한국어는 없음 T_T)











2. 화면표시 : 그래픽관련 설정이라고 생각하면된다. 

이 설정중 중요하게 생각되는 부분은 플레이할 모니터에 맞게  해상도및 주사율 설정

그리고 그래픽 탭에서 필요없는 부분 낮추기 ex) 관중밀도, 그림자 품질, 텍스트 필처링 

* 플레이도중 렉이 발생한다면 초목밀도 부분도 낮춰보자.!





3. 스티어링 휠 : 이부분은 G29 및 레이싱 휠 있는 분에게만 해당된다.

 -  가속, 브레이크 감도 : 페달을 밟을때 어느정도 감도일지.. 수치가 높을수록 조금만 밟아도 반응이 빨리온다.

 -  스티어링 감도 : 최대로 주면 실제차와 비슷한 느낌은 받을수 있다.


- 포스 피드백 및 진동 : 이부분 포스피드백 부분만 100%로 주고 나머지 부분은 기본값으로 설정하였다.

 




버튼할당 : 이부분도 기본값으로 주었다. 아쉬운것은 시프트 부분을 g29 shifter로 사용하고 싶은데 설정 부분이 업과 다운밖에 없어서 할수가 없었음..



그외 wrc 설정관련 했던 영상 참고 !! (화면분할 은 정말 좋은듯 !!)



1
2
3
4
5
6
7
<div>
    <input type="hidden" name="data_hidden" value="${data_hidden}">
    <input type="checkbox" id="data_check" value="Y" ${data_hidden == "Y" ? "checked=checked" : ""}></input>
    <!-- 컨트롤할 문구 -->
    <div class="check_green"><span style="font-weight: bold; color:green;">checked</span></div>
    <div class="check_red"><span style="font-weight: bold; color:red;">not checked</span></div>
<div>
cs



해당 html 에서 check box 구문이 있는데

checked 되었을때 문구 날리는 부분을 연습중.


기본 default는 체크된 상태


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
   // 체크된 상태이므로 green 문구를 날림
    $('.check_green').show();
    $('.check_red').hide();
 
    $('#data_check').on("change"function (){
        var _self = this;
        var check_val = $("[name='data_hidden']").val();
        if(check_val == 'Y'){
            $('.check_green').hide();
            $('.check_red').show();
        }else{
            $('.check_green').show();
            $('.check_red').hide();
        }
        $("[name='data_hidden']").val(function(){
            return $(_self).is(":checked") ? "Y" : "N";
        });
    }); 
 
 
</script>
cs


hidden 처리된 data 값에 따라 checked 상태를 날리며

change function에 따라서 문구를 나눠준다.



마지막 리턴값은 체크되거나 안되었을때 Y:N을 hidden 값에 넘겨줌.







현재날짜 영문달로 구하기.

1
2
3
4
5
6
        var engMonth = ["January""February""March""April""May""June",  "July""August""September""October""November""December"];
        var date = new Date();
        var year = date.getFullYear();
        var month = engMonth[date.getMonth()];
        var day = date.getDate();
        var current_day = day+"-"+month+"-"+year;
cs

달 가져오는 부분만 영문달로 수정하여 가져옴.

결과 : 30-May-2018


yyyy-mm 에서 mm부분만 저번달로 가져오기

1
2
3
4
5
        var year = new Date().getFullYear();
        var month = new Date().getMonth()+1;//1월 0으로 표시 막기.
        var lastMonth = month-1;
        if(lastMonth < 10){lastMonth = "0"+lastMonth }
        console.log("##"+lastMonth);
cs

1. 날짜가1월일 경우 0부터 시작하므로 +1을 더해줌
2. 저번달을 구하므로 기존 달에서 -1
3. 10보다 작을경우 '0'을 임의로 붙여 처리
결과 : 201804



사용하기도 편하고 보관도 편한

 휠스탠드 프로 구입기를 적어보려고 한다.


일단 구입처는 지티기어 이고

 G29는 중고나라로 구매하였다.

(다행히 판매자를 나름 잘만난듯.!!)



http://gtgear.co.kr/shop/shopbrand.html?xcode=030&mcode=002&scode=001&type=Y


실제 가격은 189,000원이다 (로지텍+트러스트 호환) 

이베이나 다른 해외 쇼핑몰로 알아보면 더 싸게 구했을지도 모르겠으나.

 일단 휴가때 급하게 거치하고 싶은마음에 일단 질렀다.


1. 언박싱


설명서와 구성품이 있으나 트러스트와 로지텍 호환용이라 모든 나사와 거치대가 필요하지는 않는다.


조립순서는 1. 발판  2.기어봉  3. 핸들순서


1. 발판


먼저 스탠드를 세워 보면 위의 구성처럼되어 있다. 

사진처럼 먼저 페달을 올린다.

수건이나 다른 비닐같은걸로 기스가 안나게 감싸주고.

세운후 나사를 박아준다.



이정도 길이의 나사이며 다른길이의 나사로 돌리면 헛돌게 되니 주의하자.




이런형태로 되어야 나중에 선정리할때 편하다.



두번째로 무언가에 기댈때가 있다면 

저렇게 세운다음에 하는것도 나쁘지 않다. 


저게 고무를 고정시키지 않으면..

 자꾸 흘러 내려와서 종이테이프같은걸로

 가볍게 고정시킨후 조였다.


방법은 많으니 참고하여 하길!!


2. 기어봉 장착!



해당 막대기를 찾자.





막대기를 해당 모양 처럼 고정시켜준다. 그다음에 기어봉 고정하면 끝.

기어봉 아래에 고정시켜주는 나사를 찾아서 조여주고 연결부위도 조여주면된다.




3. 핸들고정


해당 위치 부분에 선을 먼저 연결후 그다음에 선을 감아준다.





대략적인 길이를 보고 위에처럼 나사를 두군데 조여주면 핸들은 고정이 끝난다.


ps. 

페달 부분조이는데 생각보다 오래걸렸다.

 집도 좁고 해서 이리저리 하다보니 오래걸리고 쉬프트도 중간에 나사 반대로 꽂아서 풀엇다 다시꽂고 

핸들도 선 정리 잘못해서 다시 풀었다가 하고.. 

이글을 보고 휠스탠드 프로를 구매하신다면 참고하여 좀더 빠른 시간에 조립하기를 원하며


좀 아쉬운것은 핸들 조정하는 세로 고정하는 부분이 쭉 위로 당기면 빠지는데 

이부분은 안빠지게끔 설계를 하였다면 더욱 좋았을텐데 아쉽다.


참고영상 유투브 !




excel down load 기능을 구현한 api는 많을지 모르지만 검색했을때는 poi를 많이 사용하고 있었고.


현재 내가 다니는 회사도 poi로 구축되어 있는데 하다보니 간단한 부분은 정리해두면 좋을듯 하여 적어본다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  int iRow = 0// 세로출 정의
  int iCol = 0// 가로줄 정의
  Map params = parameters.getMap();
 
 
  Map<StringString> testList =  "DB QUERY LIST";
  
  private String excel_location = PmisConfig.get("excel.template.home");

//WEB-INF 쪽에 EXCEL TEMPLATE경로 지정
  String tmphome = Strings.defaultValue(excel_location, context.getRealPath("excel 양식경로"));  
  String file_name = Strings.defaultValue(params.get("file_nm"), "FILE명"); // 
  FileInputStream fis = new FileInputStream(tmphome + "/" + file_name);
 
  XSSFWorkbook book = new XSSFWorkbook(fis);
  XSSFSheet sheet = book.getSheetAt(0); //EXCEL 시트 지정
 
  Row row = null;
  Cell cell = null
   
/*font style :엑셀 필요 시트에 사용할 STYLE 지정 */
  Font font = book.createFont();
  font.setFontHeightInPoints((short)8);
  font.setFontName("맑은 고딕");
 
 
  XSSFCellStyle cellStyle = book.createCellStyle(); //엑셀에서 사용할 스타일명 지정
  XSSFDataFormat fmt = book.createDataFormat();
 
  /*해당 지정한 스타일에 border 나 배경색 위치정도를 지정해준다.*/
  cellStyle.setFont(font);
  cellStyle.setAlignment(XSSFCellStyle.ALIGN_RIGHT); //text align 설정
  cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
 
  cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); //border 그려줄 부분 지정
  cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
  cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
  cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
  
 
  cellStyle.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);  
  cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);    //배경색 지정(Back Ground color )
  cellStyle.setWrapText(false);
  
  
  /*data 가져온훈 필요한 부분을 형변한 해준다. data type*/
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //날짜
  SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy.MM");
  DecimalFormat numberFormat = new DecimalFormat("###,###,###.0");// 금액관련 소수점 처리
  DecimalFormat numberFormat2 = new DecimalFormat("###,###");
  Calendar c = Calendar.getInstance();
cs



위의 코드는

excel 구현하기 위한 재료라고 생각하면 될듯하다.

1. sheet 순서

2. excel template 경로

3. excel에서 사용할 font 및 css 정도


이젠 엑셀을 그려보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//그리기 시작할 ROW를 선언 0부터 시작하니 잘 계산해야한다.
  iRow = 2
 //미리 어느정도 그려진 엑셀이라면 GET으로 받아온다. 
  row = sheet.getRow(iRow++);
// 새로운 데이터를 넣어야 한다면 CREATE로 생성
  row = sheet.createRow(iRow++);
  // 해당줄에 시작한 셀의 시작값 0붕터 시작.
  cell = row.getCell(0); 
  // 해당 셀의 스타일 지정
  cell.setCellType(cell.CELL_TYPE_STRING); 
// 필요 VALUE 지정
  cell.setCellValue("넣을값");
//해당셀의 스타일 지정  
  cell.setCellStyle(cellStyle);
  
  //병합(시작 row, 병합 끝 row, 시작col, 끝 col)
  sheet.addMergedRegion(new CellRangeAddress(iRow, iRow+2, iCol, iCol+3 ) );
cs


1. 셀에 data를 넣을 row 지정

2. style 및 css 지정

3. 병합.. 그런데 병합부분은 저렇게 넣으면 css가 안먹히니 미리 병합할 셀들의 css를 주어야한다.

value는 첫번째로 들어옴.


ex)


1
2
3
4
5
6
7
8
9
10
11
12
 
   cell.create(0);
   cell.setCellStyle(cellStyle);
 
   cell.create(1);
   cell.setCellStyle(cellStyle);
 
   cell.create(2);
   cell.setCellStyle(cellStyle);
 
   sheet.addMergedRegion(new CellRangeAddress(iRow, iRow+2, iCol, iCol+3 ) );
 
cs




필요 데이터를 다 생성하였다면 excel download 파일을 만들어야한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  fis.close(); 
 file_nm = "템플릿 파일명.xlsx";
        File outputFile = temporaryFileService.getNewFile(".xlsx");
        OutputStream output = new FileOutputStream(outputFile);
        
        book.write(output);
        
        contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        if (outputFile.exists()) {
            exportStream = temporaryFileService.getFileAsStream(outputFile.getName());
            file_nm = URLEncoder.encode(file_nm, "UTF-8").replace("+""%20").replace("%28","(").replace("%29",")");
            file_size = outputFile.length();
        }
        
    Cookie cook = new Cookie(name, URLEncoder.encode(value, "utf-8"));
 
 
        cook.setPath("/");
        response.addCookie(cook);
cs

fis.close: input data를 닫아줌??


1. 템플릿 파일명 지정

2. 템플릿 파일 확장자 지정

3. content Type = Excel 파일로 type 변환

if 문 : 파일명이 공란이면 + 글자가 나오고 "()" 괄호관련 특수문자가 들어가면 %28, %29로 나와서 repalce 처리.

4. cooke 생성


*기존에 구현된 excel을 수정해서 한거라 문법및 여러부분이 틀릴수도있으니.. 틀린부분은 댓글로 알려주세요.!*

1
2
3
4
// 소수 한자리까지만 표시 자동으로 소수둘째 자리에서 반올림
        DecimalFormat numberFormat = new DecimalFormat("###,###.0"); //형변환 Decimal
        numberFormat.format(Double.parseDouble('파라미터로 넘어온 String 값'))
 
cs



무언가에 값을 넣을때 저렇게 형변환하여 처리


ex) 파라미터: 1234.344444 =>쿼리에서 넘어온값.

String test1 = 1234.34444;

String test2 = query.get("test");

numberFormat.format(Double.parseDouble(test));

numberFormat.format(Double.parseDouble(test2));


결과 : 1234.4 로 나온다.


DecimalFormat 에서 소수점 자리를 처리 ###,###.0000 : 

*###뒤에 부분이 소수점 자리수.

+ Recent posts