성장 일기/쌍용교육센터 / / 2022. 12. 27. 10:21

1227/Calendar, JCF

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/ssangyonng.git에 올려두었습니다.

 

Calendar

  - java.util 패키지에서 제공

  - abstract 클래스로 직접 객체화가 되지 않는다.

  - 단편적인 날짜 정보를 얻을 때

// 1. 객체화 

// Calendar클래스의 객체를 얻는 일을 method 호출
Calendar cal = Calendar.getInstance();

// 2. Constant를 넣어 사용
// constant로 하는 일을 표현
cal.get( Constant );

// 가독성 향상
int year = cal.get( Calendar.YEAR );

// 가독성 저하
int year = cal.get( 1 );

 

* Calendar 클래스가 제공하는 일 - get method 사용

// 년
cal.get( Calendar.YEAR );

// 월 - 월은 0월부터 시작
cal.get( Calendar.MONTH );

// 일
cal.get( Calendar.DAY_OF_MONTH );

// 오전/오후 오전이면 0 오후면 1
cal.get( Calender.AM_PM );

// 요일 - 오늘이 이번 주에 몇 번째 날인가? 일요일부터 1로 시작하여 토요일 7로 끝난다.
cal.get( Calendar.DAY_OF_WEEK ); 

// 오늘이 이번 년도에 몇 번째 날
cal.get( Calendar.DAY_OF_YEAR );

// 시간 1~12
cal.get( Calendar.HOUR );

// 시간 12~24
cal.get( Calendar.HOUR_OF_DAY );

// 분
cal.get( Calendar.MINUTE );

// 초
cal.get( Calendar.SECOND );

 

* Calendar 클래스로 다른 날짜 설정 - set method 사용

Calendar cal = Calendar.getInstance(); //시스템에 설정된 현재 날짜

// set 사용
cal.set( field, 변경할 값 );

// 년도만 변경
cal.set( Calendar.YEAR, 2021 );

// 월 변경 - 자바는 0월부터 시작하기 때문에 사람이 생각하는 월보다 1 적게 설정한다.
cal.set( Calendar.MONTH, 0 );

// 일 변경
cal.set( Calendar.DAY_OF_MONTH, 5 );

// 년, 월, 일 한 번에 변경
cal.set( 년, 월, 일 );

// 달의 마지막 날
int lastDate = cal.getActualMaximum( Calendar.DATE );

 

random

  - 난수를 뽑기 위해서 만들어진 클래스

  - java.util 패키지에서 제공

// 1. 생성
Random r = new Random();// 모든 경우의 난수 세트를 만들어 놓고 method를 호출하면 하나씩 꺼내서 제공 
( seed random : 입력되는 수에 대해 다른 난수를 생성하여 얻기 때문에 다른 난수를 예측하기 어렵다. )

// 2. 일
// 정수의 난수 뽑기 -21억 ~ + 21억 사이의 값이 나온다.
r.nextInt();

// 범위의 난수 얻기
// 음수와 양수가 나온다.
r.nextInt()%범위의 수; 
// 양수만 나온다.
r.nextInt( 범위의 수 ) ;

// 실수의 난수
r.nextDouble() * 발생하고 싶은 수;
r.nextFloat();

// 불린 난수
 r.nextBoolean();

 

JCF (Java Collection Framework)

  - 자료구조(Data Structure) : 데이터를 처리하기 위해서 고안한 형식

  - java.util 패키지에 관련 인터페이스와 클래스를 제공

  - Collection 계열, Map 계열을 제공

  - 값의 추가와 삭제가 쉽다

  - 가변 길이형(값이 추가되면 길이가 늘어나고, 값이 삭제되면 길이가 줄어든다.)

  - JDK1.5부터 Generic, autoboxing, unboxing이 제공된다.

 

* List

  - 일차원 배열처럼 생성, 입력되는 데이터가 순차적으로 입력된다. 중복 값을 저장할 수 있다.

  - 인덱스를 사용해서 방의 값을 얻을 수 있다.( 검색의 기능이 있다. )

  - 구현 클래스 : ArrayList, Vector, LinkedList

 

* Set

  - 일차원 배열처럼 생성, 데이터가 순차적으로 입력되지 않는다. 중복 값을 저장할 수 없다.

  - 방의 값을 얻을 수 없다.( 검색의 기능이 없다. )

  - 구현 클래스 : HashSet

 

* Map

  - 이차원 배열처럼 생성, 키와 값을 쌍으로 구성 => KVP ( Key Value Pair )

  - 키를 사용하여 값을 검색 ( 키는 유일하고, 값은 중복 가능 )

  - 구현 클래스 : Hashtable, HashMap등 제공

 

List

- interface : 구현클래스가 반드시 구현해야 할 일의 목록만 가진다.

- 중복값을 저장할 수 있으며, 검색의 기능이 있다.

 

* ArrayList

  - 값을 순차적으로 저장할 때 주로 사용하고 속도 빠름

    (Multi Thread에서 동시접근 가능 동기화x)

 

* Vector

  - 값을 순차적으로 저장할 때 주로 사용하고 속도 느림 

    (Multi Thread에서 동시접근 불가능 동기화)

 

* LinkedList

  - 값을 이전의 값 사이에 넣어서 사용할 때 주로 사용

// 1. 생성
// <> : Generic이라고 함
ArrayList <E> al = new ArrayList<E>();  
List<E>al  = new ArrayList<E>();

 

Generic

  - JDK1.5부터 지원되는 기능

  - 입력되는 데이터형에 대한 제한을 설정하는 것( 기본형 데이터형은 사용할 수 없다. )

  - JDK1.4까지는 JCF에 Object을 할당할 수 있다. => 모든 객체를 값으로 저장할 수 있다.

 

* Generic 사용 안 할때

// 1. 생성
List list = new ArrayList();

// 2. 값 추가
list.add( 값 );

// 3. 값 얻기
list.get( 인덱스 );

 

* Generic 사용 할 때

// 1.생성 - 방에 특정 데이터형만 입력받도록 설정
List<E> list = new ArrayList<E>();

// JDK1.7부터는 생성하는 쪽에 Generic의 데이터형을 생략할 수 있다.
List<E> list = new ArrayList<>(); 

// 기본형 데이터형인 경우 Wrapper Class로 Generic을 설정
// Generic은 동일하게 설정해줘야 한다.
List<String> list = new ArrayList<String>();
List<Integer> list  = new ArrayList<Integer>();

 

autoboxing

  - JDK1.5부터 추가된 기능

  - JDK1.4까지는 객체만 저장할 수 있었음

  - JCF에 기본형 데이터형을 입력하면, Compiler가 기본형 데이터형에 대응되는

    Wrapper Class를 선택하여 객체로 만들어 추가해주는 기능

list.add( 10 );// JDK1.4는 error발생 -> autoboxing을 지원하지 않음

list.add( 10 );
// JDK1.5부터는 autoboxing을 지원
// list.add( new Integer( 10 ) );와 같은 문장
// JDK1.9부터는 Wrapper class의 생성자가 비추천으로 변경
// list.add( Integer.valueOf( 10 ) );와 같은 문장으로 변경

  - wrapper class : 값만 사용할 수 있는 기본형 데이터형을 객체로 만들어 다양한 기능을

    사용할 수 있도록 만든 클래스 int i = 10; i변수를 사용하면 10이라는 값만 사용한다.

Integer = new Integer(10);// i 객체는 Integer class가 제공하는 다양한 기능을 사용 가능

 

Unboxing

- JCF에서 값을 얻을 때 Wrapper class가 들어 있다면 기본형 데이터형으로 변환되어 나오는 것

list.add(10);

int i = list.get( 0 ); //  int i = ( (Integer)list.get(0) ).intvalue();로 자동으로 바꿔줌

 

List 사용

// 1. 생성
List<String> list = new ArrayList<String>();

// 2. 값 할당 - Generic으로 설정된 데이터형만 입력 가능
// list의 크기가 자동 증가( 가변 길이형)
list.add( "안녕" );
list.add("java");
list.add("안녕"); //중복데이터 저장 가능

// 3. 방의 크기( 방의 개수 )얻기 => 일괄 처리
list.size();

// 4. 방의 값 삭제
// 특정 방의 값 삭제
list.remove( 인덱스 );
// 중복값이 있는 경우 왼쪽에서 오른쪽으로 진행하면서 같은 값이 있으면 삭제
// 중복 값이 있는 경우에는 처음 값 삭제하고 종료
list.remove( 값 ); 

// 모든 방의 값 삭제 - 방의 값이 삭제되면 리스트의 크기가 줄어든다.
list.clear(); 

// 5. 배열로 복사( List의 값을 배열로 보내는 것 )
list.toArray( 배열명 );

// 일괄처리 - List는 index가 0번부터 존재
for( int i = 0, i<list.size(); i++ ){
list.get(i);
}

//향상된 for문
for( 데이터형 변수명 : list ){
변수명 
}

 

 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

1229/AWT, Swing  (0) 2022.12.29
1228/Set, Map  (0) 2022.12.28
1226/문자열, 날짜 클래스  (0) 2022.12.26
1223/클래스 사용  (0) 2022.12.23
1222/Override, Interface  (0) 2022.12.22
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유