본문 바로가기

반응형

자바

Test-DrivenDevelopment : 테스트 주도 개발 테스트 주도 개발 도서를 읽으면서 TDD 개발 방법론을 익히고자 한다. 1부 화폐예제를 읽고 PG 결제 시스템의 결제 승인, 취소, 복합결제 기능을 샘플로 구현하면서 책에서 익힌 방법들을 적용해보았다. 카드결제, 계좌결제, 간편결제 객체는 Paymt라는 부모 객체를 상속받으며 주문서비스(OrderService)에서 PaymtType 인터페이스에 정의되어 있는 승인, 취소, 복합결제 기능을 간략하게 구현했습니다. 화폐의 통화 개념과 비슷하게 결제별 타입을 결제수단을 통해 카드, 계좌, 간편으로 구분되도록 했으며, 승인과 취소는 결제 금액을 +, - 처리하도록 구현했고 리스트로 여러결제를 받아 전체 결제금액을 세팅함으로써 복합결제 기능을 대신 표현했습니다. 책 설명과 동일하게 동치 비교 테스트, 결제승인, .. 더보기
자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 1 학습 목표 : 넥스트스텝 강좌 중 TDD 교육을 들으면서 앞으로 매주 코딩 연습을 하고자 한다. 2️⃣ 숫자야구게임 구현 기능 요구 사항 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. e.g. 상대방(컴퓨터)의 수가 425일 때, 123을 제시한 경우 : 1스트라이크, 456을 제시한 경우 : 1볼 1스트라이크, 789를 제시한 경우 : 낫싱 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게 임 플레이어는 컴퓨.. 더보기
[Effective Java] Item 15 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트와 어설프게 설계된 컴포넌트의 차이는 얼마나 잘 숨겼느냐다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔하게 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통함으로 이를 정보 은닉 또는 캡슐화로 부른다. 정보은닉의 장점은 1. 시스템 개발 속도를 높인다. 2. 시스템 관리 비용을 낮춘다. 3. 성능 최적화에 도움을 준다. (다른 컴포넌트에 영향을 주지 않고 최적화 작업을 수월하게 할 수 있음으로) 4. 소프트웨어 재사용성을 높인다. 5. 큰 시스템을 제작하는 난이도를 낮춘다.(시스템 전체가 완성되지 않더라도 개발 컴포넌트의 동작을 검증할 수 있기때문에) 정보은닉의 핵심을 접근 제한자의 사용에 있다. 이 핵심의 원리는 모든 클래스와 멤버의 접근성을 가능.. 더보기
[Effective Java] Item 14 Comparable을 구현할지 고려하라 Comparable의 compareTo는 Object의 equals와 동일하지만 2가지 다른점이 존재한다. 1. 동시성 비교 + 순서 비교 2. 제네릭 형태 Comparable을 구현한 객체는 순서가 존재함으로 Arrays.sort로 쉽게 정렬할 수 있다. ex) 명령줄 인수들을 중복 제거 후 알파벳 순으로 정렬 public static void main(String[] args){ Set s = new TreeSet(); //TreeSet (순서 정렬 + 중복제거) Collections.addAll(s, args); System.out.println(s); } String이 Comparatable을 구현되어있으므로 가능한 코드이다. 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페.. 더보기
Chapter 8 컬렉션 API 개선 Arrays.asList() 팩토리 메서드를 통해 리스트를 생성할 수 있다. List friends = Arrays.asList("Raphael", "Olivia", "Thibaut"); 단, 고정 크기의 리스트를 생성했기에 요소 추가, 삭제가 불가능하다. 만약 friends.add("test")로 추가할 경우 UnsupportedOperationException 예외가 발생한다. 이처럼 자바 9에서 작은 리스트, 집합, 맵을 쉽게 만들 수 있도록 팩토리 메서드를 제공한다. 1) 리스트 팩토리 - List.of (크기 변경 불가능) List friends = List.of("Raphael", "Olivia", "Thibaut"); 2) 집합 팩토리 - Set.of (크기 변경 불가능) Set friend.. 더보기
Chapter 7 병렬 데이터 처리와 성능 스트림으로 데이터 컬렉션 관련 동작을 손쉽게 병렬 처리할 수 있다. 병렬 스트림 병렬 스트림은 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. ParallelStream을 호출하여 병렬 스트림을 생성할 수 있다. 순차 스트림을 병렬 스트림으로 변환하기 (ParallelStream 적용) @Test @Description("1~n까지 숫자의 합을 구하기(직렬 & 병렬)") void parallelStreamTest7_1() throws Exception{ // given int n = 100; Long sequentialResult = Stream.iterate(1L, i->i+1) .limit(n) .reduce(0L, Long::sum); // when Long par.. 더보기
Chapter6 스트림으로 데이터 수집 컬렉터란 무엇인가? collect로 다양한 요소 누적 방식을 인수로 받아서 스트림의 결과 리듀싱 연산기능을 수행할 수 있다. > 고급 리듀싱 기능을 수행할 수 있다. - collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이 컬렉터의 강점임. Collectors에서 제공하는 메서드의 기능 3가지 1. 스트림 요소를 하나의 값으로 리듀스하고 요약 2. 요소 그룹화 3. 요소 분할 1. 리듀싱과 요약 1) counting 팩토리 메서드를 통해 개수를 구할 수 있다. @Test @Description("메뉴 리스트 개수 구하기") void collectTest6_2_0() throws Exception { // given setMenu(); // when long strea.. 더보기
Chapter3 람다 표현식 람다 표현식 : 메서드로 전달할 수 있는 익명 함수를 단순화 한 것 [기존의 코드] Comparator byWeight = new Comparator() { @Override public int compare(Apple o1, Apple o2) { return o1.getWeight().compareTo(o2.getWeight()); } }; [람다를 적용한 코드] Comparator byWeight = (Apple o1, Apple o2) -> o1.getWeight().compareTo(o2.getWeight()); ※ 람다 표현식은 return 을 함축하고 있음으로 return 명시 X 람다는 어디에 사용할까? > 람다는 함수형 인터페이스 (많은 디폴트 메소드를 갖고 있더라도 추상 메소드가 오직 1.. 더보기

반응형