[Java] Scanner, BufferedReader, BufferedWriter
·
Java
Scanner와 BufferdReader의 차이 BufferedReader, BufferedWriter은 버퍼를 사용하여 읽기, 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은 키보드의 키를 누르는 즉시 프로그램에 전달된다. 버퍼를 사용하는 입력은 키보드의 입력 이 있을 때마다 한 문자씩 버퍼로 전송한다. 이 버퍼가 가득차거나 줄 바꿈을 하면 버퍼의 내용을 한 번에 프로그램에 전달한다. Scanner은 1KB의 버퍼를 갖고, BufferedReader는 8KB의 버퍼를 가진다. 즉, Scanner은 더 자주 프로그램에 전달하고, BufferedReader은 조금 더 모아놨다가 프로그램에 전달한다. ( 쓰레기가 생길때마다 나가서 버리는 거랑, 쓰레기통에 모아놨다가 한 번에 버리는 차이 ) 버퍼는 키보드..
[JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스)
·
Java
Comparator와 Comparable 두가지 모두 두개의 객체를 비교하기 위한 인터페이스 이다. Comparator의 compare() 메서드는 두 매개변수 객체를 비교하고, Comparable의 compareTo() 메서드는 자기자신과 매개변수 객체를 비교한다. 객체 o1, o2가 있을 때 , compare(o1, o2) / o1.compareTo(o2) 가 가능할 것이다. 이때, return 값에 따라 o1과 o2의 위치가 결정된다. return 1 (양수) : 위치를 변경하지 않음. 즉, o1이 o2보다 앞쪽에 위치하도록 결정 return -1(음수) : 위치를 변경함. 즉, o1이 o2의 뒤에 위치하도록 결정 return 0 : return1과 비슷하거나 같음. 위치를 변경하지 않음 publi..
[JAVA] 배열의 길이 length에는 괄호()가 붙지 않고, 문자열의 길이 length()에는 괄호()가 붙는 이유
·
Java
배열과 문자열의 길이 배열의 길이를 구할 때는 사용하고, 문자열의 길이를 구할 때는 str.length()를 사용한다. 사실 코딩테스트 연습문제를 풀 때마다 맨날 헷갈렸다. 배열은 length뒤에 ()를 안 붙여도 되고, 문자열은 붙여야 한다. 항상 "왜 그럴까?"만 생각하고 넘어갔었다. 추측하기로는 str.length()는 뭔가 메서드의 성격을 갖고 있어서 ()가 붙고, arr.length는 그렇지 않은 것 같다는 정도만 생각하고 있었다. 이번에 그 이유를 한번 찾아보았다. int[] arr = {1,2,3,4}; String str = "hello"; int arr_len = arr.length; //4 int str_len = str.length(); // 5 배열의 length는 함수(메서드)가 ..
[JAVA] Math 클래스
·
Java
Math 클래스? 자바는 수학적 계산을 쉽게 해주는 Math 클래스를 제공한다. Math 클래스의 여러 가지 메서드를 이용해서 수학적 연산, 비교 등을 쉽게 할 수 있다. 간단한 예제로 두 수의 크기를 비교할 때 if문을 사용하는 방법과 Math 클래스를 사용하는 방법을 알아보자. int a = 10; int b = 5; int max = 0; //if문 if(a>b){ max = a; }else{ max = b; } //삼항 연산자 max = a>b ? a:b; //Math 함수 max = Math.max(a,b); 위와 같이 if문, 삼항 연산자, Math.max()함수를 이용해서 최댓값을 구할 수 있다. 메모리 관점과 시간 관점으로 봤을 때 Math 클래스는 해당 연산을 최적으로 수행할 수 있도록 ..
[JAVA] format() 메서드 : 문자열 포맷 지정 / printf()
·
Java
JAVA를 처음 배우면 System.out.println("Hello World!"); 부터 배운다. 그리고 얼마 안있어서 System.out.printf("%d",3); 와 같은 포맷을 지정할 수 있는 printf도 배운다. format() 메서드는 printf와 비슷하게 포맷을 지정하여 String에 저장할 수 있는 메서드이다. 1. String.format() 메서드 format(String format, Object... args) format(Locale locale, String format, Object... args) format : 문자열 포맷 지정 locale : 선택, 로케일 지정 args : 선택, format에저 지정된 포맷에 넣어줄 데이터 입력 (ex) int age = 23 S..
[JAVA] 람다식과 스트림 Stream()
·
Java
함수형 프로그래밍 함수의 구현과 호출만으로 프로그래밍이 수행되는 방식 순수함수(pure function)를 구현하고 호출함으로써, 외부 자료에 side effect를 주지 않도록 구현 순수함수 : 매개변수만을 사용하여 만드는 함수 → 따라서 함수 외부에 있는 변수를 사용하지 않아 외부에 영향을 주지 않음 함수를 처리할 때 외부 자료를 사용하지 않아서 외부에 영향을 미치지 않기 때문에 여러 자료가 동시에 수행되는 병렬처리가 가능하다. 1. 람다식 익명 함수 매개변수와 매개변수를 이용한 실행문을 이루어진다. (매개변수) -> { 실행문 }; 람다식의 장점 코드가 간결해짐 코드 가독성이 높아짐 생산성이 높아짐 람다식의 단점 코드 재사용 불가 디버깅이 어려움 람다식 표현 규칙 메서드 이용 int add(int ..
[JAVA] 파일 입출력
·
Java
파일에 쓰기 1. FileWriter fname으로 지정한 파일이 쓰기 모드로 열린다. 없으면 파일을 생성한다. FileWriter(String fname, boolean append) 두 번째 파라미터로 이어 쓰기 옵션을 선택한다. default는 false이다. append=true로 설정 시 파일에 남아있는 텍스트 뒤로 이어 쓴다. fw.write(String str) 파일에 문자열을 입력한다. fw.close() FileWriter를 모두 사용한 뒤엔 꼭 close() 메서드로 닫아줘야 한다. String fname = "./src/file/memofile.txt"; //상대경로 FileWriter fw = new FileWriter(fname); String memo = "hello world!..
[JAVA] 추상 클래스 (abstract class)
·
Java
추상 클래스 상속을 하기 위해 만드는 클래스 구현 코드 없이 메서드의 선언만 있는 추상메서드를 포함한 클래스 반드시 하나 이상의 추상메서드를 포함해야 한다. abstract 예약어 사용 추상 클래스는 인스턴스화할 수 없음 ( 객체 생성 불가 ) (참고) 추상 클래스, 추상 메서드는 클래스 다이어그램에서 기울임체로 쓴다. 추상 메서드 자식 클래스에서 반드시 overriding 해야하는 메소드 선언한 하고 구현하지 않는다. abstract int methodA(int x, inty); //추상메서드 더보기 1) 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성 2) 메서드 정의(definition) : 구현부 { }를 가짐 abstract i..