내가 개발해볼게!!

Do it! 자바 프로그래밍 입문 11일차 본문

Language/Java

Do it! 자바 프로그래밍 입문 11일차

보송송희 2022. 7. 17. 18:33

교재 맨앞쪽 진도표에 나와 있는 15일 코스로 공부하고 있습니다!!

Do it! 자바 프로그래밍 입문 11일차
13장 내부 클래스, 람다식, 스트림
- 13-1 내부 클래스
- 13-2 람다식
- 13-3 스트림

13장 내부 클래스, 람다식, 스트림

내부 클래스에 대해 배웠습니다.

어떤 클래스 A가 클래스 B하고만 관련이 있을 때, 클래스 A를 클래스 B 내부에 선언해 사용할 수 있습니다. 내부 클래스의 종류로 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스가 있습니다. 내부 클래스가 클래스 내부에 정의되면 인스턴스 내부 클래스, static 키워드가 사용되면 정적 내부 클래스, 메서드 내부에 정의되면 지역 내부 클래스라고 할 수 있습니다. 

 

인스턴스 내부 클래스는 인스턴스 변수와 같은 위치에 선언되고, 외부 클래스에서만 사용될 객체를 선언할 때 쓰입니다. 

외부 클래스를 선언한 뒤 내부 클래스를 선언하고, 내부 클래스의 메서드를 외부 클래스가 호출하는 전반적인 흐름을 알 수 있었습니다.

 

정적 내부 클래스는 외부 클래스가 생성되지 않더라도 사용할 수 있습니다. static 예약어를 붙여 정적 내부 클래스를 정의할 수 있습니다. 

 

지역 내부 클래스는 메서드 내부에 정의되는 클래스이기 때문에 해당 메서드 내부에서만 사용할 수 있습니다. 

line 7에 Runnable 자료형의 메서드 getRunnable(int i)가 정의되었고, 메서드 내부에 변수 num이 선언되는 방식과 똑같은 방식으로 지역 내부 클래스 MyRunnable이 선언되었습니다. 이때 getRunnable에서 사용된 변수 i와 num은 메서드 호출이 끝난 뒤에도 참조가 가능한 상수로 취급됩니다.

 

익명 클래스는 이름 그대로 클래스 이름을 사용하지 않는 클래스입니다. 

앞의 예제에서 선언한 지역 내부 클래스 MyRunnable를 익명 클래스 형식으로 다시 선언한 예시입니다. 

 

  • 람다식에 대해 배웠습니다.

함수의 구현, 호출만으로 프로그램을 만들 수 있는 함수형 프로그래밍이라는 프로그래밍 방식이 있는데, 자바에서 제공되는 함수형 프로그래밍 방식이 람다식입니다. 람다식은 기존 메서드에서 메서드 이름, 반환형을 빼고 -> 기호를 사용한 형태를 띕니다.

 

람다식으로 메서드 getMax()를 구현한 예입니다. 먼저 인터페이스를 만들어 거기에 추상 메서드 getMax()를 선언하고, 메인 코드에서 인터페이스형 변수 max에 람다식을 대입한 다음 변수를 호출하는 식으로 사용할 수 있습니다.

람다식을 사용하면 간결한 코드를 구현할 수 있는 대신 한 인터페이스에는 오직 하나의 메서드만 선언될 수 있습니다.

 

다음과 같이 람다식이 변수 s에 대입되어 전달될 수 있는데, 이때 매개변수의 자료형은 인터페이스형입니다. 

 

메서드의 반환형을 람다식의 인터페이스형으로 선언하면 람다식을 반환 값으로 쓸 수 있습니다. 

 

개인적으로 교재를 공부하면서 람다식 부분이 어려웠어서 다시 공부할 필요성을 느꼈습니다..

 

  • 스트림에 대해 배웠습니다.

스트림은 자료 처리에 대한 기능이 미리 구현되어있는 클래스입니다. 

스트림 연산에는 자료를 변경해 또 다른 자료를 생성하는 중간 연산, 생성된 자료를 소모하며 연산을 수행하는 최종 연산이 있습니다. 최종 연산은 마지막에 딱 한 번만 호출됩니다.

중간 연산에는 filter(), map() 등의 연산이 있고 최종 연산으로는 forEach(), count(), sum(), reduce() 등이 있습니다.

스트림의 연산을 호출해 사용한다고 기존에 있던 자료가 변경되지는 않습니다. 그리고 한 번 사용한 스트림은 소모되기 때문에 재사용할 수 없습니다.