학습(구)/Java(구)

인터페이스와 람다

잉아당 2021. 3. 30. 17:55
728x90

인터페이스 

- 객체 메서드의 사용법인 추상 메서드를 담고 있는 개발자 정의 타입입니다.

- 직접 접근하는것이 아닌 사용하는 객체와 사용당하는 객체 중간에 위치하여 간접 접근 함으로써 다형성을 구현할 수 있습니다.

- 해당 인터페이스를 구현하고 있으면 인터페이스 타입 변수에 어떠한 객체가 들어와도 업캐스팅되어 오버라이딩 된 실체 메서드가 동적 바인딩 되어 다형성을 구현 할 수 있습니다.

- 함수적 인터페이스 : 추상 메서드를 1개만 가지는 인터페이스로써 타겟 타입을 이용해 인터페이스를 반영한 클래스 생성이 용이합니다. 

- 람다식 : 인터페이스의 1개뿐인 추상 메서드에 대한 구현 클래스의 실체 메서드를 구현하는 수단으로 몸통만 표현이 되며 자동으로 객체 생성이 됩니다.

- 객체 프로그램에서 함수형을 사용할 때는 병렬처리, 이벤트 핸들러 등 을 작성할 때 사용합니다.

 

인터페이스 타입 정의 

- 별도의 java 파일로 interface 예약어를 사용하여 객체 메서드의 사용법을 정의합니다.

- 추상 메서드는 모두 구현해야 하므로 추가적인 기능을 제공하고 다른 구현 클래스에 영향을 받지 않기 위해 default메서드와 static 메서드를 작성하면 됩니다.

 

인터페이스 구현 클래스 정의

- 클래스 생성 시 implements 예약어로 지정하면서 클래스를 정의합니다.

- 모든 추상 메서드는 구현하여 오버라이딩 되어져야 합니다.

- 람다식을 사용하면 작성한 몸통 내용을 바탕으로 타겟 타입에 대해 익명 클래스가 자동으로 생성됩니다.

 

구현 객체 생성

- new 생성자를 이용해 객체를 생성합니다.

- 함수적 인터페이스는 람다식에 의해 구현 객체가 자동으로 생성이 됩니다.

 

함수적 인터페이스와 타겟 타입

- 타겟 타입 : 람다식을 사용할 때 배정 연산자 왼쪽에 위치한 피연산자 혹은 형식 매개변수의 타입을 의미합니다.

- 람다식은 인터페이스를 반영한 구현 클래스의 생성, 구현 클래스로부터의 객체 생성까지 모두 수행하는 표현식입니다.

 

표준 API의 함수적 인터페이스 

- Consumer: accept() : 매개값이 있고 리턴값이 없음

- Supplier : getXXX() : 매개변수 없고 리턴값이 있음

- Function : applyXXX() : 매개값과 다른 타입의 값을 리턴

- Operator : applyXXX() : 매개값과 동일한 타입의 값을 리턴

- Predicate : testXXX() : true/false 값을 리턴

 

표준 API 인터페이스를 이용한 프로그램 제작

- 함수 수행에 필요한 정보는 매개변수에 들어가게 되는데 데이터 값은 call by value의 형태로 들어가게 되고 다른 함수는 call by reference의 형태로 들어가게 됩니다. 

- 객체 프로그램에서는 함수가 독립된 단위로 존재 할 수 없기 때문에 메서드를 포함한 객체를 사용해야 합니다.

- 이때 람다식을 사용하며 람다식을 이용해 인터페이스를 반영한 구현 클래스의 생성 , 그 구현 클래스로부터의 객체 생성 이 이루어지도 자동으로 매개 변수에 넘어가게 됩니다.

- 이러한 방식에서 주의 해야 할 점은 A 에서 B를 호출하고 B는 람다식을 사용하는데 이 람다식을 A에서 생성하기 때문에 B에서는 다시 역으로 A를 참조하여 람다식을 사용합니다.

 

메서드 참조

- 람다식으로 표현하는 실체 메서드의 내용이 다른 메서드의 호출만 하고 있을때는 -> 이 아닌 :: 을 이용하여 사용합니다.

ex) 클래스명 :: 메서드명

'학습(구) > Java(구)' 카테고리의 다른 글

컬렉션과 컬렉션 스트림  (0) 2021.04.05
멀티스레드  (0) 2021.04.05
어노테이션  (0) 2021.03.22
예외 처리  (0) 2021.03.22
추상 클래스 및 추상 메서드/final  (0) 2021.03.22