인터페이스(Interface)
추상 메서드와 상수만을 포함하고 있으며, 다중 상속을 지원하기 위함
(단, 모든 추상 메서드를 구현하지 않는다면 추상클래스로 선언할 것!!!)
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수...) {
}
}
장점
1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화 가능
2. 클래스의 작성과 인터페이스의 구현을 동시에 진행 가능, 개발 시간 단축
3. 클래스와 클래스간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍 가능
package Java.JavaInterface;
interface Animal { public abstract void cry(); }
interface Pet { public abstract void play(); }
class Cat implements Animal, Pet {
public void cry() {
System.out.println("냐옹냐옹!");
}
public void play() {
System.out.println("쥐 잡기 놀이하자~!");
}
}
class Dog implements Animal, Pet {
public void cry() {
System.out.println("멍멍!");
}
public void play() {
System.out.println("산책가자~!");
}
}
public class Main {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
c.play();
d.cry();
d.play();
}
}
접근제어자
객체 지향에서 정보 은닉이란 사용자가 굳이 알 필요없는 정보는 사용자로부터 숨겨야 한다는 개념. 정보 은닉을 위해 접근 제어자 사용
예외처리
class Main {
public static void main(String[] args) {
try {
int rs = 계산기.나누다(10, -2);
System.out.println(rs);
}
catch ( ArithmeticException e ) {
System.out.println("0으로 나눌 수는 없습니다. ㅠㅠ");
}
catch ( Exception e ) {
System.out.println("알수 없는 에러가 발생하였습니다.");
}
finally {
System.out.println("시스템을 종료합니다!");
}
}
}
class 계산기 {
static int 나누다(int a, int b) throws ArithmeticException {
int rs = a / b;
return rs;
}
}
예외 처리의 필요성을 여기서 느낀다. 배열의 크기가 3보다 작은 경우 datas[0] ~ [2] 까지 배열을 넣게 되면 IllegalArgumentException 오류가 난다. 이를 방지하기 위해 배열의 크기가 3보다 작다면 "직접" 예외를 던져준다.
class Main {
public static void main(String[] args) {
int[] datas = new int[2];
try {
work(datas);
}
catch ( IllegalArgumentException e ) { // v1 의 코드보다 원인이 좀 더 명확해진다. 즉 v1 보다 더 가독성 높은 코드이다.
System.out.println("이런.. 오류가 발생했군요.");
}
}
static void work(int[] datas) {
if ( datas.length < 3 ) {
throw new IllegalArgumentException(); // 함수가 여기서 멈춤
}
datas[0] = 10;
datas[1] = 20;
datas[2] = 30;
}
}