언어/Java (12) 썸네일형 리스트형 스트림의 이해 스트림의 배경 컬렉션 인스턴스에 숫자들이 저장되어 있는데 이 중 홀수들의 합을 구하고 싶다고 가정하자. 지금까지는 반복문을 돌며 if문으로 홀수인지를 검사하고, 홀수인 것을 따로 모아 그들을 또 더하는 등의 작업을 해왔다. 이러한 작업은 꽤 빈번하게 일어나는데 이를 좀더 수월하게 하고자 만들어진 것이 스트림이다. 홀수인 수들을 찾아서 리스트를 만드는 것이 작업 1 이들을 더하는 것이 작업 2라고 해보자. 이들 중 홀수만 걸러내는 것은 Filter로 걸러낸 것이라고 생각할 수 있다. 그리고 이러한 작업1,2를 파이프를 통과시키는 것이라 했을 때, 우리는 기존의 컬렉션 인스턴스를 파이프로 흘려보낼 수 있는 일련의 자료들 즉, 스트림이라고 생각할 수 있다. 스트림 스트림을 생성하고 이를 대상으로 '중간연산'과.. Optional 클래스 코드가 방대해지면 if else문이 좀 거슬리게 된다. 왜냐하면 분기가 계속해서 나뉘어지기 때문이다. 그래서 사용하는 것이 Optional 클래스라고 일단 알아두자. 일단 NullPointerException 예외의 발생 상황을 한번 보자. class Freind { // 친구 정보 String name; Company cmp; // null 일 수 있음 public Friend(String n, Company c) { name = n; cmp = c; } public String getName() {return name;} public Company getCmp() {return cmp;} } class Company { // 친구 정보 에 속하는 회사 정보 String cName; ContInfo c.. 메소드 참조 (Method Reference) 메소드 참조의 4가지 유형과 메소드 참조의 장점 1. static 메소드의 참조 2. 참조변수를 통한 인스턴스 메소드 참조 3. 클래스 이름을 통한 인스턴스 메소드 참조 4. 생성자 참조 기본적으로 람다식보다 조금 더 코드를 단순하게 할 수 있다는 장점이 있다. (특정 경우에 대해서만 람다식을 조금 더 줄여쓸 수 있음) 일부 람다식을 메소드 참조로 대신하게 할 수 있다. static 메소드의 참조: 람다식 기반 예제 class ArrangeList { public static void main(String[] args) { List ls = Arrays.asList(1,3,5,7,9); ls = new ArrayList(ls); // 타입인자 Integer 전달됨 Consumer c = l -> Coll.. 정의되어 있는 함수형 인터페이스 [복습] 람다와 함수형 인터페이스 앞의 람다의 소개에서 봤던 것을 대충 정리하자면 A -> B 가 람다식이라 할 때 -> 는 연산자이고 ->의 왼쪽에 매개변수에 대한 선언정보, 오른쪽에 람다식으로 표현하고자 하는 연산문이 들어오게 된다. 함수형 인터페이스란? 인터페이스 중 구현해야할 추상 메소드가 딱 하나 있는 인터페이스를 가리켜 함수형 인터페이스라고 한다. 우리가 앞의 예시에서 봤듯이 우리가 람다식을 작성하는 대상이 바로 함수형 인터페이스이다. 람다는 인스턴스보다 기능 하나가 필요한 상황을 위하여 있다. 앞에서 보았던 Collections.sort(list, new SLenComp()); // 정렬 과 같이 두번째 인자로 필요한 것은 사실 compare 메소드이나 메소드를 인자로 주는 것이 불가능하기 때문에 인스턴스를 생성하여 두번째 .. 람다(lambda)의 소개 다음과 같은 익명 클래스로 짠 코드가 있다고 가정하자. interface Printable { void print(String s); } class Lambda { public static void main(String[] args) { Printable prn = new Printable() { // 익명 클래스 public void print(String s) { System.out.println(s); } } prn.print("What is Lambda"); } } 이는 람다로 다음과 같이 나타낼 수 있다. interface Printable { void print(String s); } class Lambda { public static void main(String[] args) { Print.. 네스티드(Nested) 클래스와 이너(Inner) 클래스 네스티드 클래스의 구분 기본적으로 클래스 안에 정의된 클래스를 네스티드 클래스 라고 한다. 그리고 static 이 붙은 네스티드 클래스를 static 네스티드 클래스라 부르고 그렇지 않은 네스티드 클래스를 Non - static 네스티드 클래스 또는 이너 클래스 라고 부른다. 또한 이너 클래스 역시 세가지로 나뉘는데 멤버 (이너) 클래스, 로컬 (이너) 클래스, 익명 (이너) 클래스 의 세개로 나뉘어진다. Static 네스티드 클래스 Outer 클래스의 static 변수 공유 class Outer { private static int num = 0; static class Nested1 { void add(int n) { num += n; // Outer 클래스의 static 변수 공유 } } stati.. 매개변수의 가변 인자 선언 class Varargs { public static void showAll(String...vargs) { System.out.println("LEN: " + vargs.length); for(String s : vargs) System.out.print(s + '\t'); System.out.println(); } } 위와 같이 가변인자를 선언가능하고 이 때 vargs는 String 배열의 참조 변수가 된다. 이는 컴파일러가 위의 코드를 배열 기반 코드로 수정을 하는 것이다. 즉, showAll("Box", "Toy") 를 호출하면 showAll(new String[] {"Box", "Toy"}) 를 호출한 것과 같이 되도록 컴파일러에서 처리해주는 것이다. 이전 1 2 다음