[Day18] Java 18 [9/1]
1. λ€νμ±
1) μ μ : μ¬λ¬κ°μ§ ννλ₯Ό κ°μ§ μ μλ μ±μ§(λ₯λ ₯)
2) μμ (μ¬λ - νμ₯μ€)
// λ¨μ extends μ¬λ - μ€λ²λΌμ΄λ© νμ₯μ€(){ λ¨μνμ₯μ€ κ°λΌ...}
// μ¬μ extends μ¬λ - μ€λ²λΌμ΄λ© νμ₯μ€(){ μ¬μνμ₯μ€ κ°λΌ...}
// μ¬λ 1 = new λ¨μ();
// μ¬λ 2 = new μ¬μ();
// μ¬λ.νμ₯μ€();
2. ν΄λμ€ κ° νλ³ν (μ μΊμ€ν & λ€μ΄μΊμ€ν )
1) μ μΊμ€ν (μλνλ³ν)
- λΆλͺ¨νμ (μ°Έμ‘°) μμκ°μ²΄ μμ± (μμκ°μ²΄ μμ±ν΄μ λΆλͺ¨νμ μ μ°Έμ‘°ν μ μλ μ±μ§)
E emp = new R();
- emp.dispEmpInfo() -> R μ¬μ μλ disEmpInfo() νΈμΆλλ€. (μκΈ°!)
- ν΄λμ€κ° μμκ΄κ³κ° μμ΄μΌ ν΄λμ€κ° νλ³νμ΄ κ°λ₯νλ€
SalesMan emp3 = new SalesMan("μ‘°λ―Όκ²½", "μμΈ κ°λ¨κ΅¬", "010-8482-2343", "2020-12-12", 500000, 20, 1500000 );
- E -> R -> S μμ±μ νΈμΆλλ μμ
- μΆμλ©μλ μμΌλ©΄ getPay() νΈμΆν μ μμ (λΆλͺ¨ ν΄λμ€μ ν¨μ μ μΈλμ΄μμ§ μκΈ° λλ¬Έμ)
- μ¬μ© μ΄μ :
https://madplay.github.io/post/java-upcasting-and-downcasting
*days17 ν΄λμ€λ€ νμΈνκΈ°
2) λ€μ΄μΊμ€ν (κ°μ νλ³ν : cast μ°μ°μ)
- μ μΌμ€ν ν κ²μ λ€μ΄μΊμ€ν νλ κ²μ κ°λ₯νμ§λ§, μλ Parent κ°μ²΄μΈ pλ₯Ό λ€μ΄μΊμ€ν νλ κ²μ λΆκ°λ₯ν¨
- μ μΊμ€ν ν νμ λ€μ΄μΊμ€ν ν΄μΌ λλ€.
Parent p = new Child(); // μ
μΊμ€ν
Child c = (Child)p; // λ€μ΄μΊμ€ν
- μ¬μ© μ΄μ :
λ€νμ± κ³Ό μ½λ μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄
-> μ μΊμ€ν μ νκ² λλ©΄ κΈ°λ³Έ ν΄λμ€μ μ μλ λ©€λ²λ§ νΈμΆν μ μκΈ° λλ¬Έμ νμν΄λμ€ κ³ μ μ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
3. ν΄λμ€(κ°μ²΄) λ°°μ΄
Employee [] emps = {
new Regular("μ΄μ¬λ―Ό", "μμΈ μμ²κ΅¬ λͺ©λ", "010-2342-4323", "2019-02-15", 2500000),
new SalesMan("μ‘°λ―Όκ²½", "μμΈ κ°λ¨κ΅¬", "010-8482-2343", "2020-12-12", 500000, 20, 1500000 ),
new Temp("κΉκ°μ¨","κ²½κΈ°λ λ¨μμ£Ό", "010-2311-4594","2020-01-01", 20, 70000)
};
for (Employee emp : emps) {
// emp.dispEmpInfo();
// μΆμν( μΆμλ©μλ, μΆμν΄λμ€ )
System.out.println( emp.getPay() ); // X λ¬Έμ λ°μ.
System.out.println("-----------------------------");
}
4. abstract
- μΆμν : ν΄λμ€ κ°μ 곡ν΅μ μ μ°Ύμλ΄μ 곡ν΅μ μ‘°μμ λ§λ μμ
- ꡬ체ν : μμμ ν΅ν΄ ν΄λμ€λ₯Ό ꡬν, νμ₯νλ μμ
- abstract ν΄λμ€ :λͺΈμ²΄κ° ꡬνμ΄ μλ getPay() μΆμ λ©μλ κ°μ§ ν΄λμ€ / κ°μ²΄λ₯Ό μμ±ν μ μλ λΆμμ ν ν΄λμ€
abstract class Player{
boolean pause; // μΌμ μ μ§ λ³μ
int currentPos; // νμ¬ play λκ³ μλ μμΉ λ³μ
Player(){
this.pause = false;
this.currentPos = 0;
}
// μΆμ λ©μλ μ μΈ
abstract void play(int pos); // play μ¬μνλ λ©μλ
abstract void stop(); // play λ©μΆλ λ©μλ
} // class
// 1κ°λΌλ μΆμλ©μλκ° μ‘΄μ¬νλ©΄ κ·Έ ν΄λμ€λ μΆμν΄λμ€κ° λλ€.
abstract class AudioPlayer extends Player{
// Player νλ pause, currentPos
// Player μΆμ λ©μλ μμ -> μ€λ²λΌμ΄λ©
@Override
void play(int pos) {
System.out.println("> Player ν΄λμ€μ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λ©ν¨.");
}
}
class CDPlayer extends AudioPlayer{
// Player νλ pause, currentPos
// AudioPlayer ꡬνλ λ©μλ play()
@Override
void stop() {
System.out.println("> Player ν΄λμ€μ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λ©ν¨");
}
}
// --------------------------------------------------------------
Player cp = new CDPlayer();
cp.play(10);
cp.stop();
5. final
μ μ : ν λ² μ΄κΈ°νλλ©΄ λ€μ ν λΉν μ μλ μμ
- final μ§μλ³μ : μμν
- final λ©μλ : λ¬Όλ €λ°λ μμν΄λμ€μμ μ¬μ μν μ κ° μλ€.
- final ν΄λμ€ : ν΄λμ€ λͺ μΌλ‘ λ©λͺ¨λ¦¬μ κ°μ²΄ μμ±μμ΄ λ°λ‘ μ¬μ©ν μ μκ³ μμλ‘ μ¬μ©κ°λ₯
class FinalTest{
public static final double PI ; // λͺ
μμ μ΄κΈ°ν
static {
PI = 3.141592; // μ΄κΈ°ν λΈλ
}
FinalTest( double pi ) { // μμ±μ 1λ² μ΄κΈ°ν κ°λ₯νλ€.
PI = 3.14 ;
}
}
- final 맀κ°λ³μ
6. OOP(κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°)μ νΉμ§
1) μμμ±
- κΈ°ν΄ -> μ¬ ->μν΄
2) λ€νμ±
- μ ?
- μ - λ€μ΄ μΊμ€ν /μ/μ€/μ€
3) μΆμν (abstract)
- a λ©,ν΄ : λ―Έμμ±λ(λΆμμ ν) λ©μλ, ν΄λμ€
- μΆλ© : μ€λ²λΌμ΄λ©
- μΆν΄ : κ°μ²΄ X
4) μΊ‘μν
5) μλν
- μ κ·Όμ§μ μλ₯Ό μ΄μ©ν΄μ ν΄λμ€μ λ©€λ²λ€μ κ°μΆκΈ°( hiding) : μλν / μΊ‘μν
- μ΄μ ? μΈλΆ λ°μ΄ν° 보νΈ, μΈλΆ λΆνμν , λ΄λΆ λ©€λ² κ°μΆκΈ°
7. instance of
- instanceofμ°μ°μ -> μ μΊμ€ν νμΈν λ μ¬μ©
- emp instanceof SalesMan -> μ μΊμ€ν λκ²μ΄ SalesManμ μΈμ€ν΄μ€μΈμ§ νμΈ (ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€ empμΈμ§ 묻λ κ²)
-> λ§μΌλ©΄ true λ°ν
8. Package
1) ν¨ν€μ§( package)
- ν΄λμ€μ λ¬Άμ
- μλ‘ κ΄λ ¨λ ν΄λμ€,μΈν°νμ΄μ€λ€ λΌλ¦¬ κ·Έλ£Ή λ¨μλ‘ λ¬Άμ΄λμ κ².
- ν΄λμ€λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬( μ¬μ© )
- 물리μ μΌλ‘ ν΄λ
γ΄ Car.java - Car ν΄λμ€
μ) days01.Ex01.java( Ex01 ν΄λμ€)
days02.Ex01.java( Ex01 ν΄λμ€)
ν΄λμ€λͺ μ΄ κ°μλ ν¨ν€μ§κ° λ€λ₯΄λ©΄ λ€λ₯Έ ν΄λμ€λ‘ μ²λ¦¬.
- days01,days02,.. days18 ν¨ν€μ§ - μΌμ μμ ν ν΄λμ€λ₯Ό λ¬Άμ΄λλ μ©λ.
- java.util ν¨ν€μ§ - μμ£Ό μ μ©νκ² μ¬μ©λλ ν΄λμ€ Random
java.io ν¨ν€μ§ -InputOutput μ μΆλ ₯ ν΄λμ€
java.sql ν¨ν€μ§ - DB μ°λ ν΄λμ€
java.net ν¨ν€μ§ - λ€νΈμν¬ ν΄λμ€
- ν¨ν€μ§λͺ : μλ¬Έμ μ¬μ© κΆμ₯
- . μ ꡬλΆμλ‘ κ³μΈ΅ ꡬ쑰 κ΅¬μ± days18.util.com
- νλ€μ(full name)μ μ μΌμΈμ ? days18.util.com.Ex01
2) import λ¬Έ
- λ€λ₯Έ ν¨ν€μ§ μμ ν΄λμ€λ₯Ό μ¬μ©νλ €λ©΄ ν¨ν€μ§λͺ .ν¨ν€μ§λͺ .ν΄λμ€λͺ μΌλ‘ μ¬μ©ν΄μΌλλ€.
- μ¬μ©ν λ λ§λ€ λ§€λ² ν¨ν€μ§λͺ .ν¨ν€μ§λͺ .ν΄λμ€λͺ λΆνΈ -> importλ¬Έ μ¬μ©ν΄μ
- static import :import static java.lang.Math.abs; // import νμ μμ΄ μ¬μ© κ°λ₯
3) package λͺ
- import λ¬Έ
class ν΄λμ€λͺ {
}
4) java.*; // java ν¨ν€μ§ μμ λͺ¨λ ν΄λμ€ import (util ν΄λλ§ ν¬ν¨λκ³ λ΄μ©μ ν¬ν¨ μλ¨!)
java.util.*; // util μ λͺ¨λ ν΄λμ€ import
9. μ±κΈν€
- μ μ : ν΄λΉ ν΄λμ€μ λν΄μ κ°μ²΄λ₯Ό νλλ§ λ§λ€μ΄μ μ°κ² λ€λ μλ
- μ μΈ
public class Singleton {
// ν΄λμ€ λ³μ μ μΈ
// μκΈ° μμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν λ³μ μ μΈ
private static Singleton singleton = null; // μΈμ€ν΄μ€(κ°μ²΄) μμ± X
// λν΄νΈ μμ±μ
private Singleton() {
}
// ν΄λμ€ λ©μλ
public static Singleton getInstance() {
if( singleton == null ) singleton = new Singleton();
return singleton;
}
}
- κ΄λ¦¬ λͺ©μ μΌλ‘ νλ ν΄λμ€μ κ°μ²΄ -> μ¬λ¬κ° μμ±νμ X
Singleton s = Singleton.getInstance();
System.out.println( s ); // days18.Singleton@15db9742
s = Singleton.getInstance();
System.out.println( s ); // days18.Singleton@15db9742
s = Singleton.getInstance();
System.out.println( s ); // days18.Singleton@15db9742
s = Singleton.getInstance();
System.out.println( s ); // days18.Singleton@15db9742
μ΅κ·ΌλκΈ