23.04.18 JAVA

천용·2023년 4월 18일
0

JAVA

목록 보기
10/23

오버로딩(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();
    }
}
profile
성장하는 개발자가 되자

0개의 댓글