Java - 12

하승·2022년 7월 11일
0

웹 개발반 - Java

목록 보기
12/19
post-thumbnail

내부 클래스(inner class)

클래스 내부에 클래스를 선언하여 외부 클래스의 필드에
쉽게 접근하기 위해서 사용한다.
내부 클래스의 필드를 사용하기 위해서는 외부 클래스 객체에서
내부 클래스를 객체화 해야 한다.

외부클래스명 객체명  = new 외부클래스명();
외부클래스명.내부클래스명 객체명  = 외부클래스객체.new 내부클래스생성자();
public class InnerTest {
	public static void main(String[] args) {
		
		Shop shop = new Shop(); //내부 클래스의 객체 생성을 위해 외부 클래스 객체 생성
		Shop.Customer customer = shop.new Customer(); 
		customer.getProduct();
	}
}
//외부 클래스
class Shop{
	int product = 10;
	
	Customer hiCustomer() {
		return new Customer();
	}
 //내부 클래스
	class Customer{
		void getProduct() {
			System.out.println("받은 상품의 개수 : "+ product); 
	}
}
}

내부 클래스를 사용하는 이유

1. 상속처럼 사용
	외부 클래스의 필드를 마치 내것처럼 접근하여 사용하기 위함

2. 캡슐화
	외부 클래스의 객체가 없다면 내부 클래스도 존재할 수 없기 때문에
	다른 클래스에서는 내부에 쉽게 접근하지 못하도록 숨기기 위함 

익명 클래스(anonymous inner class)

이름이 없는 클래스
단 하나의 객체(익명 구현 객체)만을 위한 클래스
  • 익명 클래스 예제
package zoo;
//추상 클래스를 만들고 그 안에 추상메소드를 하나 만든다.
public abstract class Animal {
	abstract void makeSomeNoise(); 
}
package zoo;

public class Ground {
	public static void main(String[] args) {
		/*익명 클래스는 앞에 있는 생성자의 클래스를 상속 받고 있는
		  이름 없는 자식 클래스이다. 일회용 클래스이다.
		  그 앞에 있는 생성자를 통해 만드는 객체 딱 하나만을 위한 클래스이고
		  그 때 만들어지는 객체는 익명 클래스 안에서 구현한 메소드 내용을 가지게 된다.
		  이렇게 만들어지는 객체를 "익명 구현 객체" 라고 한다.*/
          
        //Animal을 상속받는 익명 클래스를 만들어서 사용하도록 수정해 보도록 하겠습니다.
		Animal dog = new Animal() {
			@Override
			void makeSomeNoise() {
				System.out.println("왈왈");
			}
		};
        dog.makeSomeNoise();
     }
   }

예외 처리

에러 : 심각한 오류
예외 : 덜 심각한 오류 

try ~ catch ~ finally

public class ExcpetionTest {
	public static void main(String[] args) {
		try {
        //예외가 발생할 수 있는 문장
			System.out.println(Integer.parseInt("10"));
			System.out.println(Integer.parseInt("30"));
			System.out.println(Integer.parseInt("Hello"));
		}
		catch(NumberFormatException nfe) {
        //예외 발생시 수행할 문장
			System.out.println("숫자로 이루어진 문자열만 바꿀 수 있습니다.");
		}
		finally{
        //예외 발생 여부에 상관 없이 무조건 수행할 문장
			System.out.println("꼭 해야되는 문장");
		}
	}
}

Exception 클래스

모든 예외들의 부모클래스
어떤 예외가 발생할지 모를 때 사용한다.
try{

}
catch(Exception e){
 
}
profile
화이팅!

0개의 댓글