[Day19] Java 19 [9/2]

 

1. μΈν„°νŽ˜μ΄μŠ€

1) μžλ°” μžλ£Œν˜•

  a) κΈ°λ³Έν˜• - 8가지

  b) μ°Έμ‘°ν˜• - λ°°μ—΄, 클래슀, [μΈν„°νŽ˜μ΄μŠ€]

 

2) μ°Έμ‘°νƒ€μž…  

3) μΌμ’…μ˜ μΆ”μƒν΄λž˜μŠ€μ΄λ‹€. 

- μΆ”μƒν΄λž˜μŠ€ ? μΆ”μƒλ©”μ„œλ“œ 1개, [객체 생성 X 클래슀]

 

4) μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ ν˜•μ‹

[μ ‘κ·Όμ§€μ •μž]  interface μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„{   // λŒ€λ¬Έμžλ‘œ μ‹œμž‘         IμΈν„°νŽ˜μ΄μŠ€λͺ…

(public static μƒλž΅)

 

5) 멀버 μ„ μ–Έ

  a) ν•„λ“œ X, 일반 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ X

  b) final μƒμˆ˜ O ,  μΆ”μƒλ©”μ„œλ“œ O    JDK1.8 (  static λ©”μ„œλ“œ , default λ©”μ„œλ“œ )

       public static final   μƒλž΅λ˜μ–΄μ Έ μžˆλ‹€. 

       }           

 

6) μΈν„°νŽ˜μ΄μŠ€μ˜ 상속  extends  ν‚€μ›Œλ“œ μ‚¬μš©

interface Fightable extends Movable, Attackable{

      

7) 클래슀 implements μΈν„°νŽ˜μ΄μŠ€,,,,,,,{

class Marine implements  Fightable {

}

 

8) μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속 κ°€λŠ₯

interface IA{
	void test();
}

interface IB extends IA{
	// void test();
	void testb();
}

// μΈν„°νŽ˜μ΄μŠ€ 끼리 상속 κ°€λŠ₯
interface IC   extends   IA{
	// void test();
	void testc();
}

// μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ”  implements ν‚€μ›Œλ“œ μ‚¬μš©ν•œλ‹€.  
//class A implements IA, IB{  // μΈν„°νŽ˜μ΄μŠ€ 닀쀑 상속 κ°€λŠ₯
class A implements IC , IB{  // μΈν„°νŽ˜μ΄μŠ€ 닀쀑 상속 κ°€λŠ₯
	
	@Override
	public void test() {
		System.out.println("μ˜€λ²„λΌμ΄λ”©~ ");
	}

	@Override
	public void testc() { 
		
	}

	@Override
	public void testb() {
		// TODO Auto-generated method stub
		
	}
}

 

μ˜ˆμ‹œ)

public class Ex03 {

	public static void main(String[] args) {
		String fileName = "document.xml";  //    "document"  "html"
		
		//String fileName = "document.xml";
		//ParserManagerν΄λž˜μŠ€λ‘œλΆ€ν„° XML λ¬Έμ„œ νŒŒμ‹±ν•˜λŠ” 객체λ₯Ό μ–»μ–΄μ™€μ„œ νŒŒμ‹± 처리
		//ParserManagerν΄λž˜μŠ€λ‘œλΆ€ν„° HTML λ¬Έμ„œ νŒŒμ‹±ν•˜λŠ” 객체λ₯Ό μ–»μ–΄μ™€μ„œ νŒŒμ‹± 처리
		
		// 클래슀 λ©”μ„œλ“œ  
		// String [] xx =  fileName.split(".");
		//  fileName.split(String regex)
		// regex μ •κ·œν‘œν˜„μ‹   . any char~
		//                            \. == '.'
		
		String type =   fileName.split("\\.")[1].toUpperCase(); //  "HTML"
		// XMLParser/HTMLParser   parser = ParserManager.getParser( type );
		// *** μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„± κ°œλ….  ****
		Parseable   parser = ParserManager.getParser( type );
		// μ‹€μ œ 객체의 μ˜€λ²„λΌμ΄λ”© 된 parse();
		parser.parse(fileName);

	} // main

} // class

// μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ
interface Parseable{
     // ꡬ문 뢄석 μž‘μ—…  == νŒŒμ‹±
	 void parse(String fileName);
}

// XML λ¬Έμ„œλ₯Ό ꡬ뢄 λΆ„μ„ν•˜λŠ” 클래슀
class XMLParser implements Parseable{ 
	@Override
	public void parse(String fileName) { 
		System.out.printf("%s -  XML νŒŒμ‹± μ™„λ£Œμ²˜λ¦¬ κ΅¬ν˜„.\n", fileName);
	} 
}

//HTML λ¬Έμ„œλ₯Ό ꡬ뢄 λΆ„μ„ν•˜λŠ” 클래슀
class HTMLParser implements Parseable{ 
	@Override
	public void parse(String fileName) { 
		System.out.printf("%s -  HTML νŒŒμ‹± μ™„λ£Œμ²˜λ¦¬ κ΅¬ν˜„.\n", fileName);
	} 
}

class ParserManager{
	//                   λ¦¬ν„΄μžλ£Œν˜• == μΈν„°νŽ˜μ΄μŠ€
	// This method must return a result of type Parseable
	public static Parseable  getParser(String type) {
		if( type.equals("XML") ) {
			return  new XMLParser();
		}else if( type.equals("HTML")) {
			return  new HTMLParser();
		} 
		// xml, html νƒ€μž…μ΄ μ•„λ‹Œ κ²½μš°μ—λŠ” μ²˜λ¦¬ν•  객체 μ—†λ‹€μ˜λ―Έλ‘œ   return null;
		return null;
	}
}

 

2. μΈν„°νŽ˜μ΄μŠ€μ˜ λ‹€ν˜•μ„±

- μ—…μΊμŠ€νŒ…

μ˜ˆμ‹œ1) List

List   alist =  new ArrayList();

 

μ˜ˆμ‹œ2) Car - [S,K,H] Engine

/*
new K_Engine()
new S_Engine()
new H_Engine()
new S_Engine()
*/

// μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„±
IEngine engine = new H_Engine();

// S, K, H νšŒμ‚¬ 엔진 곡급
Car c1 = new Car("K9", "μˆ˜λ™", engine);  //μ™ΈλΆ€ 쑰립라인 μžλ™μΉ΄ + [S],K,H엔진

c1.speedUp(10);
c1.speedDown(10);

μ˜ˆμ‹œ3) λ§€κ°œλ³€μˆ˜ λ‹€ν˜•μ„±(IEngine engine)

public Car(String name, String gearType, IEngine engine) {
		this(name, gearType);		
		this.engine = engine;
	}

3. λ””ν΄νŠΈ λ©”μ„œλ“œ

쑰상 ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 별일이 μ•„λ‹ˆμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€μ˜ κ²½μš°μ—λŠ” 보톡 큰 일이 μ•„λ‹ˆλ‹€. 

 

- μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ μΆ”μƒλ©”μ„œλ“œ λ§Œλ“€λ©΄ ν•˜μœ„ λ©”μ„œλ“œλ„ λ‹€ μ—…λ°μ΄νŠΈ μ‹œμΌœμ•Όν•˜λŠ” λΆˆνŽΈν•¨

-> λ””ν…νŠΈ λ©”μ„œλ“œ

-> default void newMethod() { κ΅¬ν˜„ ν•˜λ“  μ•ˆν•˜λ“  상관 μ—†μŒ }

-> λ¬Έμ œκ°€ 없어짐

 

* static λ©”μ„œλ“œ : 클래슀λͺ….staticλ©”μ„œλ“œ()둜만 호좜 κ°€λŠ₯

 

* κ°œλ°©νμ‡„μ˜ 원칙 μœ„λ°˜ν•œ μΌ€μ΄μŠ€

* μ•„λž˜ 링크 μΆ”κ°€ μ„€λͺ…

https://velog.io/@heoseungyeon/%EB%94%94%ED%8F%B4%ED%8A%B8-%EB%A9%94%EC%84%9C%EB%93%9CDefault-Method


4. μΈν„°νŽ˜μ΄μŠ€ μž₯점

1) κ°œλ°œμ‹œκ°„ 단좕 

- μΈν„°νŽ˜μ΄μŠ€λ§Œ μž‘μ„±λ˜λ©΄ κ΅¬ν˜„ν΄λž˜μŠ€κ°€ μ•ˆλ§Œλ“€μ–΄μ Έμžˆλ”λΌλ„ ν•΄λ‹Ή κ΅¬ν˜„ν΄λž˜μŠ€λ₯Ό μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•΄μ„œ Car 클래슀λ₯Ό λ™μ‹œμ— κ°œλ°œν•  수 μžˆλ‹€.

- Engine μΈν„°νŽ˜μ΄μŠ€λ§Œ μž‘μ„±λ˜μ–΄λ„ Car 클래슀 개발 κ°€λŠ₯ν•˜λ‹€λŠ” μ–˜κΈ°

public interface IEngine {
	// "μƒμˆ˜, μΆ”μƒλ©”μ„œλ“œ,        JDK1.8 μƒˆλ‘œ μΆ”κ°€ - defaultλ©”μ„œλ“œ, static λ©”μ„œλ“œ" 만 μ„ μ–Έ κ°€λŠ₯
	int MAX_SPEED = 400;

	public abstract void moreFuel( int fuel ) ;
	void lessFuel( int fuel ) ;
	void stop() ;
	
	// μƒˆλ‘œμš΄ μΆ”μƒλ©”μ„œλ“œ     [  jdk 1.8 μƒˆλ‘œ  멀버] 
	// default λ©”μ„œλ“œ
	default void newMethod() {
		// κ΅¬ν˜„ X, O
	}
	
	// statc  λ©”μ„œλ“œ 
	static void staticMethod() {
		// 
	}

}

- Car 클래슀의 getter, setterκ°€ Engine ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλΌ IE μΈν„°νŽ˜μ΄μŠ€ κΈ°μ€€μœΌλ‘œ λ§Œλ“€μ–΄μ Έμ•Όν•¨

// μžλ™μ°¨ 클래슀 μ„ μ–ΈλΆ€
public class Car {
	// ν•„λ“œ
	String name;
	String gearType;
	int door;
	//           클래슀   객체;
	// S,K,H 엔진 생산 + λ‚©λΆ€
	// μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„±
	private  IEngine engine ; 
	
	// getter, setter
	public IEngine getEngine() {
		return engine;
	}

	public void setEngine(IEngine engine) {
		this.engine = engine;
	}

	// μƒμ„±μž
	Car(){ 
	}
	
	public Car(String name, String gearType) {
	 
		this();
		this.name = name;
		this.gearType = gearType;
	}
                                                                       //  λ§€κ°œλ³€μˆ˜  λ‹€ν˜•μ„±
	public Car(String name, String gearType, IEngine engine) {
		this(name, gearType);		
		this.engine = engine;
	}

	// λ©”μ„œλ“œ
	void speedUp(int fuel) { 
		this.engine.moreFuel(fuel);  
	}
    void speedDown(int fuel) {
		this.engine.lessFuel(fuel);
	}
    void stop() {
    	this.engine.stop();
    }
} // class

 

2) ν‘œμ€€ν™” κ°€λŠ₯

- κΈ°λ³Έ ν‹€μ΄λ˜λŠ” 엔진 μΈν„°νŽ˜μ΄μŠ€ μž‘μ„±ν•˜λ©΄ S,K,H 클래슀둜 엔진 생산할 것이기 λ•Œλ¬Έμ— IE μ•ˆμ— κΈ°λŠ₯듀이 λ°˜λ“œμ‹œ 일반되고 μ •ν˜•ν™”λœ ν”„λ‘œκ·Έλž˜λ° 개발이 κ°€λŠ₯, 즉 ν‘œμ€€ν™”κ°€ κ°€λŠ₯!

 

*주의 : μΈν„°νŽ˜μ΄μŠ€μ— κ΅¬ν˜„λœ λ©”μ„œλ“œμ˜ μ ‘κ·Όμ§€μ •μžκ°€ public 일 λ•Œ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 ν΄λž˜μŠ€λ“€μ—μ„œ λ©”μ„œλ“œ κ΅¬ν˜„ν• λ•Œ μ˜€λ²„λΌμ΄λ”© 쑰건을 μ§€μΌœ (여기에선 public 뢙여야함) κ΅¬ν˜„ν•΄μ•Όν•¨.

 

3) μ„œλ‘œ κ΄€κ³„μ—†λŠ” ν΄λž˜μŠ€λ“€ κ°„ 관계 λ§Ίμ–΄μ€Œ (μ„œλ‘œ 상속관계가 μ•„λ‹ˆλ”λΌλ„)

- S,K,H λͺ¨λ‘ IEλΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀

/*
new K_Engine()
new S_Engine()
new H_Engine()
new S_Engine()
*/

// μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„±
IEngine engine = new H_Engine();

// S, K, H νšŒμ‚¬ 엔진 곡급
Car c1 = new Car("K9", "μˆ˜λ™", engine);  //μ™ΈλΆ€ 쑰립라인 μžλ™μΉ΄ + [S],K,H엔진

c1.speedUp(10);
c1.speedDown(10);

 

4) 독립적인 ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯

- μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•˜λ©΄ S,H,K 클래슀 μ„ μ–Έν•˜λŠ” κ³³κ³Ό μ‹€μ œ IE μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©ν•˜λŠ” 곳을 λΆ„λ¦¬ν•΄μ„œ 독립적인 ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯


5. days19 Ex06

public class Ex06 {
	public static void main(String[] args) {
		/*
		List  list = new ArrayList();
		test(list);
		*/
		
		Tank tank= new Tank();		
		SCV scv = new SCV();
		
		// 
		scv.repair(tank);
		
		Marine m = new Marine();
		//   Repariable p = Marine m X  (λ§ˆλ¦°μ€ RepairableμΈν„°νŽ˜μ΄μŠ€ μ—†κΈ°λ•Œλ¬Έ!)
		//   μ—…μΊμŠ€νŒ… X
		//   scv.repair(m);
	} // main
	static void test( List list) {	
	}
} // class

// μΈν„°νŽ˜μ΄μŠ€
// ( 멀버 ν•˜λ‚˜λ„ μ—†λ‹€. )
interface Repairable{}

class Unit{        // κ΅¬μ„±λ‹¨μœ„
   int hitPoint;
   final int MAX_HP;
   Unit(int hp){
	   MAX_HP = hp;
   }
   // 멀버 ꡬ성
}

class GroundUnit extends Unit{ 
	GroundUnit(int hp) {
	    super(hp);	
	}
	// 멀버 ꡬ성
}

class AirUnit extends Unit { 
	AirUnit(int hp) {
	    super(hp);	
	}
}

// μˆ˜λ¦¬κ°€ κ°€λŠ₯ν•œ 객체
class Tank extends GroundUnit implements Repairable{

	Tank() {
		super(150); 
		this.hitPoint = MAX_HP;
	}
	
	public String toString() {
		return "Tank";
	}
}

class Marine extends GroundUnit{
	Marine(){
		super(40);
		this.hitPoint = MAX_HP;
	}
}

//μˆ˜λ¦¬κ°€ κ°€λŠ₯ν•œ 객체
class SCV extends GroundUnit implements Repairable{
	SCV() {
		super(60); 
		this.hitPoint = MAX_HP;
	}
	
	// 수리 λ©”μ„œλ“œ 
	//                μΈν„°νŽ˜μ΄μŠ€ λ‹€ν˜•μ„±
	// μΈν„°νŽ˜μ΄μŠ€λ‘œ λ§€κ°œλ³€μˆ˜ λ°›μ•˜μ§€λ§Œ p둜 ν• μˆ˜μžˆλŠ”κ±΄ μ—†μŒ, κ·Έλž˜μ„œ Unit의 μΈμŠ€ν„΄μŠ€μΈμ§€ ν™•μΈν•˜κ³  λ‹€μš΄μΊμŠ€νŒ… ν•˜λŠ” 
	void repair( Repairable p) {
		
		 if(  p instanceof Unit ) {
			 Unit u  = (Unit)p;  // λ‹€μš΄μΊμŠ€νŒ… 
			 while( u.hitPoint != u.MAX_HP ) {
				 u.hitPoint++;
			 }
		 }
	}
}

implements serializable (직렬화 interface)


6. λ‚΄λΆ€ 클래슀

1) λ‚΄λΆ€ 클래슀 - 클래슀 내에 μ„ μ–Έ (μ‚¬μš© λΉˆλ„ X)

2) λ‚΄λΆ€ 클래슀 μž₯점

- λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ™ΈλΆ€ 클래슀의 멀버듀을 μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€.

- μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€ ( μΊ‘μŠν™” )

( λΆˆν•„μš”ν•œ 클래슀λ₯Ό 감좀으둜써 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€ )

      

3) λ‚΄λΆ€ 클래슀의 4가지 μ’…λ₯˜

γ„±. μΈμŠ€ν„΄μŠ€ 클래슀  X

γ„΄. μŠ€νƒœν‹± 클래슀    X

γ„·. 지역 클래슀       X

γ„Ή. 읡λͺ…(무λͺ…) 클래슀       O

  γ„΄ Anoymous Class

  γ„΄ 클래슀 μ„ μ–Έκ³Ό 객체 생성을 λ™μ‹œμ— ν•˜λŠ” 이름 μ—†λŠ” 클래슀( μΌνšŒμ„± )

  γ„΄ 주둜 GUIμ–΄ν”Œλ¦¬μΌ€μ΄μ…˜( AWT, Swing )의 이벀트 처리 μ‚¬μš©.

 

4) 읡λͺ… 클래슀 μ„ μ–Έ ν˜•μ‹

new μ‘°μƒν΄λž˜μŠ€μ΄λ¦„(){
// 멀버 μ„ μ–Έ          
}

λ˜λŠ” 

new κ΅¬ν˜„μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„(){
// μΆ”μƒλ©”μ„œλ“œ   μ˜€λ²„λΌμ΄λ”©.
}

new IEngine(){
// moreFuel()
// lessFuel()
// stop()
}

μ„ μ–Έκ³Ό λ™μ‹œμ— 생성

this.addWindowListener ( new WindowAdapter() {
public void windowCllosing(Windw e ) {
////μ½”λ”©
}
}

-> λ‹€λ₯Έ λ°μ„œ μ“Έ ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 읡λͺ…ν΄λž˜μŠ€λ‘œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 이벀트 처리둜 μ„ μ–Έν•˜λŠ” 경우

-> λ²„νŠΌ, 이벀트 λ¦¬μŠ€λ„ˆμ— μ‚¬μš©


7. μ—λŸ¬

1. μ—λŸ¬(였λ₯˜) - ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 μ˜€μž‘λ™, λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜λŠ” 원인

2. μ—λŸ¬ λ°œμƒμ‹œμ 

      (λΉŒλ“œμ˜€λ₯˜ = 컴였λ₯˜ + μ‹€μ˜€λ₯˜)

      1) 컴파일 였λ₯˜ - 컴파일 μ‹œμ— λ°œμƒν•˜λŠ” 였λ₯˜

              Test.java -> javac.exe -> Test.class

              μ†ŒμŠ€νŒŒμΌ                              Class파일

      2) λŸ°νƒ€μž„(μ‹€ν–‰) 였λ₯˜ - μ‹€ν–‰ μ‹œ λ°œμƒν•˜λŠ” 였λ₯˜ 

                 java.exe Test μ‹€ν–‰

            μžλ°”μ—μ„œ λŸ°νƒ€μž„(μ‹€ν–‰) 였λ₯˜λ₯Ό 2가지 ꡬ뢄

            γ„±. μ—λŸ¬(error) - λ©”λͺ¨λ¦¬ λΆ€μ‘±, μŠ€νƒμ˜€λ²„ν”Œλ‘œμ›Œ, 볡ꡬ할 수 μ—†λŠ” μ‹¬κ°ν•œ 였λ₯˜

                                  Error 클래슀 

            γ„΄. μ˜ˆμ™Έ(exception)      - 수슡될 수 μžˆλŠ” 비ꡐ적 덜 μ‹¬κ°ν•œ μ‹€ν–‰ 였λ₯˜

                                  Exception 클래슀

                 μ˜ˆμ™Έ 처리~

                 

      3) 논리적 였λ₯˜  - 싀행은 λ˜μ§€λ§Œ μ˜λ„μ™€ λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ” 것

                         ( μ—λŸ¬ 작기 κ°€μž₯ μ–΄λ ΅λ‹€. )

           int i = 100 + Integer.MAX_VALUE;

           System.out.println( i );  // -2147483549

             

      3. μ˜ˆμ™Έ 클래슀 상속 계측 ꡬ쑰 

                                Object

                                   

                             Throwable

                                   

          Exception                                         Error     

           

                    γ„΄ IOException    

                    γ„΄ ClassNotFoundException

                    γ„΄ RuntimeException

                                  γ„΄ ArithmeticException

                                  γ„΄ ClassCastException

                                  γ„΄ NullPointException

                                  :

                                  γ„΄IndexOutOfBoundsException

                                  γ„·λ“±λ“±

             

      4.     μ˜ˆμ™Έ 처리( exception handling )

              μ •μ˜ : ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έμ— λŒ€λΉ„ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것.

              λͺ©μ  : ν”„λ‘œκ·Έλž¨ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜λŠ” 것 막고, 정상적인 μ‹€ν–‰ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것.

               

      5.  λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό κ°œλ°œμžκ°€ λŒ€λΉ„ν•΄μ„œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ ν”„λ‘œκ·Έλž¨μ€ μ’…λ£Œλ˜κ³  μ²˜λ¦¬λ˜μ§€ λͺ»ν•œ μ˜ˆμ™ΈλŠ”  JVM의 μ˜ˆμ™Έμ²˜λ¦¬κΈ°(UncaughtExceptionHandler)κ°€ λ°›μ•„μ„œ μ˜ˆμ™Έμ˜ 원인을 화면에 좜λ ₯ν•œλ‹€.    

             

Exception in thread "main" java.lang.ArithmeticException: / by zero

at days19.Ex10.main(Ex10.java:36)

 

        6. μ˜ˆμ™Έ μ²˜λ¦¬ν•˜λŠ” 방법 2가지

              1) try~ catch λ¬Έ

              2) throws λ¬Έ


7. μ˜ˆμ™Έ 처리

1) try catch문

public class Ex11_02 {
	public static void main(String[] args) {
		// 
		int a, b;
		 
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("> a, b μ •μˆ˜ μž…λ ₯ ? ");
		a = scanner.nextInt();
		b = scanner.nextInt();
		 
		try {
        // μ˜ˆμ™Έ λ°œμƒ μ½”λ”©
		double c =   a / b;
		System.out.printf("%d / %d = %.2f \n", a, b, c);
			    
		int [] m  = new int[3]; // 0, 1, 2
			    
			try {
        		m[3] = 100; 
				System.out.println( m[3] );
			} catch (ArrayIndexOutOfBoundsException e) {
				System.out.println("4");
			} // 
			   
			     
		}catch(IllegalFormatConversionException | ArithmeticException e) {  
			try {	
			} catch (Exception e2) {
				// TODO: handle exception
			}
			// jdk 1.7 제곡                              λ©€ν‹° catch λΈ”λŸ­
			// μ˜ˆμ™Έμ²˜λ¦¬ 
			// System.out.println("1");
			// System.out.println(  e.getMessage() ); //  μ˜ˆμ™Έ μ €μž₯된 λ©”μ‹œμ§€                / by zero
			// e.printStackTrace();
			// System.out.println(  e.toString() );  // java.lang.ArithmeticException: / by zero
		} catch ( Exception e ) {  // λ‹€ν˜•μ„±
        	// μ˜ˆμ™Έμ²˜λ¦¬ 
			System.out.println("3");
		} 
		// 닀쀑 catch문을 μ‚¬μš©ν•  λ•ŒλŠ” μˆœμ„œ(μ£Όμ˜ν•  점)   instanceof μ—°μ‚°μž

		System.out.println("> ν”„λ‘œκ·Έλž¨ μ •μƒμ μœΌλ‘œ 진행~~");
		// Exception in thread "main" java.lang.ArithmeticException: / by zero
		// at days19.Ex11.main(Ex11.java:47)
		//  java.util.IllegalFormatConversionException	
	} // main
} // class

μ˜ˆμ™Έμ²˜λ¦¬ μˆœμ„œ (finally)

// μ˜ˆμ™Έ 처리 μˆœμ„œ.
System.out.println(" μ½”λ”© 1 ");
	try {
		// 파일,  DB Open
        // νŒŒμΌμ“°κΈ°, 읽기
		// DB  CRUD μž‘μ—…
		System.out.println(" μ½”λ”© 2 ");
		int i = 10/0;
		System.out.println(" μ½”λ”© 3 ");
	} catch (ArrayIndexOutOfBoundsException e) {
		System.out.println(" μ½”λ”© 4 ");
	} catch (Exception e) {
		System.out.println(" μ½”λ”© 5 ");
	} finally {
		// try {} μ—μ„œ μ˜ˆμ™Έ λ°œμƒ μœ λ¬΄μ—  상관없이 μ²˜λ¦¬λŠ” λΈ”λŸ­
		System.out.println(" μ½”λ”© 6 ");
		// 파일 Close
		// DB   Close
	}
System.out.println(" μ½”λ”© 7 ");

2) try catch문

public class Ex13 {

	public static void main(String[] args) {
		int kor ;		
		Scanner scanner = new Scanner(System.in);
		
		try {
			System.out.print("> κ΅­μ–΄ 점수 μž…λ ₯ ? ");		
			kor =  scanner.nextInt();		
			//if( !( 0>=kor && kor<=100 ) )
			if(  0 > kor || kor > 100 ) {
				//  κ°•μ œ μ˜ˆμ™Έ λ°œμƒμ‹œν‚€μž.
				throw new ArithmeticException();  // μ‚°μˆ μ  μ˜ˆμ™Έ    10/0
			}
			System.out.printf("> κ΅­μ–΄ 점수 : %d 점\n", kor);
            
		} catch (ArithmeticException e) {
			 System.out.println("κ΅­μ–΄ 점수 λ²”μœ„ 벗어남!!");
		}catch (Exception e) {
			 e.printStackTrace();
		}
		System.out.println("end");	
	} // main
} // class
public class Ex14 {
	public static void main(String[] args)   {
		// br.readLine();
		// p 426   컴파일러 : uncheckedμ˜ˆμ™Έ, checked μ˜ˆμ™Έ
		/*
	    try {
			int one = System.in.read();
		} catch (IOException e) {
			e.printStackTrace();
		}
		*/
		
		int kor;
		try {
			kor = getScore();
			System.out.println( kor );
			
		} catch (InputMismatchException | IOException e) {
		 
			e.printStackTrace();
		} catch( Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("end");
		
	} // main

	// μž…λ ₯값이 0~100점 λ°˜ν™˜
	// κ·Έλ°–      κ°•μ œ μ˜ˆμ™Έ λ°œμƒ  throw
	private static int getScore() throws InputMismatchException, IOException{
		Scanner scanner = new Scanner(System.in);
		int score;
		
		System.out.print("> 점수 μž…λ ₯ ? ");
		String data = scanner.next();
		if( data.matches("100|[1-9]?\\d") ) {  // 0~100
			score = Integer.parseInt(data);
			return score;
		}else {
			//  μž…λ ₯ 뢈일치 μ˜ˆμ™Έ 클래슀
			throw new InputMismatchException("점수 λ²”μœ„(0~100) 벗어났닀.");
		}		
	} // getScore
}

*

Scanner λŠ” νŒŒμΌμ΄λ“  뭐든 μƒμ„±μžλ“  μ—μ„œλΆ€ν„° μ½μ–΄λ“€μ΄λŠ” μ—­ν• 

system.in = μƒμ„±μžμ— λ“€μ–΄κ°„ κ°’

new Scanner( μ—¬κΈ° λ“€μ–΄κ°„ κ°’ ) ν•„λ“œ μ΄ˆκΈ°ν™”λ¨

  • 넀이버 λΈ”λŸ¬κ·Έ κ³΅μœ ν•˜κΈ°
  • 넀이버 λ°΄λ“œμ— κ³΅μœ ν•˜κΈ°
  • 페이슀뢁 κ³΅μœ ν•˜κΈ°
  • μΉ΄μΉ΄μ˜€μŠ€ν† λ¦¬ κ³΅μœ ν•˜κΈ°