관리 메뉴

gi_dor

Java (6) 객체지ν–₯ - μ˜€λ²„λΌμ΄λ”© , λ‹€ν˜•μ„± , 좔상화 , μΈν„°νŽ˜μ΄μŠ€ λ³Έλ¬Έ

Language/Java

Java (6) 객체지ν–₯ - μ˜€λ²„λΌμ΄λ”© , λ‹€ν˜•μ„± , 좔상화 , μΈν„°νŽ˜μ΄μŠ€

기돌 2023. 11. 9. 18:22
728x90

 


πŸ“š κ΅­λΉ„ 19 일차

 

였늘 λ­”κ°€ 집쀑도 μ•ˆλ˜κ³  이해가 μž˜μ•ˆλ˜λŠ” ν•˜λ£¨λ‹€ 주말에 큰일났닀 

κ°•μ‚¬λ‹˜μ΄ μ„€λͺ…ν•΄μ£Όμ‹œλŠ”κ²Œ μŠ₯μ§€λ‚˜κ°€ 버린닀 λ‚˜λŠ” λŒλ©©μ΄λ‹€


 

πŸ”Έ μ˜€λ²„λΌμ΄λ”© 

 

πŸ”Ή μ˜€λ²„λ‘œλ”©  vs  μ˜€λ²„λΌμ΄λ”©

 

μ˜€λ²„λ‘œλ”© - λ©”μ„œλ“œ μ€‘λ³΅μ •μ˜ 

  • μ •μ˜ : ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— λ§€κ°œλ³€μˆ˜κ°€ μ„œλ‘œ λ‹€λ₯Έ , 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ •μ˜
  • 쑰건 : λ§€κ°œλ³€μˆ˜μ˜ ꡬ성이 λ‹€λ₯΄λ©΄ 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ •μ˜ ν• μˆ˜ μžˆλ‹€
  • λͺ©μ  : μœ μ‚¬ν•œ μž‘μ—…μ€ μΌκ΄€λœ μ΄λ¦„μœΌλ‘œ κ΅¬ν˜„ν•΄ μ‚¬μš©ν•˜μž

μ˜€λ²„λΌμ΄λ”© - λ©”μ„œλ“œ μž¬μ •μ˜

  • μ •μ˜ : 상속관계에 μžˆλŠ”λ° λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ μžμ‹ μ— 맞게 μž¬μ •μ˜ ν•˜λŠ”κ²ƒ
  • 쑰건 : λ©”μ„œλ“œμ˜ 이름 , λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž… , λ°˜ν™˜νƒ€μž…μ΄ λΆ€λͺ¨ν΄λž˜μŠ€μ— λ©”μ„œλ“œμ™€ 같아야함, κ΅¬ν˜„λ‚΄μš©λ§Œ λ‹€λ₯΄κ²Œ 
               λΆ€λͺ¨μ˜ μ ‘κ·Όμ œν•œκ³Ό λ™μΌν•˜κ±°λ‚˜ 더 λŠμŠ¨ν•œ μ ‘κ·Όμ œν•œλ§Œ κ°€λŠ₯ν•˜λ‹€.(더 μ’μ€λ²”μœ„ λΆˆκ°€)
  • λͺ©μ  : λΆ€λͺ¨μ˜ λ©”μ„œλ“œλ₯Ό  μžμ‹μ— 맞게 μž¬μ •μ˜ν•˜λŠ”κ²ƒ
               μž¬μ •μ˜λœ λ©”μ„œλ“œλŠ” λΆ€λͺ¨νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.
class Printer{
	String black; 
	
	public void print() {
		System.out.println("흑백 인쇄 ν•©λ‹ˆλ‹€");
	}
}

class ColorPrinter{
    public void print() {
            System.out.println("컬러 μΈμ‡„ν•©λ‹ˆλ‹€");
        }
}
class PrinterApp{
	main{
    		Printer p1 = new Printer();
		p1.print();	// Printer의 print() κ°€ μ‹€ν–‰λœλ‹€.
		
		ColorPrinter p2 = new ColorPrinter();
		p2.print();	// ColorPrinter의 μž¬μ •μ˜λœ print() κ°€ μ‹€ν–‰λœλ‹€.
		
		Printer p3 = new ColorPrinter();
		p3.print(); // ColorPrinter의 μž¬μ •μ˜λœ print() κ°€ μ‹€ν–‰λœλ‹€.
                // Printer 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ–΄λ„ μ‹€μ œ μƒμ„±ν•œ
                // ColorPrinter 객체의 μž¬μ •μ˜λœ print()κ°€ μ‹€ν–‰λœλ‹€.
                // Printer νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ‹ Printer 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λ•Œ 
                // print() λ₯Ό μ‹€ν–‰ν•˜λ©΄ μ‹€μ œ μƒμ„±λœ 객체에 μž¬μ •μ˜λœ print() κ°€ μ‹€ν–‰λœλ‹€.
    	}
    }

πŸ”Έ λ‹€ν˜•μ„±

 

 

 

πŸ”Έ  좔상화

  • μ •μ˜ : μΆ”μƒλ©”μ„œλ“œ ( κ΅¬ν˜„λΆ€κ°€ μ—†λŠ” ) λ₯Ό μ •μ˜
  • 쑰건 : μΆ”μƒν΄λž˜μŠ€λ‚˜ , μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•΄ μΆ”μƒλ©”μ„œλ“œλ₯Ό λ³΄μœ ν•  수 μžˆλ‹€.
              κ΅¬ν˜„ν΄λž˜μŠ€λŠ” 보유 λΆˆκ°€  β—€ μΆ”μƒνšŒλœ λ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ μž¬μ •μ˜
  • λͺ©μ  :  같은 λΆ€λͺ¨ 클래슀λ₯Ό ( μΆ”μƒν΄λž˜μŠ€ or μΈν„°νŽ˜μ΄μŠ€ )λ₯Ό 상속받은 κ΅¬ν˜„ ν΄λž˜μŠ€λŠ” μ‚¬μš©λ²•μ΄ λ™μΌν•˜λ‹€
  •  
  • κ°μ²΄μ—μ„œ κ³΅ν†΅λœ 속성과 κΈ°λŠ₯을 μΆ”μΆœν•˜λŠ” 것
  • μ‚¬μš©λ²•μ΄ λ™μΌν•œ νžˆμœ„ν΄λž˜μŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œ λ§Œλ“ λ‹€
  • 곡톡속성은 λ³€μˆ˜λ‚˜ μƒμˆ˜λ‘œ , κΈ°λŠ₯은 μΆ”μƒλ©”μ„œλ“œλ‘œ ν‘œν˜„

 

πŸ”Ή 좔상 λ©”μ„œλ“œ

  • μ •μ˜ :  κ΅¬ν˜„λΆ€κ°€ μ—†λŠ” λ©”μ„œλ“œ
  • 쑰건 :  λ©”μ„œλ“œμ˜ 선언뢀에 abstract ν‚€μ›Œλ“œκ°€ μΆ”κ°€λœλ‹€
  • λͺ©μ  : μžμ‹ ν΄λž˜μŠ€μ— μΆ”μƒλ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜κ²Œ ν•œλ‹€.
  • μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ—λ§Œ μ •μ˜
  • 일반 ν΄λž˜μŠ€λŠ” μΆ”μƒλ©”μ„œλ“œλ₯Ό λ³΄μœ ν•  수 μ—†λ‹€
abstract void sample();

πŸ”Ή 좔상 클래슀

  • μ •μ˜ : μΆ”μƒλ©”μ„œλ“œλ₯Ό λ³΄μœ ν• μˆ˜ μžˆλŠ” 클래슀
  • 쑰건 : 클래슀의 선언뢀에 abstract ν‚€μ›Œλ“œκ°€ μΆ”κ°€λœλ‹€
  • λͺ©μ  : μΆ”μƒλ©”μ„œλ₯Ό 보유 ν•˜λŠ”κ²ƒ 
               μΆ”μƒν΄λž˜μŠ€λ₯Ό 상속받은 ν•˜μœ„ν΄λž˜μŠ€κ°€ μΆ”μƒλ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•˜λ„λ‘ ν•œλ‹€
  • new ν‚€μ›Œλ“œλ₯Ό 톡해 객체λ₯Ό μƒμ„±ν• μˆ˜ μ—†λ‹€
  • λ©€λ²„λ³€μˆ˜ , λ©€λ²„λ©”μ„œλ“œ , μ •μ λ³€μˆ˜(static) , μ •μ λ©”μ„œλ“œ (static) , μƒμ„±μž , μΆ”μƒλ©”μ„œλ“œ λͺ¨λ‘ λ³΄μœ ν• μˆ˜ μžˆλ‹€
public abstract class Chart{  
	abstract void draw();
    }
// μΆ”μƒν΄λž˜μŠ€ κ΅¬ν˜„
public class LineChart extends Chart{

	// λΆ€λͺ¨μ— λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜
	@Override   //  ctrl + spacebar
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("꺽은선 κ·Έλž˜ν”„λ₯Ό κ·Έλ¦°λ‹€");
	}
}

πŸ”Έ 클래슀 κ°„μ˜ 관계

 

1️⃣ A has a B : 포함관계   

2️⃣ A is a B : 상속관계

 


πŸ”Έ μΈν„°νŽ˜μ΄μŠ€ interface

  • ν‘œμ€€ κ·œμ•½ μŠ€νŽ™μ˜ 역할을 μˆ˜ν–‰ν•œλ‹€ β–Ά νŠΉμ •κΈ°μˆ  , 라이브러리 ,ν”„λ ˆμž„μ›Œν¬μ™€ κ΄€λ ¨λœ λ™μž‘κ³Ό κ·œμΉ™μ„ μ„€λͺ…ν•˜λŠ” λ¬Έμ„œ
  • μƒμˆ˜μ™€ μΆ”μƒλ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•œλ‹€ Java8 λΆ€ν„° static Method (정적 λ©”μ„œλ“œ),  default Method도 κ°€λŠ₯
  • κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•   κΈ°λŠ₯의 λͺ…μ„Έλ₯Ό μ •μ˜ν•œλ‹€ β–Ά μΆ”μƒλ©”μ„œλ“œμ˜ μ„€λͺ…을 λœ»ν•œλ‹€κ³  ν•œλ‹€
  • μΈν„°νŽ˜μ΄μŠ€λŠ” new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 객체λ₯Ό 생성할 수 μ—†λ‹€. 
  • μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€λ₯ΈμΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받을 수 μžˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€ λΌλ¦¬λŠ” 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€
  • μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ 객체λ₯Ό μ°Έμ‘°ν• μˆ˜ μžˆλ‹€.

πŸ”Ή μΈν„°νŽ˜μ΄μŠ€ ꡬ쑰

public interface sampleInterface {
	// μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μΆ”μƒλ©”μ„œλ“œμ— abstract ν‚€μ›Œλ“œ μƒλž΅κ°€λŠ₯
    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(λ§€κ°œλ³€μˆ˜,λ§€κ°œλ³€μˆ˜);
    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(λ§€κ°œλ³€μˆ˜,λ§€κ°œλ³€μˆ˜);
    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(λ§€κ°œλ³€μˆ˜,λ§€κ°œλ³€μˆ˜);
    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(λ§€κ°œλ³€μˆ˜,λ§€κ°œλ³€μˆ˜);
    }

πŸ”Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀

  • κ΅¬ν˜„ν•  ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€
  • κ΅¬ν˜„ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  μΆ”μƒλ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•΄μ•Όν•œλ‹€
  • 같은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ κ΅¬ν˜„ ν΄λž˜μŠ€λ“€μ€ μ‚¬μš©λ²•μ΄ λ™μΌν•œ κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ λœλ‹€.
public class κ΅¬ν˜„ν• ν΄λž˜μŠ€λͺ… implements μΈν„°νŽ˜μ΄μŠ€λͺ… {

}

public class κ΅¬ν˜„ν• ν΄λž˜μŠ€λͺ… implements μΈν„°νŽ˜μ΄μŠ€λͺ… , μΈν„°νŽ˜μ΄μŠ€λͺ… ,μΈν„°νŽ˜μ΄μŠ€λͺ… {

}

 

728x90