1️⃣ 인터페이스
📑목적
- 표준화 : 특정 기능 제공해야하는 클래스들이 동일한 메서드 형태를 갖게 함
- 다형성 : 인터페이스 타입으로 다양한 구현체 처리 가능
- 느슨한 결합 : 의존성을 인터페이스로 추상화해서 유지보수성과 확장성 향상
📑 특징
- 추상 메서드 + (Java 8 이후) default, static 메서드 허용
- public static final 상수만 사용 가능 ( 일반 변수 불가)
📑 구조
[public] interface 인터페이스 이름 {...}
[public] class 클래스명 implements 인터페이스명{ ...}
📑 예제
LTV, STV는 github 참고
public interface TV {
public void togglePower();
public void volumeUp();
public void volumeDown();
public void channelUp();
public void channelDown();
public void setChannel(int channel);
public default void abc(){
}
}
public class TVUser {
public static void main(String[] args) {
// STV stv = new STV();
// stv.togglePower();
// stv.channelUp();
// stv.channelUp();
// stv.volumeDown();
// stv.channelUp();
// stv.volumeUp();
// stv.togglePower();
// LTV ltv = new LTV();
// ltv.setPower();
// ltv.channUp();
// ltv.channUp();
// ltv.soundUp();
// ltv.channUp();
// ltv.soundUp();
// ltv.setPower();
//STV에서 LTV로 변경할 때 인터페이스를 활용
TV tv = new LTV();
tv.togglePower();
tv.channelUp();
tv.channelUp();
tv.volumeDown();
tv.channelUp();
tv.volumeUp();
tv.togglePower();
}
}
📑 default 메서드
인터페이스의 구현체를 가질 수 있음(구현된 형태의 메서드를 가짐)
interface Animal {
String getFood();
default void printFood() {
System.out.printf("my food is %s\n", getFood());
}
}
📑 static 메서드
- 헷갈려서 다시 정리해야함
public interface MyInterface {
// public static final int CONSTANT = 10; //상수는 대문자로
public int CONSTANT = 10; //interface에서 public static final 생략 가능
// 추상 메서드
void doSomething();
// default 메서드
public default void doDefault(){ // default 메서드
System.out.println("구현이 가능하다. ");
}
// static 메서드
public static void staticMethod(){ // static 메서드
System.out.println("인터페이스의 static 메서드");
}
}
📑 다중 구현
public interface Flyable {
void fly();
}
public interface Swimable {
void swim();
}
public class Duck implements Flyable, Swimable {
@Override
public void fly() {
System.out.println("오리가 날아갑니다.");
}
@Override
public void swim() {
System.out.println("오리가 물에서 헤엄칩니다.");
}
}
public class Main {
public static void main(String[] args) {
Duck duck = new Duck();
duck.fly();
duck.swim();
}
}
2️⃣ 예외 처리
프로그램 실행 중 발생할 수 있는 예외를 안전히 처리하는 프로그래밍 기법.
예외가 발생하면 예외가 발생한 지점부터 실행되지 않는다.
📑 구조
try { 예외가 발생할 수 있는 코드 포함}
catch {try 블록에서 발생한 예외 처리}
fianlly {예외 발생 여부와 관계없이 실행됨}
📑 코드
public class ExceptionExam02 {
public static void main(String[] args) {
int[] iarr = {0,1,2,3};
try {
System.out.println(iarr[3]); // 에러(1)
int i = iarr[3]/iarr[0]; // 에러(2)
System.out.println("다음 문장");
System.out.println("그 다음 문장");
}catch(ArrayIndexOutOfBoundsException e) { // 에러(1) 대처
System.out.println(e);
} catch(ArithmeticException e) { //에러(2) 대처
System.out.println(e.getMessage());
/*
} catch(Exception e){ // 모든 에러 대처
System.out.println(e);
}
*/
}finally {
System.out.println("finally~ 반드시 실행되는 블럭");
}
System.out.println("다음 문장");
System.out.println("그 다음 문장");
}
}
📑 복기 시간
(1) 컴파일시점 런타임 시점
'🏕 멋사 Java 백엔드 13기 > TIL' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 12일차 | DB (2) | 2024.12.17 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 11일차 | DB (1) | 2024.12.16 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 6일차 (2) | 2024.12.09 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 4일차 (0) | 2024.12.05 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 3일차 (1) | 2024.12.04 |