Day 19 - 26.09.18

서코딩·2026년 9월 18일

자바

목록 보기
19/19

0. 복습

  • 이름이 없는 클래스
  • 클래스 선언과 동시에 객체를 생성한다
  • 주로 인터페이스나 추상 클래스의 구현체를 즉석에서 만들기 위해 사용

함수형 인터페이스
: 추상 메서드가 한개만 존재하는 인터페이스

람다식

  • 익명 메서드라고도 불린다
  • 함수형 인터페이스를 람다로 구현하여 문법이 간결해진다

1) 람다식 문법
(매개변수) -> {실행할 문장;}

  • 매개변수가 1개인 경우 () 생략 가능
  • 실행할 문장이 1줄인 경우 {} 생략 가능

1. 파일 입출력(file IO(input/output)

: 내부 또는 외부의 데이터와 프로그램 간의 데이터를 주고 받는 것

  • 프로그램 내부 데이터 : 내가 만든 변수에 저장된 값 등
  • 프로그램 외부 데이터 : 내부 데이터를 제외한 모든 것, 내 컴퓨터에 저장된 데이터나 네트워크 상에 있는 데이터 등

1) 파일 입출력 개념
(1) 스트림(stream)
데이터를 주고받는 통로
(데이터는 바이트(byte) 형태로 전송된다)
(2) 버퍼(buffer)
데이터를 전송할 때 데이터를 임시로 전송하는 공간 (임시 저장공간)
(3) 스트림과 버퍼
데이터를 바이트 단위로 바로 전송하지 않고 버퍼라는 임시 저장공간에 저장을 하여 일정 데이터가 쌓였을 때 한 번에 전송하면 전송 속도가 빠름

	출력 스트림
	=======>
java		파일(test.txt)
	<=======
    입력 스트림

(4) File 클래스

  • 파일을 자바의 객체로 다룰 수 있게 해주는 클래스
  • 외부에 파일을 만들거나 외부 파일을 가져올 때 그 파일을 File 타입 객체로 만들어서 사용한다

2) 데이터 전송 방식
(1) 기본 스트림 : 실제 데이터를 주고받는 통로
OutputStream/InputStream
: 데이터를 바이트 단위로 전송한다

Writer/Reader
: 데이터를 2바이트씩(문자 단위) 전송한다

(2) 보조 스트림 : 기본 스트림을 보조하여 기능을 향상시킨다
Buffered
BufferOutputStream, BufferedWrite 등등
데이터를 버퍼라는 임시 저장공간 안에 저장한다

3) 파일 입출력에서 사용하는 클래스
(1) 파일 출력
: 새로운 파일을 작성하거나 기존 파일 내용에 추가
BufferedWriter : 버퍼를 사용한 출력 클래스
FileWriter : 전달한 경로의 파일을 출력하기 위한 목적으로 스트림을 열어주는 역할을 하는 클래스

(2) 파일 입력
: 외부 데이터를 프로그램 안으로 읽어오는 것
BufferedReader : 버퍼를 사용한 입력 클래스
FileReader : 전달한 경로의 파일을 입력하기 위한 목적으로 스트림을 열어주는 역할을 하는 클래스

2. 스트림(Stream)

  • 데이터를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓음
  • ** 데이터 추상화 : 데이터 소스에 상관없이 같은 방식으로 다룰 수 있는 것
  • 즉, 스트림은 배열이나 컬렉션 뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있게 하는 것

1) 스트림의 특징
(1) 스트림은 데이터 소스를 변경하지 않는다

  • 데이터를 읽기만 할 뿐, 원본 내용은 변경하지 않는다

(2) 스트림은 일회용

  • Iterator 처럼 스트림도 모두 읽고 나면 다시 사용할 수 없다
  • 필요 시, 스트림을 다시 생성해야 한다

(3) 스트림은 작업을 내부 반복으로 처리한다

  • 내부 반복 : 반복문을 내부에 숨겨 놓았다
  • 반복문을 작성하지 않아도 스트림 요소들을 한 번에 처리할 수 있다

(4) 데이터 타입마다 다룰 수 있는 스트림이 존재한다

  • 오토 방식이나 언박싱으로 인한 비효율을 줄이기 위해
  • IntStream, DoubleStream, ... 등등이 존재한다
  • 이러한 스트림을 해당 자료형 데이터를 다루는데 유용하다

2) 스트림 연산

  • 스트림이 제공하는 다양한 연산 기능을 가진 메서드를 이용하면 복잡한 작업을 간단히 처리할 수 있다
  • 스트림 연산은 중간 연산과 최종 연산으로 분류된다
    중간 연산 : 반환 타입이 스트림인 연산 => 스트림에 연속해서 중간 연산 가능
    최종 연산 : 반환 타입이 스트림이 아닌 연산
    => 스트림의 요소들을 소모하기 때문에 한 번만 가능(마지막에 쓰는 것이 좋다)
ex) stream.sorted().limit(5).forEach(System.out::println);
			중간연산				최종연산
profile
서코딩 127 !

0개의 댓글