교육 (Today I Learned)/SeSAC

SeSAC 11일차 / 자바 기초(인터페이스, 자바 예외 처리)

Bay Im 2023. 8. 2. 00:44
SeSAC 11일차(2023-07-31)
자바 기초(인터페이스, 자바 예외 처리)


인터페이스

 

  • 자바의 인터페이스

추상 메소드와 상수로만 이루어진 정의 (필드나 일반 메소드 정의 불가)

interface로 정의

 

 

 

  • 인터페이스의 사용

인스턴스로 바로 생성 불가능

상속을 통해서 사용

다중 상속 가능

 

 

 

  • 인터페이스 정의

추상 메소드와 정적 상수만 정의

외부에서의 접근으로 사용하므로 접근자는 public

abstract public과 public static final은 생략 가능

 

기본 형태)

접근지정자 interface 인터페이스이름 {

    [abstract public] 추상메소드

    [public static final] 상수

}

 

ex)

public interface OnDealig {

    int CODE = 100;

 

    abstract public boolean onAgreement();

    void onDeal(int dealPrice);

}

 

 

 

  • 인터페이스 사용

implements 상속을 통해서 인터페이스 생성 또는 익명 클래스로 생성

추상 메소드는 반드시 오버라이딩 되어야함

 

ex1)

public class Seller extends Member implements OnDealing {

    

    @Override

    public boolean onAgreement() {

        sout(name + “님이 판매를 승인하였습니다.”);

        return true;

    }

 

    @Override

    public void onDeal(int dealPrice) {

        setPoint(dealPrice);

    }

}

 

ex2)

OnDealing onDealing = new OnDealing() {

    

    @Override

    public boolean onAgreement() {

        sout(name + “님이 판매를 승인하였습니다.”);

        return true;

    }

 

    @Override

    public void onDeal(int dealPrice) {

        setPoint(dealPrice);

    }

}

 

 

 

  • 인터페이스 메소드 실행

인터페이스 상속 인스턴스 또는 추상 클래스의 인스턴스를 실행 클래스에 제공 (set 메소드 활용 추천)

실행 클래스에서 인터페이스의 메소드를 실행

 

ex)

public class DealButton {

    OnDealing onDealing;

 

    public void setOnDealing(OnDealing onDealing) {

        this.onDealing = onDealing;

    }

 

    public void agreement() {

        onDealing.onAgreement();

    }

 

    public void deal(int dealPrice) {

        onDealing.onDeal(dealPrice);

    }

}

 

 

 

 

 

자바 예외 처리

오류와 예외

 

  • 컴파일 오류

문법에 맞지 않게 작성된 코드이며 컴파일할 때 발견

 

 

  • 예외(Exception)

오동작이나 결과에 악영향을 미칠 수 있는 실행 중 발생한 오류

ex)

정수를 0으로 나누는 경우, 존재하지 않는 파일을 읽으려고 하는 경우… 등

 

 

  • Checked Exception

반드시 명시적인 예외 처리(try-catch나 throws)를 해야하는 예외

 

 

 

예외 처리

 

  • try-catch-finally

예외가 발생할 때 프로그램이 중단되지 않고 예외를 제어

 

try {}: 예외 발생을 인지할 여역

catch (예외 타입) {}: try에서 해당 예외 타입을 발생했을 때 실행 영역

finally {}: 예외 발생 유무와 상관없이 실행될 영역

 

예외 타입은 수퍼클래스로 사용 가능 (RuntimeException, Exception)

 

ex1)

try {

    String menu = null;

    menu.substring(0, 3);

    sout(”메뉴가 입력 되었습니다.”);

} catch (NullPointerException e) {

    sout(”메뉴가 입력되지 않았습니다.”);

}

 

ex2)

try {

    String menu = null;

    menu.substring(0, 3);

    sout(”메뉴가 입력 되었습니다.”);

} catch (RuntimeException e) {

    sout(”메뉴가 입력되지 않았습니다.”);

} finally {

    sout(”어서오세요”);

}

 

 

 

 

 

오늘의 실습 코드

https://github.com/yubin-im/SeSAC/tree/4a8c4f59ad2fb524fcf03111a802fd616cee29dd/20230731