[18일차] 자바 - 내부 클래스, 람다식

SOSO·2022년 5월 11일
0

학원

목록 보기
17/59
post-thumbnail

내부 클래스

특정 클래스 내에 또 다른 클래스가 정의되는 것을 의미한다
이런 내부 클래스가 필요한 이유는 지금까지 작업해 왔던 클래스들과는 다르게 독립적이지는 않지만 하나의 멤버처럼 사용할 수 있는 특징이 있다

내부 클래스 종류

종류설명
Member멤버 변수나 멤버 메서드들과 같이 클래스가 정의된 경우에 사용
Local특정한 메서드 내에 클래스가 정의된 경우에 사용
Staticstatic 변수(클래스 변수)와 같이 클래스가 static으로 선언된 경우에 사용
Anonymous참조할 수 있는 이름이 없는 경우에 사용

람다식

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



interface MyInterface{
	//추상메서드
	public abstract void make();
}

public class RamdaMain {
	public static void main(String[] args) {
		//익명내부클래스
		MyInterface my = new MyInterface() {
			//추상메서드 구현
			@Override
			public void make() {
				System.out.println("익명 객체");
			}
		};
		my.make();
		
		System.out.println("-------------------");
		
		/*
		 * 람다식은 익명함수(anonymous function)를 생성하기 위한 식
		 * 람다식의 형태는 매개 변수를 가진 코드 블럭이지만, 런타임 시에는
		 * 익명 구현 객체를 생성
		 * 람다식은 인터페이스의 익명 구현 객체를 생성
		 * 
		 */
		
		//람다식을 사용하면 메모리에 익명 객체가 생성됨
		MyInterface my2 = () -> {
			System.out.println("람다식으로 표시");
		};
		my2.make();
		
	}
}

출력 결과

익명 객체
-------------------
람다식으로 표시

쓰레드

프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미




//Thread 클래스를 상속해서 쓰레드 구현
public class ThreadMain01 extends Thread{
	
	//Thread의 run 메서드 재정의
	@Override
	public void run() {
		for(int i=0;i<10;i++) {
			
			try {
				sleep(1000);//지정된 시간만큼 수행을 멈춤
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
			
			System.out.printf(
				"쓰레드 이름 : %s,",currentThread().getName());
			System.out.printf("temp value : %d%n",i);
		}
	}
	
	public static void main(String[] args) {
		ThreadMain01 th = new ThreadMain01();
		//run()메서드를 직접 호출하게 되면 쓰레드 기능을 사용할 수 없음
		//th.run();
		th.start();// -> run()메서드 호출
	}
	
}

출력 결과

쓰레드 이름 : Thread-0, temp value : 0
쓰레드 이름 : Thread-0, temp value : 1
쓰레드 이름 : Thread-0, temp value : 2
쓰레드 이름 : Thread-0, temp value : 3
쓰레드 이름 : Thread-0, temp value : 4
쓰레드 이름 : Thread-0, temp value : 5
쓰레드 이름 : Thread-0, temp value : 6
쓰레드 이름 : Thread-0, temp value : 7
쓰레드 이름 : Thread-0, temp value : 8
쓰레드 이름 : Thread-0, temp value : 9
profile
한다 열심히

0개의 댓글