관리 메뉴

gi_dor

Java (6) 객체지ν–₯ - μ ‘κ·Όμ œμ–΄μž , λ‚΄λΆ€ν΄λž˜μŠ€ λ³Έλ¬Έ

Language/Java

Java (6) 객체지ν–₯ - μ ‘κ·Όμ œμ–΄μž , λ‚΄λΆ€ν΄λž˜μŠ€

기돌 2023. 11. 13. 16:28

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

μ ‘κ·Όμ œμ–΄μž κΉŒμ§€ μž¬λ°‹κ²Œν–ˆλŠ”λ° λ‚΄λΆ€ 클래슀 λ‚˜μ˜€λ©΄μ„œ 정신쀄 놔버렸닀...


πŸ”Έ μ ‘κ·Ό μ œμ–΄μž

πŸ“Œ μ ‘κ·Όμ œμ–΄μžκ°€ μ‚¬μš©λ μˆ˜ μžˆλŠ” κ³³  - 클래슀 , λ©€λ²„λ³€μˆ˜ , λ©”μ„œλ“œ , μƒμ„±μž

  • private  
  • default
  • protected
  • public
μ œμ–΄μž 같은 클래슀 같은 νŒ¨ν‚€μ§€ μžμ† 클래슀 전체
public βœ” βœ” βœ” βœ”
default βœ” βœ” βœ”  
protected βœ” βœ”    
private βœ”      

 

package modifier.p3;

public class Sample3 {

	// private μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Όκ°€λŠ₯
	private int value1;
	
	// default μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 νŒ¨ν‚€μ§€ λ‚΄μ˜ , λ‹€λ₯Έ ν΄λž˜μŠ€μ—λ„ 접근이 κ°€λŠ₯ν•˜λ‹€
	int value2;
	
	// protected μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 νŒ¨ν‚€μ§€ , λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 접근이 κ°€λŠ₯ν•˜λ‹€
	// 이 클래슀λ₯Ό 상속받은 μžμ† ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—¬λ„ 접근이가λŠ₯ν•˜λ‹€
	protected int value3;
	
	// public μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// μ „μ²΄κ³΅κ°œ
	public int value4;
}

- default μ ‘κ·Όμ œμ–΄ : 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ μ ‘근이 κ°€λŠ₯ν•˜λ‹€

package modifier.p1;
class Sample1 {

}

- public μ ‘κ·Όμ œμ–΄ : 같은 νŒ¨ν‚€μ§€ + λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλ„ μ ‘κ·Όκ°€λŠ₯해진닀   ,  전체 κ³΅κ°œλœλ‹€.

package modifier.p1;

public class Sample2 {

}
package modifier.p1;

public class App1 {
	public static void main(String[] args) {
  		Sample1 sample1 = new Sample1();
		Sample2 sample2 = new Sample2();
	}

}

πŸ“Œ  App1은 Sample1 , Sample2와 κ°™μ€ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λ‹€
   - App1은 Sample1 , Sample2λ₯Ό import ꡬ문없이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€
  - App1은 default μ ‘κ·Όμ œν•œμ΄ 적용된 Sample1 ,    public  μ ‘κ·Όμ œν•œμ΄ 적용된 Sample2 μ „λΆ€ 접근이 κ°€λŠ₯ν•˜λ‹€

 

λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ μ ‘κ·Ό

package modifier.p2;

//import modifier.p1.Sample1; 컴파일 였λ₯˜
import modifier.p1.Sample2;

public class App2 {

	public static void main(String[] args) {

//		Sample1 sample1 = new Sample1();
		Sample2 sample2 = new Sample2();
	}
}


 - Sample1 , Sample2  λ‘˜λ‹€ App2와 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€λ‹€
 - λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ import κ΅¬λ¬Έμž‘μ„± ν›„ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€


β–Ά  default μ ‘κ·Όμ œν•œμ΄ 적용된 Sample1은 같은 νŒ¨ν‚€μ§€μ—λ§Œ 접근이 κ°€λŠ₯ν•˜κΈ°μ—  λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Όν• μˆ˜ μ—†λ‹€.
β–Ά public μ ‘κ·Όμ œν•œμ΄ 적용된 Sample2λŠ” λ‹€λ₯ΈνŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€.
     importꡬ문으둜 포함 μ‹œν‚¨ν›„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

 


package modifier.p3;

public class Sample3 {

	// private μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Όκ°€λŠ₯
	private int value1;
	
	// default μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 νŒ¨ν‚€μ§€ λ‚΄μ˜ , λ‹€λ₯Έ ν΄λž˜μŠ€μ—λ„ 접근이 κ°€λŠ₯ν•˜λ‹€
	int value2;
	
	// protected μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// 같은 νŒ¨ν‚€μ§€ , λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 접근이 κ°€λŠ₯ν•˜λ‹€
	// 이 클래슀λ₯Ό 상속받은 μžμ† ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—¬λ„ 접근이가λŠ₯ν•˜λ‹€
	protected int value3;
	
	// public μ ‘κ·Όμ œν•œ λ©€λ²„λ³€μˆ˜
	// μ „μ²΄κ³΅κ°œ
	public int value4;
}
package modifier.p3;

public class Sample4 {

	Sample3 sample3 = new Sample3();

	public void method() {
		// private μ ‘κ·Όμ œν•œλœ value1은 μ ‘κ·Ό λΆˆκ°€
		// 같은 ν΄λž˜μŠ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯
//		sample3.value1 = 10;
		
		// default μ œν•œ value2 μ ‘κ·Όκ°€λŠ₯
		sample3.value2 = 20;
		
		// protected μ œν•œμ΄ κ±Έλ¦° value3 μ ‘κ·Όκ°€λŠ₯
		sample3.value3 = 30;
		
		// public μ œν•œμ΄ κ±Έλ¦° value4 μ ‘κ·Όκ°€λŠ₯
		sample3.value4 = 40;
		
	}
}
package modifier.p4;

import modifier.p3.Sample3;
public class Sample5 {

	Sample3 sample3 = new Sample3();
	public void method() {
		
// The field Sample3.value1 is not visible

//		sample3.value1 = 10;
//		sample3.value2 = 10;
//		sample3.value3 = 10;

// value 1 , 2 , 3λŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†ν•˜λ©° 
// λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— 접근이 κ°€λŠ₯ν•œ μ œμ–΄λŠ” public만 κ°€λŠ₯ν•˜λ‹€
		
		sample3.value4 = 10;
	}
}

μžμ†ν΄λž˜μŠ€ μ ‘κ·Ό

package modifier.p4;

import modifier.p3.Sample3;

public class Sample3Child extends Sample3{

	Sample3 sample3 = new Sample3();
	
	// 상속을 톡해 직접 λΆ€λͺ¨ 클래슀의 λ³€μˆ˜μ— 접근함
	public void method() {
		// private μ ‘κ·Όμ œν•œ 적용
//		value1 = 10;
		
		// default μ ‘κ·Όμ œν•œ 적용
//		value2 = 20;
		
		// protected μ ‘κ·Όμ œν•œ 적용
		value3 = 30;
		
		// public μ ‘κ·Όμ œν•œ
		value4 = 40;
	}
}

πŸ”Έ μ ‘κ·Όμ œμ–΄μžμ˜ μΌλ°˜μ μΈμ‚¬μš©

  • ν΄λž˜μŠ€μ—λŠ” public μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•œλ‹€
  • 클래슀의 λ©€λ²„λ³€μˆ˜λŠ” private μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•΄ μ€λ‹‰ν•œλ‹€
  • 클래슀의 μƒμˆ˜λŠ” public 을 μ‚¬μš©ν•œλ‹€
  • 클래슀의 μƒμ„±μžμ™€ λ©”μ„œλ“œλŠ” public 을 μ‚¬μš©ν•΄ κ³΅κ°œν•œλ‹€
  • 클래슀의 μƒμ„±μžμ™€ λ©”μ„œλ“œμ— private을 μ‚¬μš©ν•΄ μ€λ‹‰ν• μˆ˜λ„ μžˆλ‹€
    - μƒμ„±μž‘μ˜ 은닉은 new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ μž„μ˜λ‘œ 객체생성을 ν• μˆ˜ μ—†λ‹€
    - λ©”μ„œλ“œμ˜ μ€λ‹‰ν™”λŠ” 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λ˜κ³  외뢀에 κ³΅κ°œν•  ν•„μš”κ°€ μ—†λŠ” λ©”μ„œλ“œμΈ κ²½μš°μ— μ‚¬μš©

πŸ”Έ κ·Έλž˜μ„œ μ™œλ§Œλ“€μ—ˆλŠ”λ° ?  μΊ‘μŠν™”μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • μ‚¬μš©μžμ—κ²Œ κ³΅κ°œν•  ν•„μš”κ°€ μ—†λŠ” 속성과 κΈ°λŠ₯을 μ€λ‹‰μ‹œν‚€κ³  , μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‚¬μš©ν•  속성과 κΈ°λŠ₯만 κ³΅κ°œν•œλ‹€
  • μΊ‘μŠν™”λ₯Ό 톡해 μ‚¬μš©μžλŠ” 클래슀 λ‚΄λΆ€μ˜ λ³΅μž‘ν•œ κ΅¬ν˜„μ„ λͺ°λΌλ„ 곡개된 κΈ°λŠ₯을 μ‚¬μš©ν•΄ 
     ν΄λž˜μŠ€μ˜ κΈ°λŠ₯을 μ˜¨μ „ν•˜κ²Œ μ‚¬μš©ν• μˆ˜ μžˆλ‹€
  • μž₯점
     - 객체의 데이터 보호
     - μ‚¬μš©μžμ˜ νŽΈμ˜μ„±μ΄ 높아진닀 ➑ λ³΅μž‘ν•œ κ΅¬ν˜„ λͺ°λΌλ„ λ³΄μ—¬μ§€λŠ” κΈ°λŠ₯만 λ”±λ”± λˆ„λ₯΄λ©΄λ¨
     - μœ μ§€ λ³΄μˆ˜μ„±μ΄ 쒋아진닀 

πŸ”Έ λ‚΄λΆ€ 클래슀

1️⃣ μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀

  • μ™ΈλΆ€μ˜ λ©€λ²„λ³€μˆ˜μ™€ λ©€λ²„λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆλ‹€
  • 주둜 μ™ΈλΆ€ 클래슀의 λ©€λ²„λ³€μˆ˜μ™€ λ°€μ ‘ν•˜κ²Œ κ²°ν•œλœ μž‘μ–΄λΈ” 수ν–₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ‚΄λΆ€ ν΄λž˜μŠ€λ‹€

2️⃣ 정적 λ‚΄λΆ€ 클래슀

  • μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ 객체와 λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜λŠ” λ‚΄λΆ€ 클래슀
  • μ™ΈλΆ€ 클래슀의 μ •μ λ³€μˆ˜μ™€ μ •μ λ©”μ„œλ“œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€
  • 주둜 μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λŠμŠ¨ν•˜κ²Œ κ²°ν•©λœ μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μž‘μ„± ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ‚΄λΆ€ ν΄λž˜μŠ€λ‹€

3️⃣ 둜컬 λ‚΄λΆ€ 클래슀

  • λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ •μ˜λ˜κ³  μ‚¬μš©λ˜λŠ” λ‚΄λΆ€ν΄λž˜μŠ€
  • λ©”μ„œλ“œμ˜ μ§€κ²©λ³€μˆ˜μ™€ νŒŒλΌλ―Έν„°μ— μ ‘κ·Όν•  수 μžˆλ‹€
  • 주둜 λ©”μ„œλ“œ λ‚΄μ—μ„œ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μž„μ‹œλ‘œ μ‚¬μš©λ˜λŠ” λ‚΄λΆ€ 클래슀

5️⃣ 읡λͺ… λ‚΄λΆ€ 클래슀

  • 이름이 μ—†λŠ” λ‚΄λΆ€ 클래슀 
  • μΈν„°νŽ˜μ΄μŠ€λ‚˜ μΆ”μƒν΄λž˜μŠ€μ˜ κ΅¬ν˜„κ°μ²΄λ₯Ό 생성할 λ•Œ μ‚¬μš©λ˜λŠ” λ‚΄λΆ€ 클래슀
  • 클래슀λ₯Ό μ •μ˜ν•˜λ©΄μ„œ λ™μ‹œμ— 객체λ₯Ό μƒμ„±ν•œλ‹€
  • μ½œλ°±ν•¨μˆ˜ μ΄λ²€νŠΈμ²˜λ¦¬μ— μ‚¬μš©λ˜λŠ” 일회용 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©
728x90