[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( μ¬κΈ° λ€μ΄κ° κ° ) νλ μ΄κΈ°νλ¨
μ΅κ·ΌλκΈ