쌍용 강북 교육센터 국비학원 Day 17일차
Exception
try{ 예외가 발생되는 로직 }
catch ( 예외클래스 인스턴스 ) { 예외가 발생됐을때 실행되는 로직 }
finally { 예외여부와 관계없이 실행되는 로직 }
(예외 이름) Exception e 에서 e 변수다. 이 변수 앞의 Exception은 변수의 데이터 타입이 Exception 이라는 의미다. Exception은 자바에서 기본적으로 제공하는 클래스로 java.lang에 소속되어 있다. 다중 예외처리시에는 부모클래스의 exception 은 맨 아래에 나와야 한다. 예외처리는 순차적으로 처리되면서 exception의 하위에 있는 클래스들이 먼저 처리하기 때문이다.
(catch는 else 와 같이 오류별로 중첩이 가능하다 단, 순서에 주의) try 내부의 반복문이 있을경우 예외가 발생하면 반복문이 종료되기 때문에 이것에 유의하자.
- e.getMessage();
오류에 대한 기본적인 내용을 출력해준다. 상세하지 않다.
- e.toString()
getMessage 보다 더 자세한 예외 정보를 제공한다. 어떤오류와 무슨이유때문인지 출력해준다.
- e.printStackTrace()
메소드 getMessage, toString과는 다르게 printStackTrace는 리턴값이 없다. 이 메소드를 호출하면 메소드가 내부적으로 예외 결과를 화면에 출력한다. printStackTrace는 가장 자세한 예외 정보를 제공한다.
대표적인 예외의 종류
Exception - 모든 예외의 최상위 클래스이다.
ArrayIndexOutOfBoundsException - 정해진 배열의 크기가 벗어나면 (오버되면) 발생하는 오류
ArithmeticException - 0으로 나누었을경우 (분모가 0일경우) 발생하는 오류
NumberFormatException - 숫자형식의 오류이다. 숫자로 데이터 타입을 변경할시 숫자형이 아닌 문자열일 경우, 변경하는 자료형보다 범위가 큰 경우, null 입력시, 문자 앞뒤로 공백이 있는 경우가 있다.
finally
try 블럭부분에 오류가 발생하지 않더라도 finally 블럭부분을 실행한다. try 에서 오류가 발생하면 finally 블럭을 실행한 후 오류가 출력된다.
try 문장 이후 catch문을 여러개 사용할 수 있는 multi catch문이 있다. 자세한 설명은 이쪽으로 ↓
https://sikcoding.tistory.com/16
Java 기초 입문 6일차 (Interface, 다형성, Exception)
Interface abstract, final과 함께 대표적인 규제로 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강
sikcoding.tistory.com
예외 (Exception) 클래스 정의하기
1. Exception 클래스를 상속받아야 한다.
2. 생성자내에서 super ( ) 에 등록할 예외메시지(오류메시지)를 입력한다.
throws
원래는 메소드내에서 예외처리를 해야하지만 메소드명 다음에 thorws Exception 을 하면 메소드 내에서 예외를 처리하지 않고 메소드를 호출하는쪽으로 예외를 넘긴다.
thorws 의 자세한 예제는 ↓
https://sikcoding.tistory.com/17
Java 기초 입문 7일차 (예외처리 throws, checked, unchecked)
throws API를 사용할 때 설계자의 의도에 따라서 예외를 반드시 처리해야 하는 경우가 있다. 위와 같은 예제가 있다. 내용은 out.txt 파일을 읽어서 그것을 화면에 출력하는 내용이라고만 이해하자
sikcoding.tistory.com
Anonymous (익명클래스)
익명(무명) 클래스는 말 그대로 이름이 없는 클래스이다. 인터페이스를 구현한 클래스가 특정한 한곳에서만 사용되고 다른 곳에서는 재사용되지 않는 경우이라면 굳이 클래스 파일로 만들 필요 없이 익명클래스로 사용하면 된다.
익명클래스의 객체는 반드시 부모 클래스를 상속받는 클래스 이거나 인터페이스를 구현한 클래스이어야 한다.
왜냐하면 클래스의 이름은 없지만 저장받는 타입은 존재해야 하기 때문이다. 그래서 익명클래스의 객체는 부모 클래스 또는 인터페이스로 받게 되어있다.
익명 클래스를 사용하는 가장 큰 목적은 부모 클래스를 상속받는 자식 클래스를 생성하지 않고도 객체를 만들어서 부모 클래스에 정의된 메소드를 재정의 할 수 있다는 것이다.
익명 클래스는 일반적으로 Graphic 프로그래밍(GUI 프로그래밍)을 할 때 리스너 인터페이스를 만들 때 주로 사용한다.
익명(무명) 클래스는 추상클래스와 인터페이스로부터 만든다.
람다식 (lambda)
람다(Lambda) 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어이다.
람다식은 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법이다. 람다식은 이름을 가질 필요가 없으므로 익명 함수 (Anonymous functions)이다. 람다식은 익명함수을 생성하기 위한 식으로서 객체 지향 언어보다 함수 지향 언어에 가깝다.
자바에서 람다식의 사용 목적은 인터페이스에 정의된 메소드를 구현시 코드양을 줄여서 간편하게 사용하는 것이 목적이다. 자바에서는 함수 단독으로는 사용할 수 없고 객체를 통해서만 사용이 가능한 형태이므로 자바에서 람다를 실행하려면 전제조건으로 먼저 함수형 인터페이스 (FunctionalInterface) 를 구현한 익명클래스 객체가 생성되어져 있어야만 한다.
람다는 함수형 인터페이스를 구현한 익명클래스 객체의 메소드로 동작하게 된다. 여기서 주의할 점은 함수형 인터페이스는 오직 딱 한개만의 추상메소드로 이루어져야 하기때문에 추상메소드가 두 개 이상이 선언되면 컴파일 오류가 발생한다. 함수형 인터페이스를 만드려면 인터페이스 메소드에 @FunctionalInterface 어노테이션을 사용하면 된다.
람다식 표기방법
객체 생성시에 new (클래스명) 대신 해당 메소드의 파라미터만 받아온 후 ' -> ' 화살표를 넣어준다. 메소드는 선언한 것이 한 개밖에 없기 때문에 생략이 가능하고, 파라미터 데이터타입 또한 메소드에 선언 되어있기 때문에 생략 가능하다 -> 파라미터의 개수가 1개일 때는 소괄호까지 생략가능 (단, 파라미터가 없을 경우 무조건 소괄호는 기재 해야한다)
리턴값 없이 실행명령문 또한 1개일 경우 중괄호는 생략 가능하지만 리턴값이 있을경우는 중괄호는 생략할 수 없다.
(리턴문만 있는 단일코드인 경우에는 중괄호 및 리턴까지 생략 가능하다)
위의 실행결과는 동일하다. 이처럼 람다식을 사용해 코드를 간결하게 사용할 수 있다. 오늘은 여기까지
'Java' 카테고리의 다른 글
Scanner 와 BufferedReader / BufferedWriter 차이점 그리고 StringBuilder에 대해서 (2) | 2023.01.30 |
---|---|
쌍용강북교육센터 국비 학원 Day 18일차 Java (Collection, 제네릭, List, Map, Set) (0) | 2023.01.27 |
쌍용강북교육센터 국비 학원 Day 16일차 Java (static 블럭, Final, Interface) (0) | 2023.01.25 |
쌍용강북교육센터 국비 학원 Day 15일차 Java (다형성, abstract 추상화) (0) | 2023.01.20 |
쌍용강북교육센터 국비 학원 Day 14일차 Java (Override, Overiding, 애너테이션) (0) | 2023.01.19 |