본문 바로가기

JAVA/복습

(50)
사용자 정의 Exception 사용자 정의 Exception Exception 클래스가 이미 자바에서 정의해놓은 클래스들이 사용될 수 도 있고 사용자가 직접 Exception을 정의해서 사용할 수 도 있다. 사용자는 Exception이나 RuntimeException이라는 클래스를 상속받아 새로운 Exception클래스를 만들어 낼 수 있다. public class 클래스이름 extends Exception{ ... } 새로운 Exception클래스를 만드는 이유는 무엇일까? Exception클래스 자체가 특별한 무언가를 하지는 않는다. 다만 이름 때문이다. 클래스 이름만으로도 어떤 오류가 발생했구나라는 것을 직관적으로 사용자에게 알게하려는 목적을 가지고 있다. 1. Exceptiond을 상속받은 클래스들은 Checked Except..
Exception 발생시키기 package Java02; public class ExceptionThrowExam { public static void main(String[] args) { // 정수에 값 넣기 int i = 10; int j = 0; try { int k = divide(i, j); System.out.println(k); } catch (IllegalArgumentException e) { System.out.println(e.toString()); } } // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의 public static int divide(int i, int j) throws IllegalArgumentException { if (j == 0) { //ne..
throws throws는 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져준다. package Java02; public class ThrowsExam { public static void main(String[] args) { // 정수에 값 넣기 int i = 10; int j = 0; int k = divide(i, j); System.out.println(k); } // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의 public static int divide(int i, int j) { int k = i / j; return k; } } 실행 시 아래와 같이 오류가 발생 divide 메소드 내부에서 ArithmeticException이 발생하지 않게 하려면..
Exception - 예외 아래와 같이 코드를 실행해보자. package Java02; public class ExceptionExam { public static void main(String[] args) { int a = 10; int b = 0; int c = a/b; System.out.println(c); } } 위와 같이 실행시키면 아래와 같이 ArithmeticException이라는 것이 발생을 하면서 프로그램이 종료가 되어버린다. Exception이 발생하게 되면 발생한 지점부터 프로그램은 종료되어 버린다. java는 정수를 0으로 나눌 때 예외라는 것을 발생시킨다. 이렇듯 프로그램이 실행 중에 예기치 못한 사건을 예외라고 한다. 이렇게 예외상황이 발생했을 때 어떻게 해야 할까? 예외 상황에 대비하여 예외 처리를 ..
내부클래스 - local 클래스 / 익명클래스 세번째. 메소드 안에 클래스를 선언한 경우, 지역 중첩 클래스 또는 지역 클래스(local class)라고 한다. 지역중첩클래스 이름에서 느껴지듯이 이 내부 클래스가 인스턴스변수로 선언되는 것이 아니라 메소드안에서 선언되는 경우를 말한다. package Java02; import com.sun.org.apache.bcel.internal.classfile.InnerClass; public class InnerExam2 { public void exec() { // 메소드를 정의하고 이 메소드안에 Cal이라는 클래스가 생성되어 있는 경우 class Cal { // 클래스를 선언하는 거니깐 똑같이 필드를 선언할 수도 있고 // 메소드를 정의해 놓을 수도 있다. int value = 0; public void..
내부 클래스 - instance 클래스/ static 클래스 내부 클래스 : 클래스 안에 선언된 클래스 어느 위치에 선언하느냐에 따라서 4가지 형태가 있을 수 있다. 첫번째. 클래스 안에 인스턴스 변수, 즉 필드를 선언하는 위치에 선언되는 경우, 이런 경우를 보통 중첩클래스 혹은 인스턴스 클래스라고 한다. package Java02; public class InnerExam { // 내부클래스 // 필드를 선언하는 위치에 클래스를 선언하는 것이다. // 1. Cal이라는 클래스 선언 class Cal{ // 클래스를 선언하는 거니깐 똑같이 필드를 선언할 수도 있고 // 메소드를 정의해 놓을 수도 있다. int value = 0; public void plus(){ value++; } } } 이렇게 내부에 존재하고 있는 Cal이라는 객체를 사용하기위해서는 어떻게해야..
인터페이스(interface)의 default method 기존 인터페이스는 추상메소드만 가질 수 있었는데 Java 8 이후는 default method와 static method를 정의할 수 있도록 변경되었다. 인터페이스가 default라는 키워드로 선언이 되면 메소드를 구현할 수가 있고, 또한 이를 구현한 클래스 내에서는 default메소드를 오버라이딩 할 수 있다. Calculator.java package Java02; public interface Calculator { public int plus(int a, int b); public int multiple(int a, int b); default int exec(int a, int b){ return a+b; } } default라는 키워드를 붙여서 메소드를 선언하면 신기하게도 오류가 발생하지 않고..
인터페이스(interface) 사용 인터페이스를 정의할 때는 그 객체를 선언하기 전에 이 객체가 어떤 어떤기능들을 갖고 있으면 좋을까?하는 이런 기능들을 모아놓은 것이다라고 생각하면 된다. 그런데 그기능들을 정의만 했지, 실제 구현을 하지않았기 때문에 인터페이스만 갖고 무언가를 사용할 수는 없다. 그래서 이런 인터페이스를 반드시 구현해서 사용해야만 한다. LedTV.java(interface인 TV를 구현, implements) package Java02; // class LedTV를 정의하는데 이 LedTV는 인터페이스 TV를 구현하겠다라는 의미 // 이 의미는 TV가 가진 기능들을 LEDTV도 갖게하겠다라는 의미와 같다. public class LedTV implements TV{ @Override public void turnOn()..