-
[Java] 람다 쉽게 설명IT/개발(자바, 서블릿, 스프링 등) 2025. 5. 5. 14:12
인터페이스는 new 키워드로 인스턴스 생성을 할 수 없다.
보통, 인터페이스를 구현한 클래스 객체를 만들고, 추상메서드를 구현한다.
그리고 인터페이스를 구현한 클래스로 인스턴스를 생성한다.
public interface 인터페이스 { void 메서드(); } public class 클래스 implementes 인터페이스 { // 인터페이스를 구현한 클래스를 만든다. public void 메서드() { System.out.println("test"); // 추상메서드를 구현한다. } } public class 메인클래스 { public static void main(String[] args) { 인터페이스 a1 = new 클래스(); //인터페이스를 구현한 클래스로 인스턴스를 생성 } }
혹은 인터페이스를 new 해서 추상메서드를 바로 구현하면, 익명 내부 클래스 정의와 생성을 동시에 할 수 있다.
(하지만 알다시피 인터페이스 자체로는 객체를 만들수는 없다.
위의 코드에서 new 인터페이스명() 은 그렇게 보일 뿐이지,
사실 자식 클래스를 생성해서 implements 하고 클래스 초기화 한 것과 다름이 없다.
그냥 익명 내부 클래스를 작성함과 동시에 객체를 생성하도록하는 Java의 문법으로 보면 된다.)
// 인터페이스를 new 해서 추상메서드를 바로 구현하면, 익명 내부 클래스 정의와 생성을 동시에 가능 인터페이스 a2 = new 인터페이스() { public void 메서드() { System.out.println("난 익명 내부 클래스!"); } };
람다식을 쓰면? 클래스를 만들지 않고 인터페이스를 사용할 수 있다!
람다식을 쓰려면, 아래 두가지 조건이 필요하다.
1. 인터페이스로만 만들 수 있다.
2. 하나의 추상 메소드만 선언되어 있는 인터페이스만 가능하다.//익명 내부 클래스를 람다식으로 바꾸는 과정 인터페이스 a2 = new 인터페이스() { //자료형을 예측할 수 있기 때문에 new 인터페이스() 생략 public void 메서드() { //메서드가 하나이기 때문에 public void 메서드() {~} 생략 System.out.println("난 익명 내부 클래스!"); } }; //람다식 인터페이스 a3 = () -> { System.out.println("난 람다식!"); };
위에서 설명한 내용대로 메서드를 호출하면 결과는 아래와 같다
a1.메서드(); //출력: test a2.메서드(); //출력: 난 익명 내부 클래스! a3.메서드(); //출력: 난 람다식!
'IT > 개발(자바, 서블릿, 스프링 등)' 카테고리의 다른 글
[JavaScript] setTimeout 함수 사용법 (0) 2021.09.09 [React] 리액트 애플리케이션에서 이미지 경로 정리 (0) 2021.09.08 [React] create-react-app으로 쉽게 리액트 프로젝트 시작하기 (0) 2021.09.06 [Java] 자바의 타임존 이야기 (0) 2020.04.03 [Java] 기본 입출력 작업 (0) 2020.01.30