TIL

250103 금 TIL

파란배개 2025. 1. 3. 16:49

명령형

-> for, if

-> '어떻게'에 집중

-> 장점: 실수할 확률이 존재, 코드가 복잡해지면 의도가 안 보인다.

-> 단점: 직관적, 자유도 높음

//명령형 -> 실수할 확률이 존재, 코드가 복잡해지면 의도가 잘 안 보인다.
System.out.println("=== 명령형 ===");
for(int i = 0; i < arr.length; i++){
    System.out.println(arr[i]);
}

선언형

-> stream

-> '무엇을'에 집중

//선언형 -> 뭘 하겠다 선언
System.out.println("=== 선언형 ===");
Arrays.stream(arr)
        .forEach(System.out::println); //forEach 안에는 이미 만들어진 명령 => 메서드 레퍼런스
//메서드 레퍼런스는 람다 표현식이 단 하나의 메서드만을 호출하는 경우에,
//이 람다 표현식을 더 간단하게 표현할 수 있게 해주는 기능이다.
//이 표시는 더블 콜론(double colon)이라고 부른다.

Arrays.stream(arr)
        .forEach(Main::test);
//이 경우, Main에서 test라는 메서드를 참조해서 사용하겠다는 의미가 된다.

 

예제

public static void exam3() {
    int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    //arr의 값에서 각각 2배된 배열 명령형
    System.out.println("명령형 2배");
    for(int i = 0; i < arr.length; i++) {
        System.out.println(arr[i] * 2);
    }
    //arr의 값에서 각각 3배된 배열 선언형
    //Arrays.stream(arr)의 의미는 arr배열을 스트림으로 변환한다는 의미이다.
    System.out.println("선언형 3배");
    Arrays.stream(arr).forEach(n -> System.out.println(n * 3));
    //arr의 값에서 각각 100배된 배열 선언형
    System.out.println("선언형 100배");
    Arrays.stream(arr).map(n -> n * 100).forEach(System.out::println);
}

--------

TDD

TDD는 분할정복, RGB를 기억하라!

R -> 실패하는 테스트 케이스 작성

G -> 테스트를 통과하는 코드 작성(최소한의 코드로 해결. 꼼수를 부려도 됨) <=이게 TDD의 핵심

B -> 리팩토링 할게 있으면 하고 없으면 다시 R로

키워드

IntStream.rangeClosed()

Arrays.stream()

스트림