언어/JAVA
-
nextStep - 모든 원시값과 문자열 포장언어/JAVA 2023. 7. 23. 10:20
- 클래스를 분리할 때 좋은 원칙이다. > 모든 원시값, 모든 문자열 포장 + 일급 컬렉션 사용 > 꼭 모든 원시값이랑 문자열을 포장할 필요는 없음 이런 기준으로 쪼개는 것 연습하다보면 감이 온다. (클래스 분리에 대한 감) 원시값, 문자열 포장의 장점 1. 유효성 체크가 편해진다. -> 객체의 유효범위 조정이 더 안전하다. 2. 로직구현 위임이 쉽다 -> 몇몇 로직은 줘버리자 3. 불변객체로 만들어서 외부에서 변경 불가능하게 만들기 쉽다. 4. 클래스가 분리되면서 테스트하기 더 쉬운코드 만들어진다 5. 단일 책임 원칙 지키기 쉬워진다. 1. 원시값 포장 public class Position { private final int pos; public Position(int pos) { this.pos =..
-
nextstep-자동차경주 (테스트하기 어려운 코드 테스트하기)언어/JAVA 2023. 7. 23. 09:43
1. 들어가기전에 - TDD는 실패테스트 - 성공 - 리팩토링 무한반복 - 도메인 지식 풍부하다면 요구사항 분석 대략적설계 – 객체 추출(테스트) UI,DB등과 의존관계 가지지않는 부분 - 꼭 스프링이 아니더라도 자바 어플리케이션도 위와 같은 구조로 만들 수 있다. - 구현할 기능 목록을 작성하고 도전하는 것도 의미가 있다. 2. 자동차 경주 기능 목록 및 테스트 > 기능목록에서 유틸성메서드,테스트 할 수 있는 메서드 뽑아내야한다. - 일단 테스트하기 쉬운 코드를 찾자 (유틸성 - 이름 split하기, 정상 이름 확인) - 테스트하기 어려운 것은 테스트 가능한 구조로 바꿔야함 오브젝트 그래프에서 다른 오브젝트에 의존관계 가지지 않는 오브젝트가 테스트 하기 쉽다. 따라서 의존관계에 변화를 주면 테스트 가능..
-
람다식(3) - 최종처리언어/JAVA 2023. 7. 14. 17:54
1. 요소 조건 만족 여부(매칭) - 매핑은 스트림의 요소들이 특정 조건에 만족하는지 여부를 조사하는 최종 처리 기능이다. - 매개값으로 주어진 Predicate가 리턴하는 값에 따라 true or false int[] intArr ={2,4,6}; boolean result = Array.stream(intArr).allMatch(a -> a%2 ==0); result = Array.stream(intArr).anyMatch(a -> a%3==0); result = Array.stream(intArr).nonMatch(a -> a%3 ==0); 2. 요소 기본 집계 - 집계는 최종 처리 기능으로 요소들을 처리해서 카운팅,합계,평균,최대,최소값등과 같이 하나의 값으로 산출한다. - 대량의 데티어를 가공해..
-
스트림(2) - 중간 처리언어/JAVA 2023. 7. 14. 14:46
1. 요소 걸러내기(필터링) - 필터링을 위한 메서드는 distinct()와 filter()가 있다. - distinct()는 요소의 중복을 제거한다. >객체 스트림의 경우 equals메소드를 기준으로 판단한다. > IntStream,LongStream 등은 값의 중복을 제거한다. - filter()는 매개값인 Predicate가 true인 요소만 리턴한다. Predicate는 IntPredicate,LongPredicate,DoublePredicate등이 있다. (함수형 인터페이스임) (매개변수로 주어진 값을 통해 조건검사 - true나 false를 리턴하도록 람다식을 짜)[test()메서드] 2. 요소 변환(매핑) -매핑은 스트림을 다른 요소로 변환하는 중간 처리 기능을 한다. - mapXXX(), ..
-
스트림(1) - 스트림이란,리소스로 스트림 얻기언어/JAVA 2023. 7. 14. 13:50
1. 스트림이란? - java8부터 추가된 컬렉션 및 배열의 요소를 반복 처리하기 위해 등장. - 요소들이 하나씩 흘러가면서 처리된다는 의미를 가지고 있다. - 스티림을 통해 List를 반복처리하면 다음과 같다. Stream stream = list.stream(); stream.forEach(item -> //item처리); //StreamEx.ja public class StreamExample{ public static void main(String[] args){ Set set = new HashSet(); set.add("홍길동"); set.add("신용권"); set.add("김자바"); Stream stream = set.stream(); stream.forEach(System.out.pri..
-
- JavaNextStep - 숫자야구게임(1) - 단위테스트언어/JAVA 2023. 7. 10. 17:10
- 학습테스트 > 내가 만든 api를 테스트하는게 아니라, 다른 사람이 구현해 놓은 라이브러리가 어떻게 동작하는지 단위테스트를 통해 알아보는 것 학습테스트이다. > 새로운 라이브러리를 테스트 기반으로 할 수 있다. (빠르게 학습 가능해진다) > 학습 테스트를 통해 - 단위 테스트 방법 학습 - 단위 테스트 도구 사용법 익힐 수 있다. - 사용하는 API에 대한 학습 효과가 있다. 1. String 클래스에 대한 학습 테스트 1.1 요구사항 1에 대해 @DisplayName("split Test") @Test void splitTest(){ String[] input = "1,2".split(","); assertThat(input).contains("1","2"); } @Test void splitTes..
-
-JavaNextStep (1) - Junit언어/JAVA 2023. 7. 10. 15:10
1. 객체지향 생활 체조 원칙 한 메서드에 오직 한 단계의 들여쓰기만 한다. else 예약어를 쓰지 않는다. 모든 원시 값과 문자열을 포장한다. 한 줄에 점을 하나만 찍는다. 줄여 쓰지 않는다(축약 금지). 모든 엔티티를 작게 유지한다. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 일급 컬렉션을 쓴다. getter/setter/프로퍼티를 쓰지 않는다. 2. 단위테스트란? - 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. - 여기서 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메소드이다. 2.1 main method의 용도 > 프로그램 시작 > 구현 프로그램 테스트 > main method는 프로덕션코드 프로그램 구현을 담당하는 부분으로, 실제 사용하는 소스코드..
-
컬렉션 예시들언어/JAVA 2023. 7. 9. 22:49
1. Thread - Vector, HashTable, HashMap Vector package Collection; import java.util.List; import java.util.Vector; public class Vector1 { public static void main (String[] args){ List list = new Vector(); Thread th1 = new Thread(new BoardTask(list)); Thread th2 = new Thread(new BoardTask2(list)); th1.start(); th2.start(); try{ th1.join(); th2.join(); }catch (Exception e){} int size = list.size();..