728x90
  • HashSet
  • TreeSet
  • SortedSet

메소드

컬렉션 인터페이스의 메소드와 동일함

Set(집합)과 관련된 메소드는 컬렉션에 변화가 있으면 true, 없으면 false를 반환

  • addAll - 합집합 : 지정 컬렉션의 객체들을 컬렉션에 추가
  • containsAll - 부분집합 : 지정 컬렉션의 객체들이 컬렉션에 포함된지 확인
  • removeAll - 차집합 : 지정 컬렉션의 객체들을 삭제
  • retainAll - 교집합 : 지정 컬렉션의 객체만 남기고 나머지를 삭제

'Java > Notion' 카테고리의 다른 글

List - ArrayList  (0) 2023.04.30
컬렉션 프레임워크 - Map  (0) 2023.04.30
컬렉션 프레임워크 - List  (0) 2023.04.30
컬렉션 프레임워크  (0) 2023.04.30
형식화 클래스  (0) 2023.04.30
728x90
  • Vector
  • ArrayList
  • LinkedList
  • Stack

메소드

컬렉션 인터페이스가 가지고 있는 메소드도 상속 받기 때문에 사용가능

add(index, element), addAll(index, collection), remove(index)

지정 인덱스에 객체나 객체들을 추가 혹은 삭제(삭제 객체 반환)

get(index), set(index, element)

지정 인덱스의 객체를 반환하거나 저장

indexOf(object), lastIndexOf(object)

지정된 객체의 위치를 첫번째 요소부터 찾거나 마지막 요소부터 찾아서 인덱스를 반환

sort(Comparator)

지정 비교자로 List를 정렬

subList(시작인덱스, 끝인덱스)

시작 인덱스 부터 끝 인덱스 전까지에 있는 객체를 반환

'Java > Notion' 카테고리의 다른 글

컬렉션 프레임워크 - Map  (0) 2023.04.30
컬렉션 프레임워크 - Set  (0) 2023.04.30
컬렉션 프레임워크  (0) 2023.04.30
형식화 클래스  (0) 2023.04.30
Date / Calendar / time  (0) 2023.04.30
728x90

용어

컬렉션 : 여러 객체를 모아 놓은 것

프레임워크 : 표준화, 정형화된 체계적인 프로그래밍 방식으로 생산성과 유지보수에 도움을 줌

컬렉션 프레임워크 : 컬렉션을 다루기 위한 표준화된 프로그래밍 방식으로 컬렉션을 쉽고 편리하게 다룰 수 있는

다양한 클래스(저장, 삭제, 검색, 정렬 등) 제공

컬렉션 프레임워크 핵심 인터페이스

List

순서가 있는 데이터의 집합

데이터 중복 허용

ArrayList, LinkedList, Stack, Vector, ...

 

대기자 명단 같은 경우에 사용

Set

순서를 유지하지 않는 데이터의 집합

데이터 중복 허용 안함

HashSet, TreeSet, ...

 

양의 정수 집합이나 소수의 집합 같은 경우에 사용

Map

한 쌍(키와 값)으로 이루어진 데이터의 집합

순서는 유지되지 않음

키는 중복 허용하지 않음

값은 중복 허용

HashMap, TreeMap, Hashtable, Properties, ...

 

아이디(키)와 패스워드(값) 같은 경우에 사용

 

컬렉션 인터페이스의 메소드

add(Object o), addAll(Collection c)

지정된 객체나 객체들을 컬렉션에 추가

clear()

컬렉션의 모든 객체를 삭제

contains(Object o), containsAll(Collection c)

지정된 객체 또는 객체들이 컬렉션에 포함되어 있는지 확인

isEmpty()

컬렉션이 비어있는지 확인

iterator()

컬렉션의 이터레이터를 얻어서 반환

remove(Object o), removeAll(Collection c)

지정된 객체나 객체들을 삭제

retainAll(Collection c)

지정된 컬렉션에 포함된 객체만을 남기고 다른 객체들을 컬렉션에서 삭제한 후에

컬렉션에 변화가 있다면 true, 없다면 false를 반환

size()

컬렉션에 저장된 객체의 개수를 반환

Object[] toArray()

컬렉션에 저장된 객체를 객체배열로 반환

Object[] toArray() (Object[ ] a)

지정된 배열에 컬렉션의 객체를 저장 후에 반환

'Java > Notion' 카테고리의 다른 글

컬렉션 프레임워크 - Set  (0) 2023.04.30
컬렉션 프레임워크 - List  (0) 2023.04.30
형식화 클래스  (0) 2023.04.30
Date / Calendar / time  (0) 2023.04.30
Number / Wrapper 클래스  (0) 2023.04.30
728x90

java.text 패키지에 있는 DecimalForamt / SimpleDateFormat 클래스

DecimalFormat

숫자를 형식화할 때 사용

숫자 → 형식 문자열  // 형식 문자열   숫자

// 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능 (DecimalFormat.format)
double number = 1234567.89;
// DecimalFormat의 생성자의 매개변수에 원하는 형식을 작성
DecimalFormat df = new DecimalFormat("#.#E0");// E는 지수형식
// 적용할 숫자나 날짜를 가지고 있는 변수를
// DecimalFormat의 format 메소드를 사용하여 문자열에 저장
String result = df.format(number); // "1.2E6"라는 스트링으로 저장


// 형식 문자열에서 숫자와 날짜를 뽑아내는 기능 (DecimalFormat.parse)
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = de.parse("1,234,567.89"); // 문자열에서
double d = num.doubleValue(); // 1234567.89라는 더블형 값으로 값을 뽑아냄

SimpleDateFormat

날짜와 시간을 다양한 형식으로 출력할 때 사용

// 기호
// 날짜
G 연대
y 연도
M 월
w 년의 몇 번째 주 (1~53)
W 월의 몇 번째 주 (1~5)
D 년의 몇 번째 일
d 월의 몇 번째 일
F 월의 몇 번째 요일
E 요일

// 시간
a 오전/오후
H 시간(0~23)
k 시간(1~24)
K 시간(0~110
h 시간(1~12)
m 분
s 초
S 천분의 일초
z 일반적인 시간대 기준
Z RFC 822 시간대 기준
' escape문자(특수문자 표현이 필요할 때 사용)

// 날짜 형식 지정
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 년-월-일
String result = sdf.format(today); // 형식 적용

// 지정 형식으로 값을 뽑아내기
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2023년 04월 30일"); // 문자열을 Date타입으로 변환

'Java > Notion' 카테고리의 다른 글

컬렉션 프레임워크 - List  (0) 2023.04.30
컬렉션 프레임워크  (0) 2023.04.30
Date / Calendar / time  (0) 2023.04.30
Number / Wrapper 클래스  (0) 2023.04.30
Object 클래스  (0) 2023.04.30
728x90

Date / Calendar 클래스

날짜와 시간을 다루기 위한 목적으로 만들어진 클래스 ( java.util.Date / java.util.Calendar )

time 패키지

기존의 Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공하는 패키지 ( java.time )

 

Calendar 클래스

추상 클래스라서 getInstance 메소드를 통해 구현된 객체를 얻어야 함

// 추상 클래스라 인스턴스 생성 불가
Calendar cal = new Calendar(); // 오류

// getInstance() 메소드를 활용하여 가져와야 함
Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 셋팅

// Calendar 클래스에 정의된 필드
// 날짜 
YEAR 년
MONTH 월(0부터 시작하기 때문에 +1 해줘야 함)
WEEK_OF_YEAR 현재 연도 기준으로 현재가 몇 번째 주인지
WEEK_OF_MONTH 현재 월의 기준으로 현재가 몇 번째 주인지
DATE 일
DAY_OF_MONTH 현재 월의 몇 번째 일인지
DAY_OF_YEAR 현재 연도 기준으로 현재가 몇번째 일인지
DAY_OF_WEEK 현재 주 기준으로 현재가 몇번째 일인지 (1 ~ 7까지 있고 일월화수목금토 순서)
DAY_OF_WEEK_IN_MONTH 

// 시간
HOUR (0 ~ 11)
HOUR_OF_DAY (0 ~ 23)
MINUTE 분
SECOND 초
MILLISECOND 천분의 일초
ZONE_OFFSET GMT 기준 시차
AM+PM 오전/오후

// get()
int year = cal.get(Calendar.YEAR); // 현재가 몇년인지를 얻어 옴
int lastDay = cal.getActualMaximum(Calendar.DATE); // 현재 달의 마지막 날을 얻어 옴

'Java > Notion' 카테고리의 다른 글

컬렉션 프레임워크  (0) 2023.04.30
형식화 클래스  (0) 2023.04.30
Number / Wrapper 클래스  (0) 2023.04.30
Object 클래스  (0) 2023.04.30
예외  (0) 2023.04.29
728x90

Number 클래스

모든 숫자 Wrapper 클래스의 조상

Wrapper 클래스

기본형값을 감싸는 클래스로 8개의 기본형을 객체로 다뤄야할 때 사용

Boolean boolean
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double

메소드

parse기본형() : Wrapper 클래스의 객체를 기본형으로 바꿈

valueOf() : parse와 마찬가지로 Wrapper 클래스의 객체를 기본형으로 바꿈

오토박싱

기본형을 Wrapper 클래스의 객체로 자동으로 변환해줌 ( int 타입을 Integer 객체에 넣는 경우 )

언박싱

Wrapper 클래스의 객체를 기본형으로 자동으로 변환해줌 ( Integer 객체의 값을 int 타입에 넣는 경우 )

'Java > Notion' 카테고리의 다른 글

형식화 클래스  (0) 2023.04.30
Date / Calendar / time  (0) 2023.04.30
Object 클래스  (0) 2023.04.30
예외  (0) 2023.04.29
내부 클래스  (0) 2023.04.25
728x90

모든 클래스의 최고 조상으로 어떤 클래스를 만들든 Object 클래스를 상속 받아 11개의 메소드를 사용가능

protected clone()

객체 자신의 복사본을 반환

protected로 접근제어자가 지정되어 있기 때문에 오버라이딩하여 public으로 지정해서 사용해야 함

equals(비교할객체)

객체 자신(this)과 비교할 객체가 같은 객체인지 주소(참조변수)를 비교 하여 boolean 값을 반환

오버라이딩 하여 주소가 아닌 다른 값을 비교하는 메소드로도 사용가능

protected finalize()

객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출되는 메소드로 이때 수행되어야 하는 코드가 있을 경우에는

추가적으로 오버라이딩 해서 사용하지만 거의 사용하지 않는 메소드

protected로 접근제어자가 지정되어 있기 때문에 오버라이딩하여 public으로 지정해서 사용해야 함

getClass()

객체 자신의 클래스 정보(변수, 메소드, 생성자 등에 대한)를 담고 있는 Class 인스턴스를 반환

hashCode()

객체 자신의 해시코드를 반환

Object 클래스의 오버라이딩 전 hashCode 메소드는 객체의 주소를 int형으로 변환해서 반환

toString()

객체 자신의 정보를 문자열로 반환

notify()

객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨움

notifyAll()

객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨움

wait() / wait(long timeout) / wait(int nanos)

다른 쓰레드가 notify / notifyAll을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간동안 기다리게 함

 

 

기타

native 메소드

운영체제가 기본적으로 가지고 있는 메소드 ( hashCode 메소드가 여기에 속함 )

Object 클래스의 메소드 오버라이딩시 주의할 점

기본적으로 주소를 가지고 작업하던 equals 메소드를 오버라이딩 하면 hashCode도 똑같이 오버라이딩 해줘야 함

equals 메소드의 결과가 참인 두 객체의 해시코드는 같아야하기 때문

'Java > Notion' 카테고리의 다른 글

Date / Calendar / time  (0) 2023.04.30
Number / Wrapper 클래스  (0) 2023.04.30
예외  (0) 2023.04.29
내부 클래스  (0) 2023.04.25
인터페이스  (0) 2023.04.25
728x90

오류의 종류

논리적 오류 : 동작은 문제 없지만 작성 의도와 다르게 동작하는 오류

컴파일 오류 : 컴파일 과정에서 발생하는 오류로 컴파일러의 구문체크 과정에서의 오류

런타임 오류 : 실행 할 때 발생하는 오류로 두 가지의 종류가 있음

  • Error (오류) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • Exception (예외) : 프로그램 코드에 의해서 수습될 수 있는 무난한 오류

오류는 해결할 수 없는 문제니 처리가 가능한 예외를 처리하는 것을 예외처리 라고 함

예외 클래스의 계층 구조

Object ( Throwable ( Exception, Error) )

 

Error ( OutOfMemoryError, ... )

Exception ( IOException(입출력), ClassNotFoundException(클래스못찾음), ... , RuntimeException )

  • Exception 클래스들은 사용자의 실수 같은 외적인 요인에 의해 발생하는 예외들

RuntimeException ( ArithmeticException, ClassCastException, NullPointerException, ..., IndexOutOfBoundsException )

  • 프로그래머의 실수로 발생하는 예외들

예외처리

프로그램 실행 시 발생할 수 있는 예외의 발생을 사전에 대비해 코드를 작성하여

비정상적인 종료를 막고, 정상적인 상태를 유지하기 위함

try { // {} 생략불가
	//예외가 발생할 가능성이 있는 코드 작성
} catch (Exception1 e1) {
	//Exception1이 발생한 경우를 처리하기 위한 코드 작성
} catch (Exception2 e2) {
	//Exception2가 발생한 경우를 처리하기 위한 코드 작성
} catch (ExceptionN eN) {
	//ExceptionN이 발생한 경우를 처리하기 위한 코드 작성
}

//만약 try블럭 내에서 예외가 발생했을 경우
try {
	System.out.println((선언하지 않은 변수);//이 코드에서 오류가 발생하여
    System.out.println("Hello");//아래 남은 코드들을 실행하지 않고 catch문으로 이동
} catch (Exception1 e1) {
	//Exception1이 발생한 경우를 처리하기 위한 코드 작성
}

//Exception e는 모든 예외의 최고 조상이라 모든 예외 처리 가능하므로
//가장 마지막 catch문에 작성
catch (Exception e) {
	//예외 처리 코드
}

printStackTrace / getMessage 메소드

printStackTrace() : 예외 발생 당시 호출스택에 있던 메소드의 정보와 예외 메시지를 화면에 출력

getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻음

 

예외발생 > 예외객체생성 > 객체에는 발생한 예외에 대한 정보와 메소드들을 가지고 있음

> 메소드들을 사용하여 예외에 대한 정보를 알 수 있음

catch (ArithmeticException ae) {
	//참조변수를 통해 메소드 호출 가능
	ad.printStacktrace();//어떤 종류의 오류인지, 발생원인, 발생위치
    System.out.println(ae.getMessage()); // 발생원인
}

멀티 catch 블럭

내용이 같은 catch 블럭을 하나로 합치지만 예외끼리 부모자식 관계일 수는 없음

부모예외가 자식의 예외도 처리하여 의미 없기 때문에 부모예외만 처리해도 상관없음

한쪽 예외 객체에만 있는 메소드도 사용불가 무조건 공통으로 가지고 있는 메소드만 가능

// 사용 전
catch (ExceptionA e) {
	e.printStackTrace();
} catch (ExceptionB e2) {
	e2.printStackTrace();
}

// 사용 후
catch (ExceptionA | ExceptionB e) {
	e.printStackTrace();
}

//한쪽 예외 객체에만 있는 메소드를 사용하고 싶을 경우는 형변환
catch (ExceptionA | ExceptionB e) {
	if (e instanceof ExceptionA) {
    	ExceptionA e1 = (ExceptionA) e;
        e1.methodA();
    }
}

예외 발생

// 1. new 연산자 사용해서 예외 객체 생성
Exception e = new Exception("고의 예외 생성");

// 2. thorw 키워드를 사용하여 예외 발생
throw e;

// 한줄로도 가능
throw new Exception("한 줄로 예외 발생시키기");

예외 종류

checked 예외 : 컴파일러가 예외 처리 여부를 체크하여 예외 처리가 필수 (Exception 및 자손)

unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 하지 않아 예외 처리가 선택적 (RuntimeException 및 자손)

메서드에 예외 선언 및 예외 떠넘기기

예외를 처리하지 못할 때 메소드를 호출한 쪽에 예외를 떠넘기는 방법

이 메소드를 사용하면 이러한 예외들이 발생할 수 있다 호출하는 쪽에 가르쳐줘서

호출하는 쪽에서 예외처리를 하도록 함

// 사용법
// 가능하면 필수처리예외(checked)만 떠넘기는게 좋음
접근제어자 반환타입 메소드명 () throws Exception1, Exception2, ..., ExceptionN {
	// 메소드 바디
}

// 모든 예외를 떠넘기기도 가능
// 조상보다 많은 예외를 선언할 수는 없음
접근제어자 반환타입 메소드명 () throws Exception {
	// 메소드 바디
}

메인 메소드에까지 예외를 떠넘기면 JVM의 기본 예외 처리기로 떠넘겨져

예외가 발생한 당시의 호출스택에 대해 알려줌

사용자 정의 예외 클래스 생성

조상 클래스로 Exception과 RuntimeException 중 선택하여 직접 예외 클래스를 정의할 수 있음

꼭 필요한 경우만 Exception을 상속 받고 가능하면 RuntimeException을 상속 받아 unchacked 예외로 만드는게 좋음

// 1. 조상으로부터 상속 받기
class MyException extends Exception {
	// 2. 생성자 추가
	//문자열을 매개변수로 받는 생성자
    MyException(String message) {
    	// 3. 상속 받은 상위 클래스의 생성자 호출
    	super(message);
    }
}

예외 되던지기

예외를 처리한 후 예외를 다시 발생시키는 것

호출한 쪽과 호출된 쪽 양쪽 메서드에서 모두 예외를 처리하는 것

static void method() throws Exception { // 예외를 떠넘기고
	try {
    	throw new Exception(); //예외를 생성
    } catch (Exception e) {
    	//예외처리 후
    	throw e; //예외 되던지기
    }
}

finally 블럭

예외 발생여부와 관계없이 수행되어야 하는 코드

try {

} catch (Exception e) {

} finally {
	// 예외 발생 여부와 관계 없이 항상 수행되어야 하는 코드
    // try-catch문의 마지막에 위치해야 함
    // try 블럭 안에 return문이 있어도 반드시 실행 됨
}

연결된 예외

한 예외가 다른 예외를 발생시킬 수 있는 예외

예외 A가 예외 B를 발생 시키면 A는 B의 원인 예외

  • 여러 예외를 하나로 묶어서 다룰 때
  • checked 예외를 unchecked 예외로 바꿀 때
// Throwable initCause(Throwable cause) : 지정한 예외를 원인 예외로 등록
// Throwable getCause() : 원인 예외를 반환

// 예외를 하나로 묶기
static void method() throws ExceptionA {
	try {

    } catch (ExceptionB eb) {
		NewException ne = new NewException();
        ne.initCause(eb) // 새로 만든 예외의 원인 예외를 현재 예외로 지정하여
        throw ne; // 원인 예외(ExceptionB)를 되던지면 ExceptionA에 원인 예외가 포함되서 되던짐
    }
}
// checked >> unchecked
static void method() throws CheckedException {
	throw new RuntimeException(new UncheckedException());
    // unchecked 예외를 만들고 원인 예외를 checked 예외로 지정하여 포함시킴
    // initCause 메소드를 사용하지 않은 이유는 RuntimeException의 생성자 중
    // 매개변수로 Throwable cause를 전달받는 생성자가 있기 때문
}

 

'Java > Notion' 카테고리의 다른 글

Number / Wrapper 클래스  (0) 2023.04.30
Object 클래스  (0) 2023.04.30
내부 클래스  (0) 2023.04.25
인터페이스  (0) 2023.04.25
추상화  (0) 2023.04.25

+ Recent posts