본문 바로가기
부트캠프/코드스테이츠 백엔드부트캠프 43기

코드스테이츠 백엔드 부트캠프 43기 (16,17일차-자바 심화 회고)

by 고구마는호박고구마 2023. 1. 7.
자바 심화

애너테이션, 람다, 스트림을 배웠다. 학부시절 별로 사용하지 않는것 같아(어려웠음...) 제대로 배우지 않고 넘어갔던 부분 그리고 코딩테스트를 준비하면서 몇 알고리즘은 정말 말도 안되게 짧은 코딩이 있었다. 그리고 나는 그걸 보고 "와 야무지다... 저건 무슨 문법이지? "  라고 했던게 바로 스트림 이였다. 그런데 오늘 딱 마침 자바심화에서 람다와 스트림을 배우게 되었다.


아직 람다, 스트림을 완벽히 내 몸으로 흡수하지 못하여 오늘은 간단한 개념정도만 정리하려고 한다. 


람다

람다는 우리가 사용하는 메서드를 좀 더 간단하고 편리하게 사용하기 위한 문법이다.

// 기존 방식
int sum(int num1, int num2) {
	return num1 + num2;
}

// 람다식 -> * 메서드 이름하고 반환타입이 없음 * 
(int num1, int num2) -> {
	num1 + num2
}

스트림

배열을 순회할때 -> for문

리스트를 순회할때 -> Iterator

배열, 리스트를 순화할때 상위호환 -> Stream (가독성이 좋고 편리한 메서드들을 쉽게 구현가능)

 

스트림은 생성-중간 연산-최종 연산으로 이루어지고 일회성이다. 최종 연산이 끝나면 재사용 불가능

 


스트림 생성 (1.배열-> 스트림  2.리스트->스트림)

int[] num = {1, 3, 5};
Stream<Integer> stream = Arreays.stream();

List<Integer> numArray = new ArrayList<>();
numArray.add(1);
numArray.add(3);
numArray.add(5);
Stream<Integer> stream1 = numArray.stream();

 


스트림 중간연산 

 - 조건에 맞는 데이터들을 뽑아내는 과정 

 - 중복을 제거 한다거나(distinct메서드) , 특정 조건의 데이터만 뽑아낸다거나 (filter 메서드)

 

List<String> names = Arrays.asList("자바", "파이썬", "c++", "자바");

        names.stream()
                .distinct() //중복 제거하는 메서드 (중간 메서드)
                .forEach(element -> System.out.println(element)); // 최종 연산 (출력)
        System.out.println();

출력으로 자바, 파이썬, c++ 만 출력이 된다.

 

이외에도 map, sorted 등 많은 메서드들이 있다. 확실히 스트림은 알아두면 편한데 알아두기가 쉽지 않은것같다.

 


 

스트림 최종연산

 - 최종적으로 리턴하는 메서드 Ex) forEach 처럼 출력

 - 개수를 리턴하거나, 총합, 평균, 최고값 등등 알아두면 편리한 메서드들이 존재

 

		int[] number = {1,2,3,4,5};

        // 합계
        long sum = Arrays.stream(number).sum();
        System.out.println("number의 전체 요소 합 " + sum); // 15 출력

 


 

댓글