기간 : 221007 ~ 221012
이번 주 초에는 기존에 배웠던 것들을 복습하는 시간을 가지게되었다.
그래서 새로운 것들을 정리하기보다는 기존에 배웠던 것을 되돌아보았다.
금요일부터 새로운 수업을 들어가서 애매하게 걸쳐 2주 기간을 글 하나에 작성하기로 했다. 😅
에러
예외
RuntimeException
- 스트림이나 파일 접근시 발생하는 예외
IOException
- DB 접속 권한이 없거나 네트워크 오류시 발생하는 예외
SQLException
- 존재하지 않는 파일 처리시 발생하는 예외
FileNotFoundException
- 클래스 이름을 잘못 적었을 때 발생하는 예외
ClassNotFoundException
- 배열 범위 벗어났을 때 발생하는 예외
IndexOutOfBoundsException
- null인 참조 변수의 멤버를 호출시 발생하는 예외
NullPointerException
- 클래스 간의 형을 잘못 변환했을 때 발생하는 예외
ClassCastException
- 정수를 0으로 나누려고 했을 때 발생하는 예외
ArithmeticException
Errors
- JVM 고유의 스택 공간 범위 벗어났을 때 발생하는 예외
StackOverFlowError
-> 보통은 잘못된 재귀호출에 의해 발생- JVM 손상되었거나 작동하는데 필요한 자원이 부족했을 때 발생하는 예외
VirtualMachineError
- JVM의 힙 공간이 과도한 요구 또는 지속적인 누수로 인해 더이상 요청한 메모리를 할당할 수 없거나 OS의 이유로 스레드 생성하는데 실패했을 때 발생하는 예외
OutOfMemoryError
예외처리
try {
// 예외가 발생할 가능성이 있는 코드
} catch (Exception error) {
// Exception 발생 시 처리하기 위한 코드
} finally {
// 예외 발생 유무와 상관없이 실행되는 코드
// 생략가능
}
public void method() throws Exception {
// 예외가 발생할 가능성이 있는 코드
}
public static void main(String[] args) throws Exception
- 예외 처리하지않은 코드와 동일
- 예외 발생 시 프로그램 종료
- 사용하지 말자!
예외처리 시 주의사항
public void method1() throws Exception{
method2();
}
public void method2() throws Exception{
method3();
}
public void method3() throws Exception{
method4();
}
throws
금지catch
로 잡아주는 것이 아니라 호출한 메소드로 계속 넘김try-with-resources
close()
를 호출하여 안전하게 리소스를 닫아줌close()
가 호출되는 것은 AutoCloseable
을 구현한 객체만 해당어제 수업을 마치고 토이프로젝트 과제가 시작되었다.
클래스 설계부터 구현까지 하는 과제로 자세한 내용은 나중에 포스팅 할 예정이다 😁
ClassCastException
이 발생 가능
- 타입 파라미터 컨벤션
E
: element, 주로 자바 API Collection에 사용K
: key, 주로 Map 자료구조 키을 나타내는데 사용V
: value, 주로 Map 자료구조 값을 나타내는데 사용N
: number, 주로 숫자를 나타내는데 사용T
: type, 첫번째 매개변수에 사용S, U, V
: 2nd, 3rd, 4th types
public class 클래스명<T> { ... }
public interface 인터페이스명<T> { ... }
제한된 타입 파라미터
<자료형매개변수 extends 클래스>
Human<T extends Animal>
제네릭 메서드
<자료형매개변수> 반환타입 메서드명(자료형매개변수..) {}
public static <T, V> double makeRectangle(Point<T, V> p1, Point<T, V> p2) {}
와일드카드
클래스/인터페이스<?>
프로그램 vs 프로세스
프로세스와 스레드
프로세스는 OS에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 서로
독립적
멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에
하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있음 종속적
스레드 생성방법
1. Thread
클래스를 상속받은 클래스를 통하여 생성
2. Runnable
인터페이스를 구현하고있는 클래스를 통하여 생성
3. Runnable
익명 객체를 인자로 전달하여 생성
Synchronized
synchronized
로 지정java.util
패키지에 구현되어 있음List 인터페이스
Set 인터페이스
get(i)
메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회boolean hasNext() : 이후에 요소가 더 있는지를 체크, 있는 경우 true를 반환
E next() : 다음에 있는 요소를 반환
TreeSet 클래스
Comparator 활용
class MyCompare implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return (s1.compareTo(s2)) *-1 ;
}
}
public class ComparatorTest {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>(new MyCompare());
set.add("aaa");
set.add("ccc");
set.add("bbb");
System.out.println(set);
}
}
심화부분으로 오다보니 내용이 복잡해지는데 막상 정리하자니 실습적인 개념이 많아 포스팅하기 까다로운것같다. 어려운 개념이라 잘 정리해보고 싶은데 🥲
이제 Java 막바지 부분일 터인데 부족한 점이 많은 것 같다.
그래도 계속해보면서 익숙해지는 것이 방법일 것이다 ❗️ (맞겠지?)