20210218 - TIL

Starve·2021년 2월 17일
0

TIL

목록 보기
34/38
post-thumbnail

TIL

  • ArrayList에 크기 지정 시:
    ArratList의 크기를 지정해 줄 경우, capacity의 값이 지정한 크기로 지정 된다.
    이 capacity는 데이터가 꽉 찼을 때 또 데이터 입력이 발생되면 지정된 크기의 약 1.5배 + 1 정도의 큰 배열이 새롭게 생성되어, 가지고 있던 데이터를 복사하여 배열을 반환하게 된다.
    크기가 정해진 데이터를 저장해야할 때는 크기를 지정해주는 것이 불필요하게 데이터를 이동하고 삭제하는 과정을 실행하지 않기 때문에 속도적으로 이득을 볼 수 있으나,
    추후 비즈니스로직 변경이나 다른 사유로 인해, 사이즈가 변경될 수 있는 가능성이 크기 때문에 굳이 크기가 정해져있지 않은 데이터를 크기가 크다는 이유로 추측해서 사이즈를 지정할 필요는 없다.(사이즈가 있다고 해도 영원히 그 사이즈가 아닐 수도 있음!)
  • BufferdReader가 효율적인 이유:
    기본 입출력 스트림에 버퍼기능을 추가한 스트림을 사용하여 입력받기 때문에, 입력된 데이터가 바로 프로그램 내로 전달되지 않고 문자를 버퍼링하여 전달되기 때문에, 프로그램의 접근 속도가 더 빨라진다.
    더 많은 데이터를 처리할 때는 BufferdReader가 더욱 효율적이게 된다.
  • try-with-resources

    • 1개 이상의 자원을 선언한 try문. try리소스 문이라고도 부른다.

      • 이 때, 자원은 프로그램이 끝날 때 닫혀야 하는 객체를 뜻한다.

      ex) InputStream, BufferdReader 등. close()메서드를 호출하는 것들.

    • Java7부터 추가된 문법이다.

    • statement(문법)의 끝에서 각각의 지정해준 리소스가 닫히는 것을 보장한다.
      ex)

      try (Resource resource = getResource()) {
          use(resource);
      } catch(...) {
          ...
      }
      
      // 복수의 자원 객체를 전달
      try (Resource resource1 = getResource();
           Resource resource2 = getResource()) {
          use(resource);
      } catch(...) {
          ...
      }
  • 일급 컬렉션(First Class Collection):

    • 콜렉션을 Wrapping하면서 다른 멤버 변수가 없는 상태를 일급컬렉션 이라한다.

      ex)

      Map<String, String> map = new HashMap<>();
      map.put("1", "A");
      map.put("2", "B");
      map.put("3", "C");
      
      // Wrapping 후
      
      public class Student {
      
          private Map<String, String> studentClass;
      
          public Student(Map<String, String> studentClass) {
              this.studentClass = studentClass;
          }
      }
    • 장점:

      1. 비즈니스에 종속적인 자료구조를 갖는다

        • 원하는 조건으로만 생성할 수 있는 자료구조를 만들어낸 것이라고 생각할 수 있다.
        • 예로, 6개의 숫자로 이루어지되, 이 숫자가 중복되면 안되는 로또번호를 생성해야 할 때 이 것을 검증할 수 있는 로직이 필요하다.
          하지만 모든 코드와 도메인을 알고 있지 않는 한, 문제가 발생할 여지가 있기 때문에 위의 조건을 충족할 때만 생성하는 로직을 만들면 문제가 해결된다.
          이런 클래스를 일급 컬렉션이라고 함.
2. Colletion의 불변성을 보장한다.

   * final을 사용하는 것은, 단순히 재할당만을 금지할 뿐, 값 변경이 가능하다는 문제가 있다.
     따라서, 불변성을 보장하는 객체가 아주 중요 한 상황에서는 일급 컬렉션 혹은 래퍼 클래스 등의 방법으로 해결해야한다.
   * 따라서, 컬렉션의 값을 변경할 수 있는 메서드가 없는 일급 컬렉션을 만들면, 불변 컬렉션이 완성되므로, 불변성을 보장하는 것이다.
     
     

3. 상태와 행위를 한 곳에서 관리

   * 결제 프로그램을 생성한다 가정하였을 때, 결제 방식의 상태에 따라 지정된 메소드 내에서 전체 결제 값을 계산하기를 원하고 있음에도 기존 방식에서는 **계산 방식을 강제할 수 있는 수단이 없다.**
     똑같은 기능을 하는 메소드를 중복 생성할 가능성도 높고, 계산 메소드를 누락할 수도 있는 가능성도 존재하기 때문에,
     특정 결제 프로그램에 따라 결제 총 금액을 뽑기 위해서는 사용해야하는 계산식을 컬렉션과 함께 둘 수 있는 것이 좋은데
     이를 가능케하는 것이 일급 컬렉션이다.

     ```java
     public class PayGroups {
       private List<Pay> pays;
       
       public PayGroups(List<Pay> pays){
         this.pays = pays;
       }
       
       public Long getTotalPaySum() {
         return pays.stream()
           .filter(pay -> PayType.isNaverPay(pay.getPayType()))
           .mapToLong(Pay::getAmount)
           .sum();
       }
     }
     
     // 사용시?
     
     List<Pay> pays = Array.asList(
     ...
     );
     
     PayGroups payGroups = new PayGroups(pays);
     
     Long totalPaySum = payGroups.getTotalPaySum();
     
     //위와 같이 관리가 가능하다.
     
     ```

4. 컬렉션에 이름을 부여한다.

   * 변수명에서도 이름을 부여할 수 있지만, 변수명에 이름을 부여하는 것은 특정 그룹에 대한 검색을 시도 할 때, 변수명으로만 검색이 가능하다.

     하지만 이는 개발자마다 이름을 다르게 지을 수 있으므로, 검색이 까다롭기 때문에, 검색이 거의 불가능 하다고 볼 수 있다.

     또한 변수명에 불과하기 때문에 의미를 부여하기가 어려워 명확한 표현이 불가능하다.

   * 일급 컬렉션을 생성 할 경우, 컬렉션을 기반으로 용어 사용 및 검색을 하면 되므로 조금 더 명확한 뜻을 전달하기가 쉬워진다.

Todo

  • 미션 3 리뷰 확인 후 수정사항 마저 수정
  • 자바의 정석 네트워크 끝내기

  • 알고리즘 풀이 1회

  • try-with-resources에 대하여 공부

  • 일급 컬렉션에 대한 공부

  • 근력운동

  • BufferdReader의 효율

  • ArrayList에 크기를 지정에 대하여 공부

느낀점

  • 모든 계획을 성공해서 기쁘다! 오늘 하지 못했던 미션4를 최대한 빠르게 시작해야할 것 같다!

CheckList

  • 자바의 정석 람다식 최소 10챕터 까지 완독 후 정리
  • 마스터 클래스 수강 후 , 정리
  • 미션 4 진행하기
  • 근력운동
profile
노력

0개의 댓글