본문 바로가기

Java

(50)
자바에서 제공하는 함수형 인터페이스 [더 자바, Java 8] - 자바에서 미리 정의해 놓은 함수형 인터페이스들이 있습니다. 이 함수형 인터페이스들은 모두 java.lang.function 패키지에 들어 있습니다. 1) interface Function - Function 인터페이스를 보면 하나의 메소드가 정의되어 있습니다. T라는 타입을 받아서, R이라는 타입을 리턴합니다. 대표적인 수학적인 함수와도 일치합니다. 두 개의 타입이 다를 수 있기 때문에, T와 R로 정의되어 있습니다. package me.whiteship.java8to11; public class Plus10 implements Function { @Override public Integer apply(Integer integer){ return integer+10; } } package me.whi..
함수형 인터페이스와 람다 표현식 [더 자바, Java 8] 1) 함수형 인터페이스 - 인터페이스에 추상 메서드가 하나만 있으면, 함수형 인터페이스입니다. 자바 8부터는 static 메서드와 default 메서드를 정의할 수 있습니다. 이 때, 추상 메서드가 여전히 1개라면 함수형 인터페이스입니다. package me.whiteship.java8to11; public interface RunSomething{ void doIt(); static void printName(){ System.out.println("Keesun"); } default void printAge(){ System.out.println("40"); } } - 함수형 인터페이스를 선언할 때, @FunctionalInterface를 붙여줄 수 있고, 이 때, 함수형 인터페이스의 조건을 위반하면..
Optional 소개 (더 자바, Java 8 강의) 1) Optional이란? - Optional은 자바 8에 새로 추가된 인터페이스입니다. Optional은 비어 있을 수도 있고, 값 하나만을 담고 있을 수도 있는 컨테이너 인스턴스의 타입입니다. 예시 코드를 통해 살펴보겠습니다. public class OnlineClass{ private Integer id; private String title; private boolean closed; public Progress progress; public OnlineClass(Integer id, String title, booelean closed){ this.id = id; this.title = title; this.closed = closed; } public Progress getProgress(){..
추상 클래스, 추상 메서드 1) 추상 클래스란? - 추상 클래스는 미완성 설계도 혹은 미완성 메소드를 갖고 있는 클래스입니다. 즉, 추상 메서드를 갖고 있으면 추상 클래스입니다. abstract 키워드가 없으면 해당 클래스가 추상 메서드를 갖는지 아닌지 알 수 없습니다. abstract class Player{ // 추상 클래스(미완성 클래스) abstract void play(int pos); // 추상 메서드({}이 없는 미완성 메서드) abstract void stop(); // 추상 메서드 } - 추상 클래스는 미완성이기 때문에, 인스턴스를 생성하는 것이 불가능합니다. Player p = new Player(); // 에러. 추상 클래스의 인스턴스 생성 불가 - 상속을 통해 추상 클래스를 완성해야, 인스턴스 생성이 가능합니..
Optional 1) Optional이란? - Optional은 래퍼 클래스입니다 래퍼 클래스란 T타입의 참조 변수를 갖는 클래스입니다. 래퍼 클래스의 대표적인 예시로는 Integer나 Long타입이 있습니다. public final class Optional{ private final T value; } - Optional은 제네릭 T타입을 갖고 있기 때문에 어떤 타입이던지 저장할 수 있습니다. 그리고 클래스 안에 T타입의 참조 변수를 갖고 있습니다. - 여기서 T에는 모든 종류의 객체 혹은 null을 저장할 수 있습니다. 2) Optional이 필요한 이유 (1) null을 직접 다루는 것은 NullPointerException(이하 NPE)이 발생할 수 있으므로 위험합니다. -> 그래서 객체안에 담아서 간접적으로 ..
예외 선언(Exception Handling) - 메서드에 예외 선언하기, finally 블럭 - 예외를 처리하는 방법은 두 가지인데, 하나는 try~catch문이고, 다른 하나는 예외 선언하기 입니다. 1) 예외 선언하기 - 예외 선언하기는 다음과 같이 할 수 있습니다. void method() throws Exception1, Exception2, ... ExceptionN{ // 메서드의 내용 } void method() throws Exception{ // 메서드의 내용 } - 다음과 같이 Exception이 선언되어 있다면, method2에서 Exception을 throw하지만, method2, method1, main에 try~catch문이 없으므로, main문이 죽으면서 예외를 JVM에 넘겨주고, 비정상 종료됩니다. 그러면 JVM의 기본 예외처리기가 예외문을 출력합니다. 실제로는 tr..
예외 처리(Exception Handling)(4) - 예외 발생시키기 1) 예외 발생시키기 - 우리가 예외를 직접 다음과 같이 발생시킬 수도 있습니다. 1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음 Exception e = new Exception("고의로 발생시켰음"); 2. 키워드 throw를 이용해서 예외를 발생시킨다 throw e; class Ex8_6{ public static void main(String[] args){ try{ Excepetion e = new Exception("고의로 발생시켰음"); throw e; }catch(Exception e){ System.out.println("에러 메시지: " + e.getMessage()); e.printStackTrace(); } System.out.println("프로그램이 정..
예외 처리(Exception Handling)(3) - printStackTrace(), 멀티 catch 블럭 1) printStackTrace(), getMessage() - try 블록을 실행하다가 예외가 발생하면, 예외 객체가 만들어집니다. 예외 객체는 타입이 ArithmeticException 입니다. 이 객체에는 발생한 예외에 대한 정보가 들어 있습니다. 그리고 printStackTrace(), getMessage()와 같은 메소드들을 갖고 있습니다. class Ex8_t{ public static void main(String[] args){ System.out.println(1); System.out.println(2); try{ System.out.println(3); System.out.println(0/0); System.out.println(4); }catch(ArithmeticExcpetio..
예외 처리(Exception handling)(2) - 예외 처리하기, try~catch문 흐름 - 예외 처리란 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것을 의미합니다. 예외 처리의 목적은 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하는 것입니다. 1) try~catch문 - 예외를 처리할 때 사용하는 구문 중 하나가 try~catch문 입니다. try~catch문의 예시를 코드로 나타내면 다음과 같습니다. if문과는 달리, try 블럭이나 catch 블럭은 블럭 내에 포함된 문장이 한 줄이라도 괄호를 생략할 수 없습니다. try{ // 예외가 발생할 가능성이 있는 문장을 넣는다. }catch(Exception e1){ // Exception1이 발생했을 경우, 처리할 문장을 넣는다. }catch(Exception e2){ // Exception2가 발..
예외 처리(Exception Handling)(1) - 프로그램 오류, 예외 클래스의 계층 구조 1) 프로그램 오류 - 프로그램 오류에는 3가지가 존재합니다. (1) 컴파일 에러: 컴파일 할 때 발생하는 에러를 의미합니다. (2) 런타임 에러: 실행 할 때 발생하는 에러를 의미합니다. (3) 논리적 에러: 작성 의도와 다르게 동작하는 에러를 의미합니다. - 자바 컴파일러는 기본적으로 (1) 구문 체크 (2) 번역 (3) 최적화 (4) 생략된 코드 추가(ex) extends Object)와 같은 작업을 합니다. - 컴파일 타임에는 프로그램의 모든 것을 체크할 수 없고, 기본적인 것만 체크합니다. 컴파일할 때 문제가 없었다고 해서, 실행에 문제가 없는 것이 아닙니다. 실행 중에는 많은 복잡한 일들이 일어나고, 그 때 발생하는 에러를 런타임 에러라고 합니다. - 논리적 에러는 프로그램이 중단되지는 않지만..