오버로딩(overloading) -> 다양한 데이터를 취급하기 위해서 사용한다.
ex) 매개변수 갯수가 다른 생성자함수
오버라이딩(overriding) -> 재정의
this: 현재클래스의 주소값
super: 부모클래스의 주소값
this(): 생성자에서 다른 생성자함수 호출 (매개변수가 다른함수끼리 교류)
super(): 자식클래스 생성자에서 부모 생성자 호출
사용자가 생성자함수를 만들면 기본생성자함수를 만들지 않는다.
class Circle{
private int x=50;
private int y=50;
private double radius=15.5;
{//초기화 블록 : 클래스 필드 초기명령의 모임 -> 첫 번째 초기화 실행
System.out.println("("+x+", "+y+")"+"반지름 : "+ radius);
x=100;
y=200;
radius=20;
System.out.println("("+x+", "+y+")"+"반지름 : "+ radius);
}
Circle() {
x=0;
y=0;
radius=0;
}
}
출력결과
(50, 50) 반지름 : 15.5
(100, 200) 반지름 : 20.0
x = 0
y = 0
radius = 0.0
초기화 블록 -> 생성자함수 순으로 진행됨을 알 수 있다.
BufferedReader
:Scanner와 유사.
Bufferedwriter
:System.out.println();과 유사
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // 선언
String s = bf.readLine(); // String
int i = Integer.parseInt(bf.readLine()); // int
선언은 위에 있는 예제처럼 진행하면 된다.
입력은 readLine()이라는 메서드를 활용하는데, 여기서 반드시 주의해야할 점 2가지가 있다.
첫 번째는 readLine()시 리턴값을 String으로 고정되기에 String이 아닌 다른타입으로 입력을 받을려면 형변환을 꼭 해주어야한다
는 점이다.
두 번째는 예외처리를 꼭 해주어야한다
는 점이다. readLine()을 할때마다 try&catch를 활용하여 예외처리를 해주어도 되지만 대개 throws IOException을 통하여 작업한다.
StringTokenizer st = new StringTokenizer(s); // StringTokenizer인자값에 입력 문자열
int a = Integer.parseInt(st.nextToken()); // 첫번째 호출
int b = Integer.parseInt(st.nextToken()); // 두번째 호출
String array[] = s.split(""); // 공백마다 데이터 끊어서 배열에 넣음
Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야하는데, 위의 두가지 방법이 대표적이다.
첫 번째 방법으로는 StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.
두 번째 방법으로는 String.split()함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식이다.
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "abcdefg"; // 출력할 문자열
bw.write(s+"\n"); // 버퍼에 있는 값 전부 출력
bw.flush(); // 남아있는 데이터를 모두 출력시킴
bw.close(); // 스트림을 닫음
BufferedWriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close()를 호출해 주어 뒤처리를 해주어야 한다. 그리고 bw.write에는 System.out.println();과 같이 자동개행기능이 없기때문에 개행을 해주어야 할 경우에는 \n를 통해 따로 처리해주어야한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter b = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
for(int i=0; i<num;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
b.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
}
b.close();
}
}