자바5 [Java] 람다식 (4) 표준 API의 함수적 인터페이스 자바에서 제공되는 표준 API에서 한개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이용해서익명 구현 객체로 표현이 가능하다. 예시로 스레드의 작업을 정의하는 Runnable 인터페이스는 매개 변수와 리턴값이 없는 run() 메소드만 존재하기 때문에 다음과 같이 람다식을 이용해서 Runnable 인스턴스를 실행할 수 있다. public class RunnableExample { public static void main(String[] args) { Runnable runnable = () -> { for (int i = 0; i < 10; i++) { System.out.println(i); } }; Thread thread = new Thread(runnable); thread.start();.. 2021. 12. 31. [Java] 람다식 (3) 클래스 멤버와 로컬 변수 사용 람다식의 실행 블록에는 클래스의 멤버(필드와 메소드) 및 로컬 변수를 사용할 수 있다. 클래스의 멤버는 제약 사항 없이 사용할 수 있지만, 로컬 변수는 제약 사항이 따른다. 1. 클래스 멤버 사용 람다식 실행 블록에는 클래스의 멤버인 필드와 메소드를 제약 사항 없이 사용할 수 있다. 하지만 this 키워드를 사용할 때에는 주의가 필요하다. 일반적으로 this는 익명 객체의 참조이지만, 람다식에서 this는 내부적으로 생성되는 익명 객체의 참조가 아니라 람다식을 실행한 객체의 참조이다. 다음 예제는 람다식에서 바깥 객체와 중첩 객체의 참조를 얻어 필드값을 출력하는 방법이다. 중접 객체 Inner에서 람다식을 실행했기 때문에 람다식 내부에서의 this는 중첩 객체 inner이다. public interfac.. 2021. 12. 30. [Java] 람다식 (1) 람다식 개념과 기본 문법 람다식 (Java8 이상) 람다식이란? 함수적 프로그래밍은 병렬 처리와 이벤트 지향 프로그래밍에 적합하다. 그래서 객체 지향 프로그래밍과 함수적 프로그래밍을 혼합함으로써 더욱 효율적인 프로그래밍이 될 수 있도록 자바 8부터 람다식(Lambda Expression)을 지원한다. 람다식은 익명 함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식을 사용하면 자바 코드가 매우 간결해지고, 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 람다식의 형태는 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다. 람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체 예를 들어 Runnable .. 2021. 12. 30. [Java] 제네릭 (4) 제네릭 타입의 상속과 구현 제네릭 타입의 상속과 구현 제네릭 타입도 다른 타입과 마찬가지로 부모 클래스가 될 수 있다. 사용 예시 public class ChildProduct extends Product {...} 자식 제네릭 타입은 추가적으로 타입 파라미터를 가질 수 있다. 세 가지 타입 파라미터를 가진 자식 제네릭 타입 선언 public class ChildProduct extends Product {...} 제네릭 클래스를 부모로 가질 수 있다. 사용 예제 부모 제네릭 클래스 // 부모 제네릭 클래스 public class Product { private T kind; private M model; public T getKind() { return this.kind; } public T getModel() { return .. 2021. 12. 28. [Java] 제네릭 (1) 개념, 제네릭 타입(class<T>, interface<T>) 왜 제네릭을 사용해야 하는가? 제네릭은 컬렉션, 람다식, 스트림, NIO에서 널리 사용되므로 필수적으로 알아야 한다. 제네릭은 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 한다. 제네릭의 이점 1. 컴파일 시 미리 타입을 강하게 체크해서 에러를 사전에 방지할 수 있다. 2. 타입 변환(casting)을 제거한다. 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. java List list = new ArrayList(); list.add("Hello"); // 문자열 요소를 저장했지만, 요소를 찾아올 때는 반드시 String으로 타입변환해야함 String str = (String) list.get(0).. 2021. 12. 28. 이전 1 다음