본문 바로가기
  • 실행력이 모든걸 결정한다
Spring 사전 준비/JAVA

[JAVA 간단정리 5] API(Timer)/Wrapper/예외처리/Collections

by 김코더 김주역 2020. 11. 17.
반응형

API

5. Timer
시간 간격을 두고 task를 실행시키는 클래스

-task 클래스-

import java.util.TimerTask;
public class Task1 extends TimerTask {
    @Override
    public void run(){} //추상 메소드
}

public class Task2 extends TimerTask {
    @Override
    public void run(){} //추상 메소드
}

-task 실행 클래스-

import java.util.Timer;
public class Etask {
    public Etask() throws InterruptedException { //생성자
        Timer timer = new Timer(true);
        TimerTask t1 = new Task1();
        TimerTask t2 = new Task2();
        timer.schedule(t1,2000); //2초 후 실행
        timer.schedule(t2,3000); //3초 후 실행
        Thread.sleep(4000); //task들이 모두 끝날 때까지 기다려주기 위해 이 "소스코드만" 4초 중단
    }
}

 

Wrapper

기초 데이터를 객체 데이터로 변화시키는 클래스
byte -> Byte
short -> Short
int -> Integer
long -> Long
double -> Double
float -> Float
boolean -> Boolean
char -> Character

사용 예)
Integer integer = new Integer(5);
int a = integer.intValue();

 

예외처리

프로그램에 문제가 발생했어도 다른 작업을 할 수 있게 하는 것.

1. try ~ catch

try{
    //문제가 발생할 수 있는 코드
} catch(NumberFormatException n){
    //문제가 발생했을 시 실행할 코드
} catch(Exception e){ //상위 예외를 아래로 둔다.
    //문제가 발생했을 시 실행할 코드
} finally {
    //오류 검사 완료 후 무조건 실행할 코드
}

------------------------------------------------------------------------------

2. throws

try ~ catch를 쓰지 않았는데 예외가 발생했어도
throws를 이용하여 자신을 호출한 메소드에 오류를 넘겨주는 방법도 있다.

public class Tasks{
    public Tasks(){
        task3();
    }
    
    public void task1() throws Exception{
    	//여기서 예외가 발생했다고 가정
    }
    
    public void task2(){
        try{
            task1(); // task1에서 오류를 받았음
        } catch (Exception e){
        	//예외 처리 (최종적으로 여기 있는 소스가 실행됨)
        }
    }
    
    public void task3(){
        try{
            task2();
        } catch (Exception e){
        	//예외 처리 (여기까지 오지 않음)
        }
    }
}

 

Collections

자바에서 편리를 위해 제공하는 자료구조 클래스들이다.
*요소가 주소값으로 되어있다. 

1. List

1) ArrayList
배열과 비슷

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("Hello1");
arrayList.add("Hello3");
arrayList.add(1,"Hello2"); //["Hello1","Hello2","Hello3"]
String s = arrayList.get(1); //Hello2
arrayList.set(2,"Hi"); //Hello3 -> Hi
int size = arrayList.size(); //3
arrayList.remove(0); //Hello1 x, size : 3 -> 2
arrayList.clear(); //size : 2 -> 0
arrayList = null;

2) LinkedList
ArrayList와 비슷, 인덱스 없이 요소들끼리 앞뒤로만 연결되어있음
데이터 삽입/삭제가 빠르지만 검색이 느림

3) Vector
ArrayList와 비슷하지만 속도가 떨어지지만, 멀티스레드 환경에서는 안전하여 많이 쓰임.

------------------------------------------------------------------------------

2. Map(Hash)
key, value 쌍을 모아둔 자료구조
*Hash : 임의의 길이의 입력 메시지를 고정된 길이의 출력값으로 압축시킨 것

import java.util.HashMap;
import java.util.Iterator; //반복자

메인 클래스

HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
hashMap.put(1,"Apple");
hashMap.put(2,"Banana");
hashMap.put(3,"Grape");
String s = hashMap.get(3); //Grape
hashMap.remove(1); //Apple x, size : 3 -> 2
hashMap.clear(); //size : 2 -> 0
//모든 Key값을 순회
Iterator<Integer> iterator = hashMap.KeySet().iterator();
while(iterator.hasNext()){
    String s = hashMap.get(iterator.next());
    //s 활용
}

------------------------------------------------------------------------------

3. Set(Hash)
데이터의 순서가 없는 자료구조, 중복값은 허용하지 않음.

import java.util.HashSet;

메인 클래스

HashSet<String> hashSet = new HashSet<String>();
hashSet.add("Kim");
hashSet.add("Lee");
hashSet.add("Park");
hashSet.add("Choi");
hashSet.remove("Kim"); //Kim x, size : 4 -> 3
//iterator을 사용할 수도 있다. 사용법은 Map과 동일. (set.iterator())

------------------------------------------------------------------------------

4. Hash 관련 자료 구조에서 객체 찾는법

HashSet<Fruit> hashSet = HashSet<Fruit>();
hashSet.add(new Fruit("Apple",6));
Fruit fruit = new Fruit("Apple",6));
hashSet.remove(fruit);

위 코드에서 remove를 썼음에도 hashSet의 요소(객체)는 지워지지 않는다.
이유는 두 객체의 주소가 일치하지 않기 때문이다. (요소가 주소값)
이와 같은 문제를 해결하기 위해 Fruit 클래스에 hashcode를 계산하는 메소드들을 재정의 해준다.

Override 자동완성 : 상단메뉴 Source -> Override/implement Methods

@override
public String toString(){ //이 객체를 문자열으로 나타내는 메소드
    //return 사용자가 표현하고자 하는 문자열(*형식 고정*)
    //문자열이 같으면 해쉬코드도 같다는 성질을 이용하는 것이다.
}

//equals함수가 true를 반환해야 최종적으로 동작이 이루어진다.
@override
public boolean equals(Object obj){
    String compareValue = obj.toString();
    String thisValue = toString();
    return thisValue.equals(compareValue);
}

@override
public int hashCode(){
    return toString().hashCode();
}

 

 

반응형

댓글