Deperecated/JAVA

JAVA - 익명 구현 객체, 람다식

누알라리 2020. 1. 9. 21:46

1. 익명 구현 객체

- 보통 인터페이스, 구현 클래스, Main에서 구현 클래스의 객체를 써서 메소드를 호출하지만,

  일회성의 구현 객를 위해 소스 파일을 만들고 클래스를 선언하는것은 비효율적이다.

- 따라서 소스 파일을 만들지 않고도 구현 객체를 만들 수 있는 방법을 제공하는데, 이것이 익명 구현 객체이다.

 

2. 익명 구현 객체 용도

- UI프로그래밍 이벤트 처리

- 임시 작업 스레드 간편 생성

 

3. 람다식 사용

- 람다식은 인터페이스의 익명 구현 객체를 만든다.

 

4. 람다식

- 메소드를 하나의 "식"으로 표현한 것.

- 함수를 따로 정의하지않고 한 줄에 함수를 써서 그것을 호출하는 방식.

 

- 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없어지므로 람다식을 "익명함수"라고도 한다.

 

- 모든 메소드는 클래스 생성 -> 객체 생성 -> 메소드 호출순으로 해야 사용할 수 있지만,

  람다식 자체만으로도 메소드 역할을 수행할 수 있다.

 

- 람다식은 메소드의 매개변수로 전달되어지는 것이 가능하다.

 

5. 익명 구현 객체 생성 예시

인터페이스 변수 = new 인터페이스()
{
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
};
*인터페이스*
package Hyunndy_Toy_Package;

public interface HyunndyInt {

	int MAX_AGE = 20;
	
	void EatSomething();
}
Main에서의 익명 구현 객체 생성

package Hyunndy_Toy_Package;

public class Hyunndy{
	public static void main(String[] args)
	{
    	// 인터페이스 변수 = new 인터페이스()
		HyunndyInt rc = new HyunndyInt()
		{
        	// 인터페이스의 추상 메소드의 실체 선언
			public void EatSomething() 
			{
				System.out.println("아아악");
			}	
		};
		
		rc.EatSomething();
	}
}

 

6. 자바 컴파일러

- 모든 객체는 클래스로부터 생성되고, 익명 구현 객체 또한 그렇다.

- 따라서 위의 코드를 컴파일하면 자동으로 클래스 파일이 생성된다.

 

7. 익명 자식 객체 생성 ~클래스~

7-1) 익명 객체 필드 사용

7-2) 익명 객체 로컬 변수 사용

7-3) 익명 객체 매개값 사용

 

*부모클래스*

package Hyunndy_Toy_Package;

public class Sara{
	void wake()
	{
		System.out.println("7시에 일어납니다.");
	}
}

*익명 자식 객체 생성*

package Hyunndy_Toy_Package;

public class Hyunndy{
	
	/* 필드 선언과 초기값 대입*/
	Sara Sara1= new Sara() {
		void work()
		{
			System.out.println("출근합니다.");
		}
		
		//override
		void wake()
		{
			System.out.println("6시에 일어납니다.");
			work();
		}
	};
	
	
	void method1() {
		
		/* 로컬 변수 선언과 초기값 대입 */
		Sara localSara = new Sara() {
			void walk()
			{
				System.out.println("산책합니다.");
			}
			
			void wake()
			{
				System.out.println("7시에 일어납니다");
				walk();
			}
		};
		
		//로컬변수 사용
		localSara.wake();
	}
	
	void method2(Sara sar)
	{
		sar.wake();
	}
	

}

* 익명 자식 객체 생성 RESULT *

package Hyunndy_Toy_Package;

public class ResultClass {
	public static void main(String[] args)
	{
		Hyunndy H = new Hyunndy();
		
		// 익명 객체 필드 사용
		H.Sara1.wake();
		
		// 익명 객체 로컬 변수 사용
		H.method1();
		
		// 익명 객체 매개값 사용
		H.method2(
				new Sara() {
					void study()
					{
						System.out.println("공부합니다");
					}
					
					void wake()
					{
						System.out.println("8시에 일어납니다.");
						study();
					}
				}
				
		);
	}
}

 

'Deperecated > JAVA' 카테고리의 다른 글

JAVA - 중첩 클래스&중첩 인터페이스  (1) 2020.01.11
JAVA - 예외 처리  (0) 2020.01.10
JAVA - 인터페이스  (0) 2020.01.09
JAVA - 어노테이션  (0) 2020.01.09
JAVA 기본서 공부 5 - 클래스  (0) 2020.01.05