basic/java 이론

day17 - 제네릭 기법, [java API] Math, Calendar, Date, Collection Class / ArrayList<E>, Vector<E> Class

못지(Motji) 2021. 5. 17. 16:19

java.lang Pakage

Math Class

📑 java api 바로가기 ▸ Math

• java.lang 패키지에 있는 클래스

• 모든 메소드는 static 타입으로 바로 사용가능

✔ 주요 메소드

리턴타입 메소드명 설명
static double abs(double a) 절대값 리턴
static double cos(double a)  
static double sin(double a)  
static double tan(double a)  
static double ceil(double a) 올림
static double floor(double a) 내림
static double random()  
static long round(double a) 반올림
static long sqrt(doubel a) a의 제곱근 리턴

java.util Package

Calendar Class

📑 java api 바로가기 ▸ Calendar

• java.util 패키지에 있는 추상클래스

• 년, 월, 일 ,요일, 시간, 분 초, 밀리초 등 get(), set() 메소드를 이용하여 저장하거나 알아낼 수 있는 클래스

• 1970.1.1.0.0.0을 기준으로 계산해서 나옴

• 추상클래스여서 객체 생성 불가 > getInstance() 얻어서 사용 > 현재 날짜와 시간로 가져온다

 

✔ Calendar의 get(), set()에 사용되는 상수 (앞에 Calendar.YEAR 이렇게 클래스명 붙음)

YEAR 년도
DAY_OF_MONTH 한달의 날짜
MONTH 달 ( 0 ~ 11)
DAY_OF_WEEK 한주의 요일
HOUR 시간 ( 0 ~ 11) *12시는 0시
AM_PM 오전 오후
HOUR_OF_DAY 24시간을 기준으로한 시간
MINUTE
SECOND
MILLISECOND 밀리초 ( 1000이 1초)

✔ GregorianCalendar 클래스

1970.1.1.0.0.0 기준으로 365.25일 4년에 한번씩 윤달 있음

%100 == 0 || %4 ==0

Date class Class

📑 java api 바로가기 ▸ Date

• 단일클래스 날짜 관련 클래스

• 1900.1.1.0.0.0 기준으로 / 1970.1.1.0.0.0 기준으로

Collections Class

📑 java api 바로가기 ▸ Collections

•  JDK는 소위 자료구조 과목에서 배우는 많은 자료 구조들을 컬렉션으로 만들어 제공

• 제네릭이라는 기법으로 구현

• 컬렉션은 배열이 가진 고정크기의 단점을 극복하기 위해 객체들을 쉽게 삽입, 삭제, 검색 할 수 있는 가변 크기의 컨테이너다.

• 배열 vs 컬렉션 : 가변크기로 객체 수 염려할 필요 없으며 중간 객체를 삭제시 자동으로 위치를 옮겨준다.

 

✔ 컬렉션을 위한 자바 인터페이스와 클래스

[ Collection 상속, 단일 클래스의 객체만 다룸]

  • Vector, ArratList : 가변크기의 배열
  • LinkedList : 노드들이 링크로 연결되는 리스트
  • Stack : 스택
  • HashSet : 집합

[ Map 상속 ]

  • HashMap : 키와 값의 쌍으로 이루어진 데이터 저장하는 컬렉션

제네릭(generics) 기법

• 컬렉션은 제네릭이라는 기법으로 만들어짐. JDK 1.5부터 도입

컬렉션 클래스 이름에 <E> <K> <V> 등이 포함 > 타입매개변수(generic type)

💡

E : element 요소

T : type

V : value

K : key

✍🏻 ex)

Vector<Integer> > 정수만 저장하는 벡터

Vector<String> > 문자열만 저장하는 벡터

Vector > 타입 상관없이 모든 타입 저장 가능

 

✔ 특징

  • 특정 타입만 다루지 않고 여러 종류의 타입으로 변신할 수 있도록 를 사용
  • 단, int,  char, double 등 기본타입으로는 제네릭 사용불가 > Integer, Character 등 객체로 제네릭 지정
    > 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있도록 클래스와 함수들을
    일반화시켜 제네릭 함수와 제넭 클래스를 만들고 그것을 이용해 개발자는 원하는 데이터 타입으로
    구체화시켜 함수나 클래스 코드를 찍어내듯이 생산하는 기법

✍🏻 Ex)

class Stack<E>{
	...
    void push(E element) {...}
    E pop() {...}
	...
}
// E에 대한 구체적 타입을 지정하면, 지정된 타입만 다룰 수 있는 구체화된 스택이 된다.
// E로 써놓은 부분이 자동으로 변경됨
// 정수 스택
new Stack<Integer>();
void push(Integer element) {...}
return Integer pop(){...}
// 문자열 스택
Stack<String>
void push(String element){...}
return String pop(){...}
// 제네릭타입 생략
Stack
void push(Object element){...}
return Object pop(){...}
// > Object로 리턴되면 실제 객체에 따라 형변환 해야함

ArrayList<E> Class **자주씀

📑 java api 바로가기 ▸ ArrayList<E>

• java.util 패키지에 포함

• 가변적 배열 구조, 삽입되는 요소의 개수에 따라 자동 크기 조절

• 요소 삽입/삭제에 따라 요소들의 자리 자동 이동

 

✔ 주요메소드

리턴타입 메소드명 설명
boolean aadd(E element) 맨 뒤에 element 추가
void add(int idx, E element) index에 element 추가
void clear() 모든 요소 삭제
boolean contains(Object o) o를 포하하고 있으면 true 리턴
E get(int idx) idx의 요소 리턴
int indexof(Object o) o의 idx 번호 리턴
boolean isEmpty() ArrayList가 비어있으면 true
E remove(int idx) index 요소 삭제
boolean remove(Object o) o와 같은 첫번째 요소 삭제
int size() ArrayList 내 요소의 개수 리턴(저장된 데이터 수)
Object[] toArray() 모든 요소 포함한 배열 리턴 (배열로 변환)

✔ 객체 생성

ArrayList<타입매개변수> 참조변수명 = new ArrayList<타입매개변수>();

Vector<E> Class

📑 java api 바로가기 ▸ Vector<E>

• java.util 패키지에 포함

• 가변적 배열 구조, ArrayList와 거의 동일

• ArrayList<E>의 차이점은 벡터는 스레드간에 동기화지원 해줌

-> 다수의 스레드가 동시에 ArrayList에 요소 삽입/ 삭제시 데이터 훼손 우려되지만 Vector는 동기화 된 상태에서 스레드들이 접근하므로 회손 안됨

 

✔ 주요메소드

타입   설명
boolean add(E element) 맨 뒤에 element 추가
void add(int idx, E element) index에 element 추가
void clear() 모든 요소 삭제
boolean contains(Object o) o를 포하하고 있으면 true 리턴
E get(int idx) idx의 요소 리턴
E elementAt(int idx) idx의 요소 리턴
int indexof(Object o) o의 idx 번호 리턴
boolean isEmpty() Vector가 비어있으면 true
E remove(int idx) index 요소 삭제
boolean remove(Object o) o와 같은 첫번째 요소 삭제
int size() Vector내 요소의 개수 리턴(저장된 데이터 수)
Object[] toArray() 모든 요소 포함한 배열 리턴 (배열로 변환)
int catacity() 저장 용량 리턴

✔ 객체 생성

Vector<타입매개변수> 참조변수명 = new Vector<타입매개변수>();