본문 바로가기

JAVA/DAY 20 _ 23.09.13

(11)
File I/O _ load // 로드 // 파일에서 데이터를 읽어오기 위해 FileInputStream 및 DataInputStream을 사용하자! // FileInputStream : 파일로부터 바이트 단위로 데이터를 읽어오기 위한 스트림을 생성 // file : 파일의 경로와 이름을 나타내는 File 객체나 파일 경로 문자열 // DataInputStream : FileInputStream으로부터 읽어온 데이터를 다양한 자료형으로 읽어올 수 있는 스트림을 생성 File file = new File("C:\\tempFolder\\qqq.qqq"); try(FileInputStream fis = new FileInputStream(file)){ DataInputStream dis = new DataInputStream(fis); ..
File I/O Basic // 파일 입출력(File I/O) : low레벨의 API는 사실상 쓸일이 많지 않다 # 특징 // 컴퓨터에서 파일을 읽어 들이거나 파일에 데이터를 쓰는 작업 // 파일 입출력은 데이터의 저장, 읽기, 수정, 삭제 등과 관련된 다양한 작업에서 사용 // File 클래스가 따로 있당. // File file = new File("C:\\tempFolder\\ttt\\a\\b\\c"); // 헤헤 특수문자 쓰고싶으면 \이거 썼어야했지 ^_^V # 구조1 FileOutputStream fos = null; try { fos = new FileOutputStream(file); }catch(Exception e) { e.printStackTrace(); }finally { try { fos.close(); }c..
Stream활용 예시 // 빈공간에 우클릭 -> source -> generate... (ex. 생성자를 불러오려면 constructor겠지) // class Student, StudentEntity의 기본생성자, full생성자, setter, getter가 모두 정리돼어있다고 가정 (블로그올리기엔 너무 크당!) List list = new ArrayList(); list.add(new Student("한조", 80, 99)); list.add(new Student("트레", 10, 45)); list.add(new Student("티모", 8, 50)); list.add(new Student("다리우스", 73, 100)); list.add(new Student("스웨인", 45, 74)); list.stream() .fi..
IntStream // 1.범위 내의 정수 생성: int sum = IntStream.range(1, 10) // 1부터 9까지의 정수를 생성 .filter(e -> e % 2 == 0) .sum(); System.out.println(sum); // 1~9까지 정수 중 짝수인것들의 합... 간결하고 보기 쉽네 ㅠㅠ // 2. 배열에서 IntStream 생성: int[] numbers = {1, 2, 3, 4, 5}; IntStream intStream = Arrays.stream(numbers); intStream.forEach(System.out::println); --> Stream중 int와 관련하여 아주 최적화된 메서드
Stream_API // 스트림 API = 함수형 프로그래밍 = 가독성 향상 ## 스트림의 주요 개념: // // 1.선언적 처리(Declarative Processing): // 데이터 처리 작업을 선언적으로 정의할 수 있도록 합니다. // 즉, 무엇을 원하는지를 명시하고, 어떻게 하는지에 대한 세부적인 구현은 숨겨집니다. // // 2. 파이프라이닝(Pipelining): // 스트림 연산을 연결하여 데이터를 다양하게 처리할 수 있습니다. // 이렇게 연결된 연산들은 연속적으로 처리되며, 중간 연산과 최종 연산으로 나뉩니다. // 중간 연산(예: filter, map, flatMap)은 스트림을 반환하고, // 최종 연산(예: forEach, collect, reduce)은 스트림을 소비하고 결과를 생성합니다. // -..
Lambda5_consumer(interface) List list = new ArrayList(); list.add("안녕1"); list.add("안녕2"); list.add("안녕3"); list.add("안녕4"); list.add("안녕5"); // 원래는 내가 foreach를 만들어서 돌리겠지? // interface consumer // 1. list.forEach(이 괄호 안에 : consumer 인터페이스를 상속받은 클래스의 인스턴스를 넣으면 된다); list.forEach(new QQQ()); // --> 방법1_비추천) QQQ 클래스를 forEach에 넣어서, 그안에있는 메서드들을 순차적으로 실행시켜준다 //2. consumer라는 인터페이스가 뭔지는 모르겠지만 일단 상속받아야되니까 쓰자 // 2-1) 원래는 Consumer에서 선언..
Lambda4_메서드참조 interface BBB { public int some(int a /* int b 이런식으로 달라지면 error난다구 */ ); } // 매서드를 넣을수도있다구 BBB t1 = a -> Math.incrementExact(a);// 그냥 어떤걸넣어본거임 int result = t1.some(5); System.out.println(result); // 이렇게 써도 되겠지 --> System.out.println(t1.some(5)); // ★★★ 매서드 참조 : 아주아주 요약한.... 매개변수 자체도 없애버렸노; BBB t2 = Math::incrementExact; int result2 = t2.some(5); System.out.println(result2);
Lambda3_구현코드가 한줄일때 활용법 // 인터페이스 생성 // - > 인터페이스의 매개변수가 1개인 경우 // t1~4들이 내가 생성했어야했던 클래스들의 이름이라고 생각하니까 괜찮네 // 1. 리턴있을때 interface TTT{ public int some(int a); } // 2. 리턴없을때 interface CCC{ public void test(int a); } // 정석 TTT t1 = (a)->{ return a+3; }; int result = t1.some(5);// 1회성이니까 이제 t1은 안녕~ System.out.println(result); TTT t2 = (a)->{ return a-3; }; int result2 = t2.some(5); System.out.println(result2); ★★★ 1. 일반적 사용..