중첩 클래스(Nested Class), 중첩 인터페이스(Nested Interface), 일반 예외(Compile Exception) - 0822

안씅👩🏻‍💻·2022년 8월 22일
0
post-thumbnail

중첩 클래스와 중첩 인터페이스

중첩 클래스(Nested Class)란?
: 클래스 *멤버로 선언된 클래스를 부르는 말

중첩 인터페이스(Nested Interface)란?
: 클래스 멤버로 선언된 인터페이스를 부르는 말

  • *UI 컴포넌트 내부 이벤트 처리에 많이 활용됨.

*UI : user interface
*멤버(member) : field +

중첩 클래스

중첩 클래스 종류는 인스턴스 멤버 클래스 , 정적 클래스, 로컬 클래스가 있음.


인스턴스 멤버(instance member) 클래스

  • 상위 객체를 생성해야만 사용할 수 있는 중첩 클래스

정적(static) 클래스

  • 상위 클래스로 바로 접근할 수 있는 중첩 클래스

로컬(local) 클래스

  • 상위 객체의 메소드가 실행할 때만 사용할 수 있는 중첩 클래스

중첩 인터페이스 선언


중첩 인터페이스 접근제한


익명 객체

익명 객체
: 이름이 없는 객체

  • 클래스를 상속하거나 인터페이스를 구현해야함 생성 가능함.
  • 외부에서 익명 객체의 필드와 메소드에 접근할 수 없음.
    • 부모 타입에서 선언된 것들만 사용 가능

익명 클래스

method(new method(){//필드}); 형태

ac.method2(new Person() {
	void study() {
		System.out.println("공부를 합니다.");
	}
	@Override
	void wake() {
		System.out.println("9시에 일어납니다.");
		study();
	}
});

익명 객체 위치

  • 필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입
  • UI 이벤트 처리 객체나, 스레드 객체를 간편하게 생성할 목적으로 주로 활



예외(exception) 처리

에러(error)

  • 프로그래밍으로 컨트롤 할 수 없는 오류
    • 전원 뽑기, 네트워크 통신선 절단...

예외(exception)

  • 프로그래밍으로 막을 수 있는 오류
  • 일반 예외(Compile Exception)실행 예외(Runtime Exception)가 있음

try{} catch{}문으로 예외 처리

try{} catch{} 문법 사용

  • try 안에는 나눗셈 메소드 실행하면서, exception 인스턴스 발생하면 catch 안에 있는 코드 실행함.
  • try 안에 exception 발생하여 catch가 실행되더라도 나머지 코드들이 이어서 정상 실행됨.
try {
	int result = quotient(num1, num2);
	System.out.println(num1 + " / " + num2 + " = " + quotient(num1, num2));
} catch (ArithmeticException e) { // catch 받음
	System.out.println(e.getMessage());
}
        
public static int quotient(int num1, int num2) {
	if (num2 == 0) {
	// 강제로 exception 발생 
	// (ArithmeticException class에 인스턴스를 생성하여 exception 발생)
	throw new ArithmeticException("분모에 해당하는 값으로 0을 사용할 수 없습니다.");
	// throw 던짐
	//문자열을 받는 ArithmeticException 생성자
	}
	return (num1 / num2);
}

일반 예외 (compile Exception)

  • 일반(컴파일) 예외(Compile Exception)
    • 예외 처리 코드가 없으며 컴파일 에러 발생함.
      - 변수를 선언시 오타, ...으로 인한 에러 발생

ClassNotFoundException

  • 프로그램 소스 코드 안에 강제적으로 try-catch문 만들어서 사용해야함.
//Class cls = Class.forName("java,lang.String");
//--> error : Unhandled exception type ClassNotFoundException
		
try {
	// cls : java,lang.String class의 필드, 컨스트럭터, 메소드 관련 정보를 갖고 있는 인스턴스
	// forName 메소드에서 parameter로 넘어온 클래스가 없으면 ClassNotFoundException 인스턴스 발생
	Class cls = Class.forName("java,lang.String");
	System.out.println("클래스가 존재합니다.");
} catch (ClassNotFoundException e) {
	System.out.println("클래스가 존재하지 않습니다.");
}

ArrayIndexOutOfBoundsException

  • array에서 접근할 수 없는 index로 array를 사용하면 발생함.
  • RuntimeException은 개발자 본인 능력에 의해서 판단하여 try-catch문을 만들어야 함.
int[] a = {1,2,3};

System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]); 	// 배열 길이보다 큰 index입력시 error발생

  • ArrayIndexOutOfBoundsException이용해서 예외 만들기.
int[] a = {1,2,3};

try {
	System.out.println(a[0]);
	System.out.println(a[1]);
	System.out.println(a[2]);
	System.out.println(a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
	System.out.println("배열에서 접근할 수 없는 index입니다.");
			
}



ClassCastException

  • 부모 인스턴스를 자식 인스턴스로 강제 형변환할 때 발생하는 예외

if문을 이용해 자식 인스턴스로 강제 형변환

public static void main(String[] args) {
	
    Dog dog = new Dog();
	changeDog(dog);
		
	Cat cat = new Cat();
	changeDog(cat);
}	
	
	public static void changeDog(Animal animal) {
		
        if (animal instanceof Dog) {
			Dog dog = (Dog) animal;
			System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");
		} else {
			System.out.println("Dog 인스턴스로 변환 불가합니다.");
		}
	}

try-catch문으로 ClassCastException사용해 강제형변환

try {
	Dog dog = new Dog();
	changeDog(dog);
	System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");

	Cat cat = new Cat();
	changeDog(cat);
	System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");
    
} catch (ClassCastException e) {
	System.out.println("Dog 인스턴스로 변환 불가합니다.");
}

public static void changeDog(Animal animal) {
	Dog dog = (Dog) animal;
}



NullPointerException

  • null객체에 '.'를 사용하여 메소드를 사용할 경우 발생하는 에러
  • null인 객체에 toString
String data = null;
		
// ptintln method에서 parameter로 넘어오는 String 인스턴스가 null이면 null출력
System.out.println(data);
System.out.println(data.toString());

NullPointerException으로 null인 객체 예외

String data = null;

try {
	System.out.println(data);
	System.out.println(data.toString());
} catch (NullPointerException e) {
	System.out.println("Null Pointer error 발생");
}



NumberFormatException

  • String 문자열을 정수값 등 숫자로 변환할 수 없을 때 발생
    ex) Integer.parseInt("a100")
String data1 = "100";
String data2 = "a100";

int val1 = Integer.parseInt(data1);
		
int val2 = Integer.parseInt(data2);
//--> error : java.lang.NumberFormatException: For input string: "a100"
//String 문자열을 정수값 등 숫자로 변환할 수 없을 때 발생함.

int result = val1 + val2;
System.out.println(data1 + " + " + data2 + " = " + result);

NumberFormatException으로 문자열 숫자로 변환 불가 예외

String data1 = "100";
String data2 = "a100";
		
try {
	int val1 = Integer.parseInt(data1);
	nt val2 = Integer.parseInt(data2);
    
	int result = val1 + val2;
    
	System.out.println(data1 + " + " + data2 + " = " + result);
    
} catch (NumberFormatException e) {
	System.out.println("문자열을 숫자로 변환할 수 없습니다.");
}



실행 예외(Runtime Exception)

  • 실행 예외(Runtime Exception)
    • 예외 처리 코드를 생략하더라도 컴파일 됨.
    • 경험에 따라 예외 처리 코드 작성이 필요함.

profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글