Java 인터페이스와 예외 처리

alert("april");·2023년 7월 14일
0

java

목록 보기
4/9
post-thumbnail

출처: https://www.educba.com/functional-interface-in-java/

함수형 인터페이스

인터페이스 중 추상 메소드를 하나만 가지고 있는 인터페이스를 함수형 인터페이스라고 한다.
이 때 @FunctionalInterface를 인터페이스 위에 작성하여 단 하나의 추상 메소드만
선언할 수 있도록 제한해야 한다.

람다식(Lambda Expression)

이름이 없는 메소드로서 변수처럼 사용이 가능하며, 매개변수로도 전달이 가능하다.
함수형 인터페이스는 추상 메소드가 한 개만 선언되기 때문에 메소드 이름이 필요 없다.
따라서 람다식을 익명 메소드(Anonymous Method)라고도 부른다.

람다식 문법

1. (매개변수 형식 나열, ...) -> 리턴값;
2. (매개변수 형식 나열, ...) -> {2개 이상의 문장 작성; return 리턴값;}

람다식 예시1

LambdaInter.java 인터페이스

package lambda;

@FunctionalInterface

public interface LambdaInter {
	
	boolean checkMultipleOf10(int number);
	
}

LambdaTest.java 클래스

    package lambda;

public class LambdaTest {
   public static void main(String[] args) {
      
      LambdaInter lambdaInter1 = (number) -> number % 10 == 0;
      boolean result1 = lambdaInter1.checkMultipleOf10(59);
      System.out.println(result1);
      
      LambdaInter lambdaInter2 = (n) -> {
    	  System.out.println("10의 배수 검사");
    	  return n % 10 == 0;
   };
   
   boolean result2 = lambdaInter2.checkMultipleOf10(70);
   System.out.println(result2);
}

}

람다식 예시2

printName.java 인터페이스

package lambda;

//	함수형 인터페이스로 선언
@FunctionalInterface
public interface PrintName {
//	성과 이름을 전달받은 후 String으로 리턴하는 추상메소드 선언
	public String getFullName(String firstName, String lastName);
}

PrintNameTest.java 클래스

package lambda;

public class PrintNameTest {
//	외부에서 람다식으로 구현한 값을 name으로 전달받기
	public static void printFullName(PrintName name) {
		System.out.println(name.getFullName("April", "Choi"));
	}
	
	public static void main(String[] args) {
//		매개변수 2개를 설정하고, 두 문자열을 연결하도록 구현!
			printFullName((firstName, lastName) -> firstName + lastName);
	}
}


예외 처리

에러 : 심각한 오류
예외 : 덜 심각한 오류(개발자가 잡을 수 있는 오류)

예외 처리 문법

try {
	예외가 발생할 수 있는 문장
} catch(예외이름 객체명) {
	예외 발생 시 실행할 문장
} catch(예외이름 객체명) {
	예외 발생 시 실행할 문장
} ...
} finally {
	예외 발생 여부에 상관없이 무조건 실행할 문장
	* 외부 장치와 연결했을 경우 다시 닫을 때 주로 사용한다.
}

예외 처리 예시

ExceptionTask.java 클래스

package exceptionTest;

import java.util.Scanner;

public class ExceptionTask {
  public static void main(String[] args) {
//      5개의 정수만 입력받기
//      - 무한 입력 상태로 구현
//      - q 입력 시 나가기
//      - 5개의 정수는 배열에 담기
//      - if문은 딱 한 번만 사용하기 (q 를 입력 시 나갈 때만 사용!)
//      - 단, 입력 받을 때는 무조건 next() 만 사용하기.

     Scanner sc = new Scanner(System.in);
     int[] arData = new int[5];
     String msg = "번째 정수 : ", temp = null;
     int i = 0;

     while (true) {
        System.out.print(++i + msg);
        temp = sc.next();

        if (temp.equals("q")) {
           for (int j = 0; j < arData.length; j++) {
              System.out.print(arData[j] + " ");
           }
           break;
        }
        
        try {
           arData[i-1] = Integer.parseInt(temp);
        } catch (NumberFormatException e) {
           System.out.println("정수만 입력해야겠죠~??");
           i--;
           
        } catch(ArrayIndexOutOfBoundsException e) {
           System.out.println("이미 5개의 정수를 입력하셨네요!?!?\n프로그램을 종료합니다.");
           for (int j = 0; j < arData.length; j++) {
              System.out.print(arData[j] + " ");
           }
           break;
           
        } catch (Exception e) {
           System.out.println("무슨 에러인지 특정이 안되네요!");
           System.out.println(e);
           i--;
        }

     }

  }
}


ExceptionTest.java 클래스

package exceptionTest;

public class ExceptionTest {
	public static void main(String[] args) {
		
		try {
			System.out.println(10/0);
			
		} catch (ArithmeticException e) {
			System.out.println("0으로 나눌 수 없습니다.");
			
		} catch (Exception e) { // 모든 예외 클래스의 부모는 Exception, upCasting 해서 들어온다.
			System.out.println("알 수 없는 오류가 발생했어요!");
			System.out.println(e);
	}
		System.out.println("오늘은 비 안오겠죠? 우산 안들고 왔는뎅");
}
}


API (Application Programming Interface)

개발에 필요한 라이브러리들의 집합
선배 개발자들이 만들어 놓은 소스코드

- 내부 API
	JDK 설치 시 제공해주는 기본 API
	docs.oracle.com/javase

- 외부 API(회사에서 많이 쓴다)
	선배 개발자들이 개발한 패키지 및 클래스들을 의미한다.
	보통 JAR파일로 배포하며 자바 프로젝트의 buildPath에 추가하여 사용할 수 있다.

	
profile
Slowly but surely

0개의 댓글

관련 채용 정보