[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

 

 

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