국비지원학원/Java

34일차

초코맛 2018. 12. 6. 21:57
반응형
*자주 사용하는 클래스들
  • java.util package에 존재

-문자열 관련 class들
  • String, StringBuffer, StringBuilder, StringTokenizer
  • => java.lang                                   =>java.util
-수학 관련
  • Math
  • =>java.lang
-날짜
  • calender, Date
  • =>java.util
-formatter
  • SimpleDateFormat, DecimalFormat
  • =>java.text
-지역
  • Locale
  • =>java.util
-난수
  • Random
  • =>java.util

<21일 변수부터..
<패키지는 폴더와같고 비슷한,동일한 일을 하는것을 묶기위해 만듦. 
<lang은 자동으로 추가되어 import하지 않아도 된다.
<StringBuffer와StirngBuilder는 heap에 바로 저장하여 변경시 원본 문자열이 변경되고, 같은문자열을 여러개 가진다.
<자바는 느린게 장점이자 단점.

String : 짧은 문자열/ 반면에 얘네는 긴문자열 사용할 때에 

*StringBuffer, StringBuilder
  • 메모리에 직접생성됨.
  • buffer는 multi thread에서 동시접근이 불가능,동기화처리 가능/ builder는 multi thread에서 동시접근이 가능, 동기화처리 불가능
  • 사용법)
    • 1.생성) 
StirngBuffer sb = new StringBuffer();
<new가 들어감으로 JVM의 stack에 sb와 주소가 들어가고 heap에 값이 들어간다.
    • 2.값을 덧붙임)
값=정수,실수,문자,문자열,boolean,,,
<현재주소의 마지막번째에 덧붙이는 것(append)->넣을때는 정수인데 가서 붙을때는 문자열이된다.
sb.append(10);
sb.append(12.5);
=>heap에 10102.5
sb.append('A');
=>heap에 10102.5A
<method가 값을 반환할때 이 자체가 값이 되어 가변값일을 한다.
sb.append("안녕").append("12월").append(5);
<안녕까지가 sb가되고, 또 12월까지가 sb가 되고, 해서 메소드 체인으로 사용이 가능하다.
    • 인덱스검색)
indexof(문자를 넣으면 앞에서부터 가장먼저 찾아지는 시작인덱스를 알려준다,단 0부터시작.)
lastIndexOf(끝부터~~)
    • 인덱스에 해당하는 "문자"얻기)
charAt(3)
    • 자식문자열 얻기)
subString(시작,끝인덱스+1)
    • 문자열 삭제)
delete
    • 3.문자열로 반환
sb는 객체지 문자열이 아니니까, 문자열로 받아낼때 toString()
: 원래 object에 있는 메소드(객체의 주소와 문자를 반환하는 ) 것을 오버라이딩하여 시작부터 끝까지 문자열로 바꾸어 뽑아내는 일을 하게 함.
String s= sb.toString();
equalse로 비교해본다?
    • 4.값을 삽입
sb.insert(index, 값);    <원하는 위치에 어떠한 값이던.
반환하는건 객체. 그래서 체인형으로도 쓸수 있는데, 바로바로 변경되어 원하는위치가 아닐수도 있기때문에 잘 쓰지 않는다.
    • 5.문자열의 순서를 뒤집을때 쓰는 method
reverse() : 뒤집은 문자열을 내어준다.
sb.reverse();
<메소드가 buffer와 builder둘다 똑같이 사용됨.. 단지다른건 동시접근..! 속도 때문에 builder로 많이 사용한다.
<String 과 다르게 대소문자를 반대로 소대문자.. 로 바꾸어줄수는 없다.
 


String : 짧은 문자열/ 반면에 얘네는 긴문자열 사용할 때에 
  • "오늘은..................글자수에 상관없이 쌍따옴표로 시작해서 쌍따옴표로 끝나는것";
  • 긴문자열 : "안"+ "녕" //연산이 들어가 더붙으면 긴 문자열이 된다.  => buffer나 builder가 유리
  • +연산이 붙으면 buffer나 builder로 무조건 바뀌어버린다.
  • 문자열에 +연산을 하면 Compiler가 JDK 1.5이하면 StringBuffer로 처리하고, JDK 1.5이상 이라면 StringBuilder로 처리한다(어제글)
  • String에 +쓰지 않는다! 속도문제
 
▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼
 


*StringTokenizer
  • <while의 특성을 아주잘 쓰게된다.
  • Stirng은 짧은 문자열을 다룰때, 위의 두개는 긴 문자열을 다룰때.
  • 문자열을 자를때 사용한다.(split은 배열이 나오지만 얘는 나오지 않는다.)
  • java.util.packate에서 제공하여 import해주어야 사용할수 있다.
  • 문자열을 짧은 한 마디로 구분할 때 사용.
  •                 =>token
  • 사용법)
    • 포인터를제어하는 클래스?(실제값이 나한테 없고 제어권만 받아 사용하는 것)
    • 이때의 포인터는 뒤로만 가지 앞으로는 갈수 없다.
  • 생성)
    • Stirng s= "오늘은 수요일 입니다.";
    • StringTokenizer stk = new StringTokenizer(s);
    • 공백으로 토큰을 생성.
  • 토큰의 갯수)
    • stk.countTokens();
    • =>반환형 int
  • 토큰이 존재하는지
    • stk.hasMoreTokens()
    • =>boolean형 반환
  • 값을 얻고 다음토큰으로 포인터를 이동)
    • stk.nextToken()
    • =>반환형 String(몇개나 있는지는 모른다)=>>동네 나쁜형
    • 있는지 없는지모르지만 있다면 다뺏는다..
    • while(stk.hasMoreTokenz()){
    •        String s= stk.nextToken();
    •        //오늘은 에하나, 수요일 에하나, 입니다 에하나  있으면 있는데까지 다 뽑아낸다.
    • }//시작을 몰라 for로 돌리기엔 부적합. for로 있는데로 뽑아와라~~
    • -특정문자열로 구분된(,)문자열? (CSV)
    • new StringTokenizer(s,",");
    • "오늘은,수요일,입니다."   이면    오늘은/수요일/입니다.
    • 구분자로 사용된 문자열은 공백이 나오지 않는다.
    • -구분자를 토큰으로 취급하려면
    • new StringTokenizer(s,",",true(보호)|false(버림));
    • 오늘은 , 수요일 , 입니다.  다 가진다.
    • split보다 훨신 강력하다.  [.]대괄호를 붙여야만이 보호되어 나올수 있기때문에.
    • or기능이있어 "" 안에 여려개를 구분않고 넣어도 그것들로 다 잘 잘려져 나온다.
 
 
 

*Math class
  • 생성자가 없어(private 접근자가 붙어)보이지않아 인스턴스화를 할수 없는 클래스이다.
  • 저장한값을 객체에 저장하지 않고 계산해서 내어줌.
  • instance 메소드 vs static메소드를 만드는 기준은? 값을 어디에 저장하고 쓰는지,,, 
  • 객체에 저장하고 그런일이 하나도 없다.

  • 수학적인 일을 할 때 사용하는 class
  • 객체를 생성하여 사용하는 클래스가 아니다. 사용자가 입력한 값을 하나도 저장하지 않음. 그때그때 계산하여 내어줌.
  • Oracle을 배웠을때 배운 함수랑 동일한 부분이 많음.
  • method만 호출하여 사용하는 클래스
  • 절대값 구하기
    • Math.abs(정수);=>절댓값.
  • 반올림
    • Math.round( )
    • 무조건 소숫점 이하 처음자리에서 반올림한다.
    • 오라클보단 기능이 떨어짐.
  • 올림
    • Math.ceil()
    • 0은 올리지 않는다.
  • 절삭하는 mehtod는 없다.
  • (int)로 형변환(casting)해...절삭...
  • 내림
    • Math.floor()
    • 반환형은 double
  • 난수
    • Math.random()
    • 반환형은 double 
    • 0.000000~16개    ~~~     0.9999999~16개
    • 10개의 난수를 얻으려면?
    • Math.random() 에
    • *10  =1.0,,,,,9.0 =>casting하면 1~9구할수 있다.
  • sin,cos,tan.. 도 가능.
 
 

*날짜 관련 class
  • Date, Calendar
  • 컴퓨터에서 날짜를 아는 유일한 마더보드의 시모스?CMOS? 
  • M/B-OS-JVM-Class
  • System클래스로부터 날짜 정보를 얻어서 형식을 만들어 재공하는 클래스들.
<system클래스에 위험분자..!다 죽어버림..
 
  • 시간을 얻는일 : System.currentimeMillis();-천분에 1초  반환형long 
    • 유일하게 system이 os랑 대화하는 클래스중 시간을 꺼냄.
    • 1970-01-01 00:00:00  ms으로 얻어냄...
    • Date는 한번에 보여주고 Calendar는 원하는거..?
    • 코드의 수행시간을 잴때 많이 사용.
 

  • Date, Calendar : java.util.
  • Date : 형식이 있는 날짜로 얻게됨.
    • imprt로 java.util.Date를 처리 해야하고,
    • 생성) Date d= new Date();  도 되고 long 형의 매개변수를 받는 생성자도 있긴하다.
    • Deprecated 비추천
      으로 비추천이 많음..처음에 만들었을땐 일을 잘했는데,...2000년대 밀리니엄 버그때
    • method : 비추천이 많아 paas
 

*SimpleDateFormat
  • 날짜 형식을 만들때 사용.
  • java.text패키지 에서 SimpleDateFormat 제공
  • 사용)
    • 1.생성 ) 사용할 날짜형식을 만드는 일 까지 같이 함.
    • SimpleDateFormat sdf = new SimpleDateFormat(String Pattern);
    • oracle의 tochar가 비슷한 역할을 함.
    • Letter은 하나의 정보를 얻게 되고..., 년-y, 월-M, 일-d, 오전오후-a, 시-h(12시간/H-24시간(0~23)/K(1~24)), 분-m, 초-s, 요일-E(EEEE는 요일까지)
    • 이런 letter를 반복해서 만들면 pattern
    • 자바는 y하나 넣어도 2018이 나오는데 yy 넣으면 2자가 나온다. mm쓰면 01나오지만 m쓴다고 에러나는건 아니고0빼고 1만.(d도 마찬가지) "년"월일 묶을 필요없이 그냥 써도 된다.

 
    • 2.날짜 객체 생성)
      • Date d= new Date();
    • 3.날짜 객체를 넣어서 지정한 형식의 날짜를 얻는다.
      • Methods inherited from class java.text.DateFormat : 부모의 method
      • String로 내보내면 내가 지정한 형식으로 받을수 있게 된다.
      • String s = sdf.format(d);
      • (가지고 있어 관계 : has a 관계) =>둘다 다른클래스의 기능을 쓴다는 공통점.(DateFormat,Date기능을 사용)
        • 상속되면 is a (extends,impliments) /  has a
        • anonymous는 has a
 


  • Calendar  : 단일 날짜정보를 얻을때에 사용하게 됨.
    • java.util.package (import)
    • 추상클래스라 객체가 만들어지지 않는다.  =>자식클래스를 가지고 객체화
    • 자식: GregorianCalendar 자식클래스.  =>인스턴스화 하면 calendar 얻을수 있게된다.
    • 하나(단일) 날짜 정보를 얻을때 사용.
    • 객체생성)
      • Calendar 클래스가 제공하는 method
      • getInstance() : 객체를 얻어가려함.=>static
        • Calendar c = calendar.getInstance();
      • is a관계의 객체화를 가지고 
        • Calendar c = new GregorianCalendar();
        • GregorianCalendar gc = new GregorianCalendar();
        • //생성된 날짜의 정보를 가지게 된다?
    • 사용)
      • field(Constant:상수)를 넣어서 값을 얻는다.
      • 년:  c.get(Calendar.YEAR)
      • =>int형 2018
      • 월 :  c.get(Calendar.MONTH+1);//0~11월 사람이 생각하는 월보다 하나적게 나옴.
      • 일 : c.get(Calendar.DAY_OF.MONTH);
      • 요일 : c.get(Calendar.DAY_OF.WEEK);
      • 오전/오후 : c.get(Calendar.AM_PM) =>int 0(오전) ,  1(오후)
      • 시간 : hour of day,,,,(24시간)



반응형

'국비지원학원 > Java' 카테고리의 다른 글

36일차  (0) 2018.12.10
35일차  (0) 2018.12.08
33일차  (0) 2018.12.06
32일차  (0) 2018.12.06
31일차  (0) 2018.12.03