본문 바로가기

우테코

(34)
자바 리플렉션 사용법과 3가지 단점 우테코 Lv1. 마지막인 체스 미션을 진행하면서 자바 리플렉션을 사용했었다. 초기 체스판 기물 배치를 하는데 있어 비숍, 룩, 나이트 등 각 기물의 클래스 객체를 통해 인스턴스를 생성하는 과정에서 리플렉션을 얄팍하게 접했다. private Piece createPieceInstance(Class
상속과 조합 : is-a / has-a 우테코 블랙잭 미션에서는 다음 요구사안이 있었다. - 플레이어와 딜러의 중복 코드를 없앤다. 이에 플레이어와 딜러를 참여자라는 추상클래스로 묶었다. 그러나, 페어였던 도도의 피드백에서 is-a 관계 대신 has-a관계로도 생각해보라는 피드백이 왔고, is-a/ has-a관계가 무엇인지, 또 왜 이리도 크루들 사이에서 상속에 대한 이야기가 많은 것인지 궁금해졌다. 상속(is-a) is-a 관계는 [a는 일종의 b이다.]가 성립하는 관계를 말한다. ex) 상위 클래스 : 자동차 하위 클래스 :경찰차, 소방차, 버스 경찰차는 일종의 자동차다. 소방차는 일종의 자동차다. 버스는 일종의 자동차다. => 모두 is-a관계가 성립한다. 상속의 장점 - 코드를 재사용함으로써 중복을 줄인다 - 개발시간 단축 - 확장성이..
[스크랩] 풀링 / 캐싱 https://whiny.tistory.com/17 오브젝트 풀링(Object Pooling)이란? 이번 포스팅에서는 다양한 최적화 기법들 중에서 오브젝트 풀링(Object Pooling)에 관해서 알아보겠습니다. 간단하게 오브젝트 풀링을 설명하자면, 오브젝트의 Pool 즉 웅덩이를 만들어두고, 그 웅덩 whiny.tistory.com https://javacan.tistory.com/entry/48 캐시를 이용한 성능 향상! 객체를 캐싱함으로써 객체 생성과 관련된 성능을 향상시킬 수 있다. 캐싱(Caching) 성능을 향상시키기 위해서 많이 사용되는 방법을 말해보라고 하면 대부분 객체 풀링을 말한다. 특히 데이터베이 javacan.tistory.com
자바에서 Stack보다 Deque이 권장되는 이유 우테코 Lv1 3번째 미션인 블랙잭을 구현하다가 카드의 자료구조를 정하는데 의견이 갈렸다. 나는 Deque을 주장했고 페어는 Stack을 제안했다 Stack을 사용하자는 페어 의견에 설득이 되었는데 그 이유는 다음과 같다 - 카드 덱의 멘탈모델이 Stack과 유사하다 - 양쪽에 넣고 뺄 수 있는 확장 기능을 가진 Deque은 오용의 위험성이 있다 - 카드 덱 객체는 Stack 이 제공하는 기능만으로 충분하며 그 이상의 확장을 상상하기 힘들다 그러나 Stack을 사용하자 SonarLint에서 경고를 띄웠다. 그것도 Deque을 사용하라고. 왜 그럴까? 이유1. Stack 은 Vector 컬렉션을 상속받아 정의에서 벗어난 오용가능성이 있다. Vector는 자바 버전 1부터 있었던 굉장히 오래된 클래스이기 때..
.collect(Collectors.toList()) vs Stream.toList() >>문제 상황 .collect(Collectors.toList())와 .toList()는 스트림을 리스트로 바꾸어 주는 기능을 한다. 그러나, .collect(Collectors.toList())를 사용하니 SonarLint에서 Stream.toList()로 대체하라는 문구가 떴다. 순간 의문이 들었다. 기능적으로는 같은데 대체 두 collect 메서드 사이에 무슨 차이가 있지? 우선 이 두가지 메서드의 차이를 보자 Collectors.toList() vs Collectors.toUnmodifiableList() Collectors.toList() : 만들어진 List가 변경 가능 Collectors.toUnmodifiableList() : 만들어진 List가 변경 불가능 //SonarLint 예시 Li..
[TDD] JUnit - @ParameterizedTest 공식문서 정리하기 문제상황 우테코 1주차 미션을 정리하다가 테스트 생성에 불편한 점을 느꼈다. 불편함을 느낀 코드는 바로 이것이다. @DisplayName("라운드 테스트 : 예외 범위의 시도 횟수를 입력할 때") void validateRound_invalidateInputs() { // given int[] invalidateInputs = {0, -1, 101, 102}; // when - then for (int invalidateInput : invalidateInputs) { assertThrows(IllegalArgumentException.class, () -> RoundValidator.validateRound(invalidateInput)); } } } 라운드를 1-100회 사이로 받아야 할 때, 유효범..
[스크랩] 페어프로그래밍 환경설정 - 공통 커밋 Co-authored-by >> co-authored-by 이해하기 여러 작성자와 커밋 만들기 - GitHub Docs 커밋 메시지에 하나 이상의 Co-authored-by 후행부를 추가하여 하나의 커밋을 둘 이상의 작성자에게 귀속시킬 수 있습니다. 공동 작성 커밋은 GitHub. docs.github.com >> config 설정으로 message에 자동으로 co-authroed 만들기 페어프로그래밍인데 커밋은 한명이? Git의 Co-authored-by 설정과 git commit.template 설정에 대해 함께 알아봅시다! velog.io
[우테코-Lv1] 자동차 경주 간단한 회고 (계속 수정 예정) 1. 객체 안에 toString 오버라이딩 - 좋지 않다는 리뷰를 받음 class Car { public String toString() { return name + " : " + "-".repeat(score); } } - 출력은 도메인의 책임이 아니다. - 정해진 형식 이외에 출력을 위해 수정이 불가피하다 2. 전략패턴 - 확장성 및 테스트에 용이 - 객체지향의 장점인 다향성을 적극 활용한 패턴 💠 전략(Strategy) 패턴 - 완벽 마스터하기 Strategy Pattern 전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다. 여기서 '전략'이란 일종의 알고리즘이 될 수 inpa.tistory.com 3. 지네릭 메서드 ..