반응형
*자주 사용하는 클래스들
-
java.util package에 존재
-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시간)
-
=>하나하나는 calendar, 형식이있는 날짜 =>SimpleDateFormat,Date
-
생성된 시점의 날짜 정보를 가진다.
-
Canendar cal = Calendar.getInstance();//2018-12-06
-
다른날의 날짜 얻기
-
cal.set(field(상수:변경할 날짜 항목),value(변경할 값));
-
년변경
-
cal.set(calendar.YEAR,2019); //2019-12-06
-
월변경
-
cal.set(Calendar.MONTH,4/*내가원하는 달보다 하나 적게(자바는0부터 시작이니까)*/); //2019-05-06
-
일변경
-
cal.set(Calendar.DAY_OF_MONTH,15); //2019-05-15
*DecimalFormat
-
숫자형식을 변경 (1000->"1,000")(정수->문자열)
-
java.text 패키지에 존재.
-
<기본생성자도 있고 객체도 만들수 있다.
-
사용법)
-
1.생성)
-
DecimalFormat df = new DecimalFormat("pattern");
-
자릿수에 비해 값을 채울때 0
-
실제 데이터가 있는것만 보여줄때 #
-
DecimalFormat df = new DecimalFormat("0,000,000");
-
DecimalFormat df2 = new DecimalFormat("#,###,###");
-
정수를 넣으면 문자열로 나오게 됨.
-
df.format(2018);=>"0,002,018" vs "2,018"
-
<오라클보다 뛰어난데, 오라클은 자릿수가 부족하면 이상한데이터가 뜨는 반면에, 자바는자릿수가 넘어가도 알아서(규칙대로?) 처리해준다.
*난수(Random class)
-
java.util package에 존재
-
다양한 난수를 뽑기 위해서 제작된 클래스.
-
<Math class는 실수로 뽑아서 연산,casting을 해야해서 불편, =>그래서 나옴
-
생성되면 모든 난수가 발생된 상태. <(단점은 패턴파악시 다음숫자가 예상가능하다. 보안취약)
-
(패턴을 분석하면 다음수를 예측할수 있다.)=>생성자를 다르게 주는 씨드랜덤을 쓰게 된다.seed Random..약간느리지만 안전..
-
<객체생성 가능!
-
사용법)
-
1.생성)
-
Random r = new Random();
-
2.난수얻기)
-
실수난수 : nextDouble()
-
0.00000~16개 ~
-
0.99999~16개
-
(int)(r.nextDouble*발생가짓수)
-
정수난수 : nextInt()
-
-21억~+2147483647
-
Math.abs(r.nextInt()%발생가짓수) //양수 얻기 위함.
-
<Overload 되어있는 nextInt(int bound)쓰는게 좋다. (음수가 안나오고 가짓수만 넣으면 튀어나와 편하다.
-
r.nextInt(5)=0~4 사이의 수중 하나가 나온다.
-
불린난수 : nextBoolean()
-
r.nextBoolean()=>True, False
*JCF(Java Collection Framework)
-
List, Set,Map
-
데이터를 다룰때 사용한다.
-
Collection 계열, Map
-
=>List, Set
-
가변길이형.(데이터를 추가하면 크기가 늘어나고, 데이터를 삭제하면 크기가 줄어든다.)
-
<메모리 사용이 효율적.
-
<오라클로 치면 배열은 char 로 고정길이형 과 비슷?
-
Generic 과 같이 사용.(JDK 1.5에서 추가된 기능)
-
java.util 패키지에서 제공
-Collection 계열
-
Collection -----(List-ArrayList, LinkedList, Vector(-Stack) Set-HashSet) <1차원배열처럼 만들어 지는 애 , (비슷)
-
Map-HashTable, HashMap <2차원 배열처럼 만들어지는 애(비슷)라 형상이 다름
-List
-
일차원 배열처럼 생성하여 사용.
-
가변길이형
-
<중복값가능 , 검색가능
-
특징 : 중복값을 저장하며, 검색의 기능이 있다.
-
데이터가 순차적으로 입력된다.
-
ArrayList, LinkedList, Vector 의 구현 class가 존재.
-Set
-
일차원 배열처럼 생성하여 사용.
-
가변길이형
-
특징 : 중복값을 저장하지 않으며, 검색의 기능이 없다. <(값을 가져올수 없어 뿌려줄수 없다.)
-
=>Iterator라는 포인터를 쓰는 객체를 사용한다(값을 자기가 가지고 있지 않음, 제어권만 가짐)
-
데이터가 순차적으로 입력되지 않는다.
-
HashSet이라는 구현 클래스가 존재.
-Map
-
이차원 배열처럼 생성.(열이 2개)
-
가변길이형이다.
-
<행은 막늘어나도 열은 2개 이다.
-
키와 값이 쌍(엔트리)으로 이루어진 데이터형(KVP)
-
키는 중복될수 없으나, 값은 중복될 수 있다.
-
데이터<K,V>(=entry)는 순차적으로 입력되지 않는다.
-
HashTable, HashMap 구현클래스가 존재.
===>JDK 1.4 까지는 Object(객체) 만 저장가능 했지만, JDK1.5부터는 모든값을 저장할수 있게 되었다.(오토박싱 지원되어서)vs 언박싱
=>기본형넣은ㅇ거 같은데 객체...오토박싱( vs 언박싱) 때문에 모든값 저장가능하게 된것.
=>적절하게 상황에 따라 적절하게 사용하여야한다. 중복,검색(가능:List, 불가능:Set),키와값의 쌍(Map) <=구분방법
-생성
-
List l= new ArrayList(); <is a 관계의 객체화 //multi Thread에서 동시접근 가능 (가능한게 더 빠르다) ==동기화x
-
List l= new Vector(); //multi Thread에서 동시접근 불가능.==동기화o
-
List l= new LinkedList(); <뭐가 객체의 다형성인? //데이터가 기존데이터 사이에 추가되는 일이 많을 때 [시작주소][값][뒷주소] 해서 다 다른 위치를 가짐.
-
<다 리스트의 자식으로 List만 알면 쓸수 있다. 단,성격에 맞게!
-
공통특징 : 데이터가 순차적으로 추가된다.
-
<interface는 상수와 추상method로 구성되는데, List를 부르면 자식이 오버라이딩한 method가 불려지겠져 그래서 자식마다 특성이 갈리는것.
-추가 : 추가하는대로 방의갯수가 증가.
-
l.add(값); //LinkedList가 가장효율적. 나머지 기능을 지원하긴 하나 속도가 많이 떨어져 권장하지 않는다.
-
l.add(index, 값); //얘도 권장하지 않는다..
-방의 갯수
-
l.size(); //=>반환형은 int
-방의 값얻기
-
l.get(index); //=>배열과 같이 0번부터시작하는 인덱스를 가짐.
-모든 방의 값얻기
-
for(int i=0; i<l.size(); i++){ //size는 method라서 ()붙여주어야한다.
-
l.get(i);
-
}
-값의 삭제 : 가변길이형이라 방의 갯수가 줄어든다.
-
l.remove(인덱스); //지워지면 뒤의 방들이 땡겨진다.
-
l.remove(값);
-모든방의 값을 삭제
-
l.clear();
-List의 값을 배열로 복사 : Generic이 된경우에만 복사가능
-
l.toArray(리스트의 값을 복사할 배열명);
====>모든자식이 다 사용할수 있다. 공통 사용, 특징만 알고 있어라~!~!
List l = new ArrayLsit(); stact에 l이 올라가고 시작주소만 갖는다. heap에 시작주소만이 / 배열은 5개면 5개가 들어가고 그시작주소가 들어간다.
//Capacity : 싸이즈가 아니라 값이 들어가 있는것 까지의 값... over되도 들어간다.?
추가
l.add(12); [12]
l.add(12.32); [12][12.32]
l.add('A');
l.add("정택성");
l.add(new Date());
//정수,실수,문자,문자열,객체 까지 다 들어간다. 막막 담을수 있다..=>장단점가짐.
크기
l.size() =>5
일괄처리
for(int i=0; i<l.size(); i++){
syso(i.get(i));
}//막넣고 꺼낼수 있는데,,, 이게 좋은걸까? 안좋아여...물병에 물만 넣는게 아니라 다른것 넣은 느낌. 쓸때 문제가 생겨~
=>첫값만 보고 *10을 하면 문자열에서 Error발생하게 된다..
=>이문제때문에 Generic이 나옴.(입력데이터의 제한)
List<E> l = new ArrayList<E>();
*Generic
-
JDK 1.5에서부터 추가된 기능.
-
JCF에서 입력데이터형의 제한을 설정할 때 사용.
-
=>단일 데이터형으로 구성(꺼냈을때 문제가 발생하지 않도록)
-
기본형데이터형으로는 설정할수 없다.(참조형은 다 가능)
-
만약 기본형을 넣고싶으면 List<Integer> 로 넣어야 가능하다. =>wapper class로 사용.
-
문법)
-
<<<<JCF또는클래스명(다는아님)<데이터형>
-
<데이터형>
-
JCF클래스명<데이터형>
-
List<Integer>
-
Set<Integer>
-
Map<String,Byte>
List<Integer> l = new ArrayList<>();
JDK 1.7에서 부터는 객체생성하는쪽에 Generic은 데이터형을 생략할 수 있다.
List<Integer> l = new ArrayList<Integer>();
그 전버전들은 넣어주어야 했다.
//방하나가 Integer클래스?의 방?
l.add(new Integer(10));
*wrapper : 기본형 데이터형을 객체로 생성하여 사용하는 클래스.
int i=10;//값자체가 끝 기능을 가질수 없음.
Integer i = new Integer(10); //i.method();로 불러 Integer클래스의 일을 더할수 있게 된다.
특징=>값에 대해서 method를 호출하여 일을 더 할수 있다.
l.add(20); => 원래는 Error가 나야하는데 들어간다 (오토박싱=autoboxing)
=>l.add(new Integer(20));//이 되는것.
*autoboxing : JDK 1.5에서 추가된 기능으로 JCF에 기본형 데이터형으로 값을 추가하면, 실행기가 wrapper클래스로 객체를 생성하여 값을 추가하는 것.
=>이상한 값은 안돼고 같은 형 int 형이 들어왔을때 해주는것.
<값을 넣을때
l.get(0)=> Integer (들어간것 그대로)=>객체라 연산자(*10)이 붙으면 객체가 가지고 있는 값으로 풀어서 반환해준다.(언박싱,JDK1.5 값을 꺼낼때.)
*unboxing : JDK 1.5에서 추가된 기능으로 JCF에 값을 얻으면 wrapper class인 경우 wrapper class 객체가 가지고 있는 값으로 풀어서 반환하는 것.
=>눈에 잘 보이지 않는다. Generic / autoboxing / unboxing 다 쓰이는데 Generic만 눈에 보여 착각하기 쉬움
Integer i = new Integer(10);
i.toString() 문자열?을 정수로 얻기..10은 instance값
i.IntValue=>int
=>wrapper class가 원래 가지고 있던 값으로 뱉어낼때?
l.get(0)*10
==(l.get(0)).intValue()*10; //이 되는것.
*Stack
-
LIFO(Last Input First Output : 마지막으로 입력된 제이터가 먼저 나오는 자료구조.)를 구현한 클래스.
-
Vector의 자식클래스.(뿌리는 List)
-
<List와 vector의 기능을 쓸수는 있지만 FIFO(Fisrt Input First Output : Queue/배열,List의 자식들 다.) 라서 stack의 특징을 잃어 버린다. (stack이 아니게 된다)
-
부모의 기능을 사용하지 않는다.(못쓰는게 아님)
-
<저장하는 값을 item이라고 한다?
-
사용법)
-
is a 관계의 객체화를 하지 않는다. (자식으로만 만든다) 그 순간 List가 되지 stack이 아니다.
-
Stack<String> stk = new Stack<String>();
-
값넣기)
-
stk.push(값);
-
stk.push("정택성"); 하나를 item..
-
stk.push("이재현");
-
stk.push("김정운");
-
stk.push("김정윤");
-
컵에 쌓인다.
-
Stack Over Flow (크기가 있고, 그 크기를 넘치면 발생함.)
-
StackOverFlow 예외가 발생 <제일많이 발생하는 예외로 싸이트가 존재.
-
OKJSP 국내 OKKY
-
크기
-
stk.size();
-
값 얻기 : 얻은 값은 Stack에서 꺼내지기 때문에 다음번에는 사용할 수 없다.
-
stk.pop(); =>Generic의 형태로 나옴.
-
비었는지
-
stk.empty(); =>비었으면(item이 없으면) true, 있으면 false
-
모든 item꺼내기
-
for 는 index가 필요없을 뿐더러 0번부터인지 알수 없어서 ㄴㄴ
-
따라서 while
-
//while(stk.empty()){//없었을때 true니까 not!
-
while(!stk.empty()){//
-
stk.pop(); // =>김정윤,김정운,이재현,정택성
-
}
=>history 할때 잘쓰인다 (ctrl+z / ctrl+y) 어떠한 상태를 저장하고 싶을때.
반응형