본문 바로가기
학습로그

[레벨1] 체스 학습로그

by 에드박 2021. 3. 26.

학습로그


[instanceof 연산자] - 2

내용

  • "instanceof 연산자가 객체지향적이지 못하다" 라는 말을 듣고 의문을 가지고 학습을 시작
  • Instanceof를 사용할 때 문제점
    • 쉽게 확장할 수 없다 -> instanceof 연산자의 우항이 고정되기 때문입니다.
    • 자바 런타임시에 해야할 일을 프로그래머가 해야한다.
    • 만약 추상클래스에서 instanceof 를 사용해서 하위클래스의 인스턴스임을 확인해야 한다면, 부모 클래스가 하위 클래스를 알아야 하는 사태가 벌어집니다. 이것은 부모 클래스와 상속받는 자식 클래스간의 관계가 생깁니다. 예를들어 자식 클래스가 삭제된다면 부모 클래스가 변경되어야 하는 상황이 생깁니다.
  • 좋은 방법은 자바 런타임시에 타입을 체크할 수 있도록 하는것

링크

 

 


[Map] merge 메서드 - 2

내용

  • 로또 미션에서 getOrDefault() 메서드를 사용해서 당첨된 로또 등수를 map에 카운트
    • 단점 코드가 길어서 이해하기가 힘들어진다.
  • 이후에 map의 computeIfPresent() 메서드를 발견하고 활용
    • computeIfPresent 의 단점 -> Map에 key를 미리 넣어놔야함
    • 관련 커밋
  • Map의 merge 메서드를 활용하면 굉장히 쉽게 구현가능한걸 학습
// merge 메서드 활용 전
lottoResult.computeIfPresent(rank,(LottoRank lottoRank, Integer count) -> ++count);

// merge 메서드 활용
lottoResult.merge(rank, 1, Integer::sum);

merge 메서드의 인자

  • key 
  • key가 없거나 값이 null이라면 들어갈 값
  • key안에 값이 있을때 key로 찾은 값과 2번째 인자의 값으로 수행할 동작

[Stream API] Stream 활용해서 chess 점수합산 로직 개선 - 1

내용

  • 무자비한 depth3의 점수합산 메서드 calculateScore()

depth가 3개

  • stream을 써서 합산 로직을 최소화

depth1 편-안

  • filter(Predicate<? super T> predicate) : 요소를 필터링
  • map(Function<? super T, ? extends R> mapper) : R타입의 스트림으로 변환
  • reduce : 모든 스트림 연산을 처리해서 하나의 값으로 만드는 최종연산

'학습로그' 카테고리의 다른 글

[레벨2] 배포 미션 학습로그  (0) 2021.05.21
[레벨1] 블랙잭 학습로그  (0) 2021.04.27
[레벨2] 체스-Spring 적용 학습로그  (0) 2021.04.23
학습 로그란?  (0) 2021.03.08
[레벨1]로또게임 학습로그  (0) 2021.02.26

댓글