20210119 - TIL

Starve·2021년 1월 19일
1

TIL

목록 보기
13/38
post-thumbnail

TIL

  • 람다식 메소드 공부

    • andThen() :

      • Interface AB = InterfaceA.andThen(InterfaceB);

      • 인터페이스 A를 호출하여 처리를 한 후, 결과를 인터페이스B의 매개값으로 넘겨 최종 결과를 리턴한다.

      • 주로 compose()와 같이 다뤄지며, 인터페이스를 순차적으로 연결하여 첫번째의 처리 결과를 두번째에 매개값으로 제공하여 최종값을 얻을 때 사용된다.

        compose()의 경우:
        Interface AB = InterfaceA.andThen(InterfaceB);
        andThen()과 반대로, B를 호출하여 처리 한 후, 결과를 A의 매개값으로 넘겨 최종결과를 리턴한다.

  • 클로저(closur):

    • 람다 계산식(lamda Calculus)의 구현체이다.

    • 함수는 일반적으로 외부에서 인자를 받아 로직을 처리하지만,
      클로저는 외부 범위의 변수를 함수 내부로 바인딩 하는 기술이다.

    • 외부 함수가 종료 되어도 값이 유지가 되며, 이러한 유지가 가능한 이유는 함수에서 사용한 값들은 클로저가 생성되는 시점에 정의되고, 함수가 복사되어 따로 값으로 존재하기 때문이다.

    • 자바 내에서 클로저는 함수의 인스턴스이며, 외부 변수를 참조하는 익명클래스가 클로저와 비슷하다 볼 수 있다.

    • 예시:

      @FunctionalInterface //함수형 인터페이스
      interface TvCondition {
        boolean isStatus();
      }
      
      void remoteControl() throws InterruptedException {
        Tv tv = new Tv();
        tvOff(() -> !tv.isRunning());
      }

      위와 같이 인자 없이 boolean 값을 리턴하는 함수형 인터페이스를 사용 할 경우,
      받아오는 정보가 없기 때문에 필요한 정보를 외부에서 참조해야한다.
      참조 한 변수는 컴파일러에 의해 복사되는데, 이것이 클로저이다.

  • 고차함수(Higher order function)

    • 함수를 인자로 전달받거나, 함수를 결과로 반환하는 함수.

      • 위의 조건을 만족하기 위해, 일급객체(First-Class Citizen)이어야 한다.

        일급 객체 조건

        1. 변수나 데이터 할당을 할 수 있어야한다.
        2. 객체의 인자로 넘길 수 있어야한다.
        3. 객체의 리턴값으로 리턴할 수 있어야한다.
    • 인자로 받은 함수를 필요한 시점에 호출하거나, 클로저를 생성하여 반환한다.

    • 함수도 객체처럼 리터럴하게 다룰 수 있다.

    • 예제:

      Function<Set<Integer>, Integer> sum
            = factors -> factors.stream().reduce(0, Integer::sum);
      
        Function<Integer, Integer> factorsSum = factors.andThen(sum);
  • 프로그래밍 패러다임(programming paradigm)

    • 프로그래밍의 패러다임 형태로, 프로그래머에게 프로그래밍의 관점을 갖게 해주고 결정하는 역할을 한다.

    • 프로그래밍을 어떤 관점으로 보고 이해하는지에 따라 지향하는 프로그래밍의 원칙들도 달라진다.

    • 종류:

      • 명령형 프로그래밍 (절차지향 / 객체지향 프로그래밍)
      • 선언형 프로그래밍 (함수형 / 반응형 프로그래밍)
  • 객체 지향 패러다임과 함수형 패러다임:

    • 공통점:
      • 코드의 유지보수가 용이하고, 직관적인 코드 분석이 가능하다.
    • 차이점:
      • 객체지향 프로그래밍은 명령형, 함수형 프로그래밍은 선언형 프로그래밍이다.
        이로인해, 객체지향 프로그래밍은 프로그램 끼리 상호작용을 하는 객체들의 집합이라고 볼 수 있고,
        함수형 프로그래밍은 상태값을 가지지 않은 함수 값들의 연속으로 볼 수 있다.
      • 객체지향 프로그래밍은 함수의 동작을 캡슐화 하여 코드의 이해도를 높이는 반면,
        함수형 프로그래밍은 함수의 동작을 최소화 하여 코드 이해도를 높인다.

Todo

  • 어제작성 했던 코드 리팩토링 작업 및, 미션 2 완료

  • 모르는 부분에 대한 검색 (비중이 엄청엄청 컸던 것 같다.)

  • 운동

느낀점

  • 지금은 검색해보고, 응용해보고 하는 과정에서 이해도가 높아졌지만, 수업 들을 때만 해도 내가 듣고있는게 뭐지? 이해한게 맞는건가? 하는 생각이 자꾸만 들었던 것 같다.
    생소하기도 하고 어려웠던 만큼, 미션제출을 했다는 것에 더 감격 스러운 것 같다.
    아직은 내가 짠 코드만 설명하기도 벅찬 수준이지만, 주말에 좀 더 공부를 할 예정이다.
  • 원래 점심에 가볍게 산책후 저녁에 조깅을 했는데, 오늘은 미션 때문에 마음이 조급해져서 조금밖에 운동을 하지 못한게 좀 아쉽다.

  • 다른 분들은 중간중간 다른 책도 읽어보시고 그러시던데...,나는 미션 수행도 벅차서 어떻게 시간을 비워야할지 잘 모르겠다.

    이런 고민만 엄청 많이 한것같은데.... 실력도 안되면서 이것저것 건들여보고 싶은 욕심만 가득한것 같다.🥲

profile
노력

0개의 댓글