Programming/JAVA

자바의 정석 공부내용 요약(인터페이스, 내부클래스, 예외 던지기). 2020-12-31 ~2021-1-15

최동훈1 2021. 12. 14. 02:50

2020-12-31

오늘의 공부 정리

인터페이스의 장점.-빠른 개발 시간, 서로 관계없는 클래스들끼리의 연결 가능.

표준화가 가능(JDBC을 활용하여 각 sql에 맞게 자바 프로그램을 개발 할 필요 없이 JDBC에 정의된 추상 메소드 들을 적절히 오버라이딩 해서, 사용하면, sql의 종류를 바꾼다 해도, 자바 코드를 그에 맞게 갈아엎을 필요 없음->인터페이스를 통한 표준화)

독립적인 프로그래밍 가능-> 각 클래스들 간의 의존성을 약화시켜서 한 클래스가 변경되어도, 다른 클래스의 코드나 매개변수 등을 변경하지 않아도 됨. 마치 우리가 윈도우 UI가 그대로면, 컴퓨터 내용물이 바뀌어도 전과 똑같이 컴퓨터를 사용할 수 있는 것과 같음.

 

2021-01-08

오늘의 공부 정리.

내부 클래스는 3가지 유형이 있음. 인스턴스, 클래스, 지역 임. 그리고 이 각 3개의 클래스 유형은 인스턴스 변수, 클래스 변수, 지역변수의 특징과 대응됨. 예를 들면 인스턴스 클래스의 경우 인스턴스 변수처럼, 외부클래스의 인스턴스가 생성되있지 않으면, 생성조차 할 수 없음. 그러나 static 클래스 는 클래스 변수의 특징처럼, 외부 클래스의 인스턴스를 생성하지 않아도, 혼자 Outer.Inner ii= Outer.new Inner(); 이런식으로 생성 가능함.

 

또한, static변수의 특징처럼, 외부 클래스의 인스턴스 멤버를 static클래스가 사용하지 못함. 그러나, 외부 클래스의 static 변수는 사용 가능.

 

2. 프로그램에서 예외가 발생하면, 발생한 예외에 해당하는 예외클래스의 인스턴스가 생성됨. 이 클래스로, catch문에서 맞는 예외가 선언된 매개변수를 찾거나, getmessage, printstack 과 같은 메소드를 호출하는 것임.

 

2021-01-11

오늘의 공부 정리.

메소드의 선언부에 throws Exception 이라 나와있으면, 그건 그 메소드를 호출한 곳에서 예외 처리를 해 줘야 한다는 것임. 굳이 예외가 발생한 메서드 안에서 try catch 처리 안해줘도 됨. , 일을 떠맡기는 것임.

그러나 만약 RuntimeException이면, 굳이 예외 처리 하라고, 컴파일 단계에서 에러가 뜨진 않음. 실행시 에러가 남.

public class test {

public static void main(String[] args) {

method1();

}

static void method1() throws RuntimeException {

throw new RuntimeException("동훈아 넌 잘하고 있어.");

}

}

여기선, 예외를 떠맡긴 메서드를 호출했는데도, 예외 처리를 해 주지 않았지만, Runtime예외라 컴파일은 되는것임. 실행하면 에러남.

RuntimeException클래스와 그 자손들은, 프로그래머의 실수에 의해서 실행도중 발생할수 있는 예외들이라 그럼.

 

 

 

 

, 메소드 선언부에 throws로 메서드 안에서 발생한 예외를 던지지 않으면, 반드시 그 메서드 안에서 자체적으로 처리를 해 줘야함. 그렇지 않으면, 컴파일 단계에서 에러가 남.(Runtime은 예외)

메서드 예외 throws를 선언함의 실질적인 효과는 메서드에서 발생할 수 있는 처리해야할 예외를 그 메서드를 사용하는 곳에서 처리해 주도록 떠맡기고, 프로그래머로서 하여금 경고를 주는 것임.(예외처리를 강요하는 것.)

ex) public final void wait() throws InterruptedException; 이면, wait() 메서드를 호출하면, 예외가 발생 할 수 있으니, 처리를 호출하면서 해줘라는 뜻임.

 

throws로 메서드 선언부에서 메서드를 던지지 않고, 예외가 발생한 메서드 내에서 자체적으로 처리되어지면, 예외를 발생시키는 메서드를 호출한 메서드(main 메서드)에서는 예외가 발생했다는 사실조차 모르게 된다.

 

2. try catch 문으로 예외를 검사할 때, 컴파일러는 instanceof 키워드를 가지고, 발생한 예외클래스의 인스턴스와 catch문의 매개변수로 주어진 래퍼런스를 비교해서 맞는 예외를 찾는다.