본문 바로가기

Language/Java

(6)
[Java] Optional<T> 클래스 Optional 개념 Java8부터 지원하는 Optional 클래스는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE(Null Pointer Exception)이 발생하지 않도록 도와준다. * NPE(Null Pointer Exception)이란? 개발할 때 가장 많이 발생하는 예외 중 하나이다. NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하기를 권장하기도 한다. List names = getNames(); names.sort(); // names가 null이라면 NPE 발생 List names = getNames(); // NPE를 방지하기 위해 null 검사 해야함 i..
[Java] 메소드 레퍼런스(Method reference, ::의 의미) 메소드 레퍼런스란? lambda 표현식을 더 간단하게 표현하는 방법이다. 예를 들어, 다음은 람다식으로 Hello를 출력하는 코드이다. (Consumer는 어떤 객체를 입력받아 void를 출력시키는 함수형 인터페이스이다.) Consumer func = text -> System.out.println(text); func.accept("Hello"); 위의 람다식은 다음과 같이 System.out::println이라는 메소드 레퍼런스로 표현할 수 있다. Consumer func = System.out::println; func.accept("Hello"); 메소드 레퍼런스는 ClassName::MethodName 형식으로 입력한다. 메소드를 호출하는 것이지만 괄호는 생략한다. 위의 예제처럼, 메소드 레퍼런..
[Java] Stream API - filter, map, flatMap Stream API란? java8부터 추가된 API로 함수형 인터페이스(람다식)를 적용하여 컬렉션과 같은 저장요소를 반복적으로 처리할 수 있는 기능이다. 1. filter filter는 말 그대로 특정조건으로 스트림의 컨텐츠를 필터링하는 것이다. 함수에 filter(조건)으로 조건을 넣으면 된다. 아래 코드를 보면 c로 시작하는 문자열만 필터링하도록 조건을 설정하였고 이 조건에 해당하는 문자의 stream이 리턴되었다. List list = Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1", "c3"); Stream stream1 = list.stream(); Stream filtered = stream1.filer(s -> s.startsWith("c")); fil..
[Java] 람다식(lambda expression) 람다식이란? 람다 함수는 java8부터 추가된 기능으로 익명 객체를 생성하기 위한 표현식을 말한다. 람다식 이전 public interface Goods{ public void doSome(); } public class Computer implements Goods{ @Override public void doSome() { System.out.println("do Operation!"); } } public class Main{ public static void main(String[] args){ Goods com = new Computer(); com.doSome(); } } 기존 자바에서 interface를 이용해 다형성을 제공하기 위해서는 interface를 만들고, 그것을 구현한 class를..
[Java] 익명 객체(anonymous object) 익명 객체란? 클래스를 정의하지 않고 객체를 정의하는 방법 -> 1회용 클래스 사용 -> 재사용 불가능한 클래스 (객체를 1번 만드는 용도) 이벤트 객체, 스레드 객체, 람다식, 스트림 등에서 사용 1. 익명 자식 객체 생성 부모 타입으로 필드/변수를 선언하고, 자식 객체를 초기값으로 대입한다고 하자. 이 때 해야할 일은 부모클래스를 상속해서 자식 클래스 선언 new 연산자를 이용해 자식 객체 생성 생성한 후 필드/로컬 변수에 대입 class Child extends Parent{ } class A{ Parent field = new Child(); void method(){ Parent local = new Child(); } } 하지만 자식 클래스가 재사용되지 않고, 단지 필드/변수의 초기값으로만 사..
[Java] Input/Output 정리 System.out System.out.println(); System.out.println("%d", n); - 실수형, 문자형 자료 출력 가능 Scanner next[자료형]으로 입력받을 수 있음 hasNext[자료형]을 이용해서 입력받을 수 있는 자료형이 있는지 구할 수 있음 두 수 입력 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a, b; a = scanner.nextInt(); b = scanner.nextInt(); System.out.println(a + b); } } 입력에서 정수가 주어지는 동안 계속 입력 받음 public class Main..