21년 2월 22일

한 일

  • 배열과 포인터

    • index는 왜 0부터 시작하나

      • base + index*sizeOfElement 가 주소가 되므로 index는 0부터 시작한다
      • 0부터 시작하지 않으면 첫번째 원소의 주소를 사용할 수 없기 때문에 메모리 낭비
    • 배열 선언과 초기화

      int *arr1 = malloc(sizeof(int) * 10);
      int arr2[10];
          
      // arr1[1] = *(arr+1) = *(1+arr) = 1[arr]
      
    • C언어의 함수는 일급 객체인가?

      • 일급 객체는 변수로 할당할 수 있고, 매개변수로 넘겨주고 리턴값으로 반환할 수 있어야 한다.

      • 함수에 대한 포인터를 넘겨주면 C언어에서도 일급객체로 사용 가능

        void foo(int x) {
          printf("%d\n",x);
        }
              
        void foreach(int count, void (*apply)(int)){
          for(int i = 0; i < count; i++) {
            apply(i);
          }
        }
        
    • 배열의 단점

      • 사이즈가 정적이다.
      • 사이즈를 바꾸려면 복잡한 과정을 거쳐야 한다.
        1. 새로운 사이즈로 배열 생성
        2. 기존 배열의 원소를 새로운 배열로 복사
        3. 기존 배열 변수에 새로운 배열 주소를 할당
    • 배열 vs ArrayList

      • ArrayList는 사이즈가 꽉찼을 경우 위의 단계(배열의 사이즈 바꾸기)를 코드 내부에서 알아서 해준다.
    • 람다

      • 자바에서는 함수형 인터페이스를 오버라이드한 익명 클래스이다.
    • 스트림

      • 연속적인 데이터의 흐름..?
      • 원소를 하나하나씩 처리해줄 수 있도록 해주는 객체
      • 함수형 프로그래밍의 원칙으로 구현되었기 때문에, Side effect가 없다
      • parallel stream 사용하면 병렬 처리 유용하다 -> 나중에 찾아볼 것.
      • lazy loading 으로 실행한다.
      • 서버에서 잘 사용하지 않는 이유 -> 병렬로 사용한다 -> cpu 자원을 많이 먹는다 -> 서버에서 cpu 자원을 많이 먹으면 좋지 않다.

잘못한 것

잘한 것

느낌

할 일

  • 코드스쿼드 미션하기
  • 자바의 정석 읽기
  • 프로그래머스 문제 풀기