멀티캐치, 다중캐치 구문
try{
} catch ( 예외클래스명1 객체) {
} catch ( 예외클래스명2 객체) {
}
예외를 구체적으로 세분화해서 잡고싶을 때 사용.
모든 예외의 최고조상 : Exception , 어떤예외가 발생하던 전부 캐치.
최고조상은 가장 마지막에 처리.
사용자 정의 Exception
사용자가 직접 Exception 클래스 생성시 IllegalArgumentException 클래스 상속
메서드의 부적절한 인수를 사용자가 결정.
예로 passwordException을 만드는데
조건
- 비밀번호는 null이 될 수없다.
- 비밀번호는 5자이상이어야하며 문자로만 이루어지면 안된다.
public class PasswordException extends IllegalArgumentException{
private static final long serialVersionUID = 1L;
public PasswordException(String message) {
super(message);
}
}
이렇게 IllegalArgumentException 클래스를 상속시켜주고, 내가만든 특별한 클래스이니 시리얼아이디를 부여해준다.
class PasswordTest{
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
//Exception 처리
if(password == null) {
throw new PasswordException("비밀번호는 null이 될 수 없습니다.");
} else if(password.length() < 5) {
throw new PasswordException("비밀번호는 5자 이상이어야합니다.");
} else if (password.matches("[a-zA-z]+")) {
throw new PasswordException("비밀번호는 숫자나 특수문자를 포함해야 합니다.");
}
this.password = password;
}
}
클래스를 만들어주고 비밀번호가 변경될 때 조건에 걸리면 만든 PasswordException에 걸리도록 처리
public static void main(String[] args) {
PasswordTest pt = new PasswordTest();
String password = null;
// String password = "abc";
// String password = "abcdef";
// String password = "abcdef01";
try {
pt.setPassword(password);
System.out.println(pt.getPassword());
} catch(Exception e) {
e.printStackTrace();
}
메인에서 각 상황에맞춰 주석을 풀어주며 에러를 확인하며 제대로 처리되는지 확인.
익명클래스 (Anonymous Class) - 내부클래스의 일종
- 인터페이스를 이용하여 객체를 생성 할 때 , 클래스를 인터페이스 구현하여 객체를 생성
익명클래스를 사용하는 이유
- 인터페이스의 기능이 적고, 그 객체가 1개만 필요한 경우
메서드로 매개변수의 값이 들어와야 할 때 익명클래스를 사용함.
컬렉션 프레임워크 : 표준화된 방식의 자료구조
List, Set, Map => 인터페이스. 반드시 구현 클래스로 객체를 생성
데이터를 묶어서 관리할 때 사용
주로 배열대신 사용
List ( 배열과 동일 )
- 값을 하나씩 저장
- index : 순서를 보장
- 중복허용
- 배열 대신에 가장 많이 사용하는 구조
Set
- 값을 하나씩 저장
- index 없음 : 순서를 보장하지않음
- 중복허용 X ( 같은 값이 입력되면 덮어씀)
Map
- 값을 두개씩 저장 key / value 쌍으로 저장
- index는 없고, key가 index역할을 함.
- key는 중복 불가능 / value는 중복가능.
- key가 중복되면 value는 덮어써짐.
- 2개의 값이 하나의 자료로 묶어야 할 때 사용
- 아이디 / 패스워드, 제품명 / 가격, 학생명 / 점수 ...
배열은 기본자료형이 다 가능하지만, Colletion은 기본자료형은 불가능함. 클래스 자료형만 가능.
래퍼클래스(Wrapper Class) : 기본타입 자료형을 클래스 타입으로 변환한 클래스
기본자료형 ( Boxing ) > 클래스자료형
클래스자료형 ( UnBoxing ) > 기본자료형
기본자료형 > 래퍼클래스
int > Integer
char > Character
byte > Byte
short > Short
long > Long
float > Float
double > Double
boolean > Boolean
리스트 생성
- List<className> 객체명 = new 구현클래스<className>();
- List<Integer> list = new ArrayList<Integer>();
- List의 구현클래스 => ArrayList, LinkedList
ArrayList : 검색 시 유리 ( 배열과 유사한 형태 )
- 미리 길이를 지정하지 않음. 추가되면 늘어남. 삭제되면 줄어듬
- 추가, 삭제가 쉽다. 검색이 쉬움
LinkedList : 추가 / 삭제가 많을 경우 유리
- 중간에 값을 끼워넣거나, 빼는게 쉬움.
- 검색이 느리다
List Method
- add() : 요소를 추가
- get(index) : index 번지의 요소를 가져오기
- set(index, value) : index번지의 값을 value로 변경
- size() : list의 개수
- remove(index) : index번지의 값을 삭제 => list에서만 가능 , String 리턴
- remove(object) : object요소를 삭제 => set / map , boolean 리턴 / 같은 Object가 2개이상이더라도 앞에 하나만삭제
- contains(object) : list에 값이 있는지 검사 true / false로 리턴
- clear() : 리스트비움
- isEmpty() : 리스트가 비었는지 확인 true / false
- indexOf(object) : 해당 object의 index를 리턴 / 없으면 -1
- Collections.sort() : 정렬 , 오름차순만 가능 / index가 없으면 정렬도 의미없기에 list만 가능
- list.sort(Comparator를 구현한 객체) : 정렬 / Comparator 인터페이스를 구현한 구현체를 넣어야함. ( 익명 클래스 사용 )
list.sort() 의 예
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 결과가 -면 앞으로 보내고, + 뒤로 보내는 역할
// o1 - o2 : 오름차순 정렬 o2 - o1 : 내림차순
return o2 - o1;
}
});
Iterator : index가 없는 자료형을 출력하기 위해 사용
- list는 index가 있기 때문에 get(i)를 사용하여 원하는 번지에 접근이 가능
- set / map은 index가 없어서 일반 for문은 사용불가 ( 향상된 for문만 가능 - map은 불가능)
- 순서와 상관없이 값을 가져올 수 있는 Iterator 사용
- map은 향상된 for, Iterator 둘다 직접 사용은 불가능
Arrays.asList() : 배열 => 리스트
toArray() : 리스트 => 배열
'자바 수업 정리' 카테고리의 다른 글
수업정리 15일차. (1) | 2024.10.11 |
---|---|
수업정리 14일차. (0) | 2024.10.10 |
수업정리 12일차. (5) | 2024.10.07 |
수업정리 11일차. (0) | 2024.10.04 |
수업정리 10일차. (1) | 2024.10.02 |