언어
-
Java - File클래스언어/JAVA 2023. 7. 24. 12:27
- File은 기본적이면서도 가장 많이 사용되는 입출력 대상이다. - file클래스는 파일 혹은 디렉토리를 다룰 수 있도록 다양한 메서드를 정의하고 있다. 1. File클래스 생성자 * 파일과 디렉토리는 같은 방법으로 다룬다. * pathname에는 보통 경로까지 포함새서 지정해줘야하지만, 프로그램이 실행되는 위치와 파일의 위치가 같을 경우 파일명만 사용해도 된다. File f = new File(//path); File dir = new File(//path); //이미 존재하는 파일을 파일 객체로 참조시 File f = new File(//) //없는 파일을 생성할때 f.createNewFile(); *OutputStream에 경우 해당 스트림을 열고 파일을 쓸 때 파일이 없으면 생성해서 쓴다. (F..
-
Java - io 직렬화(Serialization)언어/JAVA 2023. 7. 24. 11:20
- 직렬화란, 객체를 저장했다가 다시 꺼내쓰거나, 네이트워크를 통해 객체를 주고받을 수 있게 만드는 방법이다. 1. 직렬화란? - 객체를 데이터 스트림으로 만드는 것을 뜻한다. - 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다. - 반대의 의미로 역직렬화가 있다. - 자바 프로그램에 메모리 구조에서 살펴봤듯이, 인스턴스 메서드도 객체에 포함되지 않는다 -> 동일 클래스에 여러 인스턴스 별로 다른 값을 가지지 않음 -> 힙 영역이 아닌 타 영역에 생성된 메서드 참조해서 사용 - 객체를 저장한다는 것은 인스턴스 변수값을 저장한다는 의미이다. 2. 객체 스트림 - 직렬화와 역직렬화를 위한 스트림으로 ObjectInputStream, ObjectOutputStream이 있다...
-
nextStep - 자동차 경주 일급 컬렉션 만들기언어/JAVA 2023. 7. 23. 10:54
- 일급 컬렉션을 통해 List를 감싸두면, 외부에서 List에 모든 인터페이스 접근 안하고, 필요 기능만 제공할 수 있다. public class RacingGame { private List cars; private int tryNo; public RacingGame(String carNames,int tryNo){ this.cars = initCars(carNames); this.tryNo = tryNo; } private List initCars(String carNames) { if(StringUtils.isBlank(carNames)){ throw new IllegalArgumentException("자동차 이름 없어요"); } String[] names = carNames.split(",")..
-
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..