일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- SWEA
- 재귀
- 카카오블라인드코딩테스트
- programmers
- 자바
- BOJ
- SoftwareExpertAcademy
- 알고리즘
- 완전탐색
- Java
- 달빛캠퍼스
- React
- Array
- 인플레이션에서 살아남기
- 백준
- 달빛클럽1기
- 달빛클럽 1기
- 경제공부
- React.js
- dfs
- JPA
- 프로그래머스
- Algorithm
- 리액트
- HashMap
- Stack
- ReactJS로 영화 웹 서비스 만들기
- 노마드코더 강의
- 달빛클럽
- 노마드코더
- Today
- Total
th42500의 TIL
[Java] 입/출력 처리 본문
알고리즘 문제를 풀다가 가장 기본이라고 생각되는 입/출력 처리에 대해 정확하게 짚고 넘어가고자 오늘은 입/출력 처리에 대해 정리해보고자 한다.
표준 입출력
✔ System.in : 표준 입력
👉 데이터 입력 방법
1️⃣ 콘솔에 TestCase 입력
2️⃣ 파일을 통해 TestCase 입력
✔ System.out : 표준 출력
✔ System.err : 표준 에러 출력
표준 입출력의 대상변경
✔ System.setOut()
✔ System.setErr()
✔ System.setIn() : 원하는 형식으로 입력 스트림 변경
package scanner;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
System.setIn(new FileInputStream("input.txt")); // 표준 입력을 파일로 변경
Scanner sc = new Scanner(System.in);
System.out.println("학번? " );
int no = sc.nextInt();
System.out.println("자신을 한마디로 표현하자면? ");
sc.nextLine(); // 앞의 개행문자 없애주기
String slogan = sc.nextLine();
System.out.println(no + ":" + slogan);
}
}
표준 입출력과 관련된 클래스
1️⃣ java.util.Scanner
✔ 자바에서 입력받을 때 가장 많이 쓰이는 입력 클래스
✔ 파일, 입력 스트림 등 대상에서 데이터를 읽어 구분자로 토큰화하고 다양한 타입으로 형변환하여 리턴해주는 클래스
✔ 장점
- 입력 스트림을 다루는 방법을 몰라도 쉽게 입력처리 가능
- 데이터 형변환이 자동으로 이루어져 편리
✔ 단점
- 대량의 데이터 처리 시 수행시간이 비효율적 (BufferedReader와 비교했을 때 최대 약 30%정도의 속도 차이 발생)
✔ 자주 사용하는 주요 메소드
next() | 문자열을 반환 유효 문자열 후 공백 문자 만났을 때 처리 |
nextLine() | 문자열을 반환 개행 문자 만났을 때 처리 next()와 달리 문자열 안에 공백과 tab을 포함한 채로 반환 |
nextInt() | 정수형을 반환 유효 문자열 후 공백 문자 만났을 때 처리 |
nextDouble() | 실수형(double)을 반환 유효 문자열 후 공백 문자 만났을 때 처리 |
nextLine()외의 메소드들은 구분자 직전까지 반환 (토큰화)
※ nextLine() 사용 시 주의할 점
앞서 next(), nextInt(), nextDouble() 등을 이용한 이후 nextLine()을 통해 입력을 받고자 한다면 앞서 사용되었던 개행문자를 nextLine()이 인식하여 원하는 입력을 할 수 없게 된다.
그러므로, 이런 경우에는 nextLine()을 앞에 한번 더 사용하여 개행문자를 처리해준 후 nextLine()으로 입력을 받도록 해야한다.
2️⃣ java.io.BufferedReader
✔ 필터 스트림 유형
✔ Line단위로 문자열 처리 👉 readLine()
✔ 대량의 데이터 처리 시 수행시간이 효율적
※ BufferedReader로 입력받을 때 주의할 점
BufferedReader는 생성자로 Reader유형을 받으므로 BufferedReader()의 매개변수로 바로 System.in을 넘길
수 없음
그러므로 BufferedReader 사용 시 표준 입력인 inputStream을 InputStreamReader()필터를 이용하여 Reader유형으로
변환하여 입력을 받아야 함
✔ StringTokenizer
👉 BufferedrReader를 이용하여 입력받은 문자열들을 구분자 기준으로 토큰화 할 때 사용
👉 StringTokenizer 변수명 = new StringTokenizer(토큰화할 대상, 토큰화 기준);
👉 토큰화한 대상은 내가 사용하고자 하는 자료형으로 형변환하는 과정이 필요
3️⃣ java.lang.StringBuilder
✔ 문자열의 변경을 지원하는 클래스
✔ Java에서 하나의 문자열을 다른 문자열과 연결하였을 때 새로운 문자열이 생성되는 것을 방지
❓ StringBuilder를 사용하는 이유
❗ Java에서의 String 객체는 상수이다.
즉, 변경이 불가능한 객체이므로 한 번 생성되면 내용을 바꿀 수 없다.
그러므로 하나의 문자열과 다른 문자열을 연결하게 되면 새로운 문자열이 생성되고, 변경 전의 문자열은 가비지
컬렉터로 들어가게 된다.
만약, 10만개의 문자열을 연결해야하는 상황이라면? 10만번 새로운 문자열을 생성해야 하므로 엄청난 메모리를
잡아먹게 된다.
이럴때 문자열을 변경할 수 있는 StringBuilder를 이용하여 String을 합치게 되면 불필요한 메모리 소비를 막을 수
있다.
✔ append()
👉 문자열을 합치는 메소드
✔ toString()
👉 StringBuilder를 String 자료형으로 변환하는 메소드
✔ setLength()
👉 StringBuilder의 길이를 정해진만큼 잘라내는 메소드
👉 가끔 문자열의 뒤에 있는 ','나 '!' 등의 필요없는 부분을 제외하고 출력할 때 유용하게 사용되는 메소드
'ComputerLanguage > Java' 카테고리의 다른 글
[Java] 데이터 읽기 & 읽은 데이터 원하는 데이터 형식으로 가공해보기 (0) | 2022.10.08 |
---|---|
[Java] 텍스트 파일 읽기 (한 글자, N 글자, 한 줄, N개의 줄) (0) | 2022.10.06 |
[Java] 현재 Directory 내에 있는 File 확인하기 (0) | 2022.10.06 |
[Java] 변수 (0) | 2021.12.15 |
[Java] Java에 대해 알아보자 (0) | 2021.12.13 |