int add(int a, int b) { return a+b;}
int add(int x, int y) { return x+y;}
-> 오버로딩 x - 중복 정의가 되어있다.
long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }
-> 오버로딩 0 - 조건에 성립 되어있다.
우리가 흔히 콘솔창에 텍스트를 출력할 때 사용하는 println라는 메소드를 대표적인 예로 들어볼 수 있다. 실은 이 함수가 오버로딩의 결정체이다. 우리는 println의 인자 값으로 int, double, boolean, String 등의 아주 다양한 타입의 매개변수들을 집어넣어도 우리는 그 함수들이 어떻게 실행되지는 모르지만 콘솔창에 아주 잘 출력해주는 것을 볼 수 있다.
이렇게 '출력하다.'라는 같은 기능을 가진 메소드들를 println이라는 하나의 이름으로 정의가 가능한 것이다.
이 위에서 예로 들었던 println을 생각해보자. 이 메소드를 매개변수의 종류에 따라서 다르게 지정한다고 생각해보자. printlnInt, printlnDouble, printlnBoolean 등 수많은 메소드들의 이름을 정해줘야 할 것이다. 이는 프로그래머의 입장에서는 메소드의 네이밍에 고민을 가중시킨다. 그리고 이런 이름들은 다른 곳에 사용할 가능성도 생기게 된다.
-> CTRL + ENTER 누르면 자동적으로 고쳐짐.
(구문체크, 번역, 최적화, 생략된 코드 추가)
package test;
public class ExceptionTest {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(0/0); // 예외발생 --- (1)
System.out.println(4);
} catch (ArithmeticException e) {
if(e instanceof ArithmeticException) {
System.out.println("true");
}
System.out.println("ArithmeticException");
} catch (Exception e) {
e.printStackTrace(); -- (2)
System.out.println("Exception");
}
System.out.println(6);
}
}
-> (2)은 예외처리할 때, 항상 써주는 것이 필수!! ( 예외발생 당시의 호출스텍(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
버퍼란 임시 저장 공간을 의미 합니다. 정확히 말하면,, A와 B가 서로 입출력을 수행하는데에 있어서 속도차이를 극복하기 위해 사용하는 임시 저장 공간을 의미한다.
Ex) Buffer
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteFile
{
public static void main(String[] args)
{
BufferedWriter bw = null;
try
{
String content = "이 내용을 메모장 파일에 입력할 것";
File file = new File("C:\\Users\\Desktop\\임시파일.txt");
FileWriter fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(content);
System.out.println("!!! 파일 작성이 완료됨");
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (bw != null)
{
bw.close();
}
}
catch (IOException e)
{
System.out.println("BufferedWriter를 종료할 때 에러 발생 : " + e);
}
}
}
}
자바의 자료형은 크게 기본 타입(primitive type)과 참조타입(reference type)으로 나누어진다.
대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있다.
기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 한다.
래퍼 클래스 종류
-> Wrapper 클래스 객체에서 메소드 사용은 형변환이 가능한 메소드만 사용가능.