πŸ““ STUDY/JAVA

μΊ‘μŠν™”

JuneBee 2022. 5. 17. 23:25
728x90
λ°˜μ‘ν˜•

Encapsulation ( μΊ‘μŠν™” )

<1>μ œν•œμž

  1. μ œν•œμž (modifier) 클래슀, λ³€μˆ˜, λ©”μ„œλ“œ 선언뢀와 함꼐 μ‚¬μš©λ˜μ–΄ 뢀가적인 의미λ₯Ό λΆ€μ—¬
    • μ ‘κ·Ό μ œν•œμž : private, default(package), protected, public
    • static : 클래슀 레벨의 μš”μ†Œ μ„€μ •
    • final : μš”μ†Œλ₯Ό 더이상 μˆ˜μ •ν•  수 μ—†κ²Œ 함
    • abstract: 좔상 λ©”μ„œλ“œ 및 좔상 클래슀 μž‘μ„±
    • synchronized: λ©€ν‹° μŠ€λ ˆλ“œμ—μ„œμ˜ 동기화 처리
  2. μ ‘κ·Ό μ œν•œμž

public class Parent{
	public int publicVar;protected int protectedVar;int defaultVar;private int privVar;
	public void useMember(){
	this.publicVar=10; this.protectedVa= 10;this.defaultVar=10;this.privVar 10;}
}
public class Child extends Parent{
public void useMember(){
this.publicVar = 10; 
this.protectVar =10; 
this.defaultVar=10; //κ°€λŠ₯
this.privVar =10 ;
this.some = 10; //λΆˆκ°€λŠ₯
}
}
public class Friend {

public void method(){
p.publicVar=1;
p.protectVar=1; 
p.defaultVar =1; //κ°€λŠ₯
p.privVar=1; //not visible
}
}

🧸 ν•˜λ‚˜μ˜ λŒ€μƒμ— μ—¬λŸ¬ μ œν•œμžλ₯Ό μ‘°ν•© κ°€λŠ₯ν•˜λ‚˜, μ ‘κ·Ό μ œν•œμžλŠ” ν•˜λ‚˜λ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€ → Eclipse λ₯Ό 열어보면, class 생성 μ‹œ modifiersλž€μ„ 보면 μ ‘κ·Όμ œν•œμžλŠ” radio button으둜 ν•˜λ‚˜λ§Œ μ„€μ •ν•  수 μžˆμ§€λ§Œ, abstractλ‚˜ final 은 쀑볡 선택 κ°€λŠ₯ν•œ 것을 확인해볼 수 μžˆλ‹€.

🧸 μˆœμ„œλŠ” λ¬΄κ΄€ν•˜λ‚˜ 일반적으둜 μ ‘κ·Ό μ œν•œμžλ₯Ό 맨 μ•žμœΌλ‘œ μ‚¬μš©ν•œλ‹€

🧸 final μš©λ„ :

  • final class: 더이상 ν™•μž₯ ν•  수 μ—†μŒ - 상속 κΈˆμ§€ → μ˜€λ²„λΌμ΄λ“œλ₯Ό λ°©μ§€ (이미 μ™„λ²½^^)
  • final method: 더이상 μž¬μ •μ˜ λΆˆκ°€ → μ˜€λ²„λΌμ΄λ”© κΈˆμ§€
  • final variable: 더이상 값을 λ°”κΏ€ 수 μ—†μŒ → μƒμˆ˜ν™”

<2>μΊ‘μŠν™”

🀦🏻‍♀️ Eclipse > Source λ“€μ–΄κ°€λ©΄ constructors, getters and setters λ₯Ό μžλ™μœΌλ‘œ 생성해쀀닀 !

데이터 은닉과 보호

μ™ΈλΆ€μ—μ„œ λ³€μˆ˜λ₯Ό 직접 μ ‘κ·Όν•œλ‹€λ©΄ μ†Œμ€‘ν•œ 정보가 λ³΄ν˜Έλ˜μ§€ λͺ»ν•œλ‹€. λ”°λΌμ„œ, λ³€μˆ˜λ₯Ό private μ ‘κ·ΌμœΌλ‘œ 막고 κ³΅κ°œλ˜λŠ” λ©”μ„œλ“œλ₯Ό 톡해 μ ‘κ·Ό ν†΅λ‘œλ₯Ό λ”°λ‘œ λ§ˆλ ¨ν•΄μ€€λ‹€ (Setters & Getters)

<3>μ‹±κΈ€ν„΄ λ””μžμΈ νŒ¨ν„΄

  1. 객체의 생성을 μ œν•œν•΄μ•Ό ν•˜λŠ” 경우
    • μ—¬λŸ¬κ°œμ˜ 객체가 ν•„μš” μ—†λŠ” 경우: μˆ˜μ •κ°€λŠ₯ν•œ λ§΄λ²„λ³€μˆ˜κ°€ μ—†κ³  κΈ°λŠ₯만 μžˆλŠ” 경우 (stateless)
    • 객체λ₯Ό 계속 생성/ μ‚­μ œν•˜λŠ”λ° λ§Žμ€ λΉ„μš©μ΄ λ“€μ–΄μ„œ μž¬μ‚¬μš©μ΄ μœ λ¦¬ν•  경우
  2. μ‹±κΈ€ν„΄ λ””μžμΈ νŒ¨ν„΄
    1. μƒμ„±μžμ˜ μ ‘κ·Ό μ œν•œμžλ₯Ό private으둜 μ„€μ •ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μƒμ„±μžμ— μ ‘κ·Ό κΈˆμ§€
    2. λ‚΄λΆ€μ—μ„œλŠ” private에 μ ‘κ·Ό κ°€λŠ₯ν•˜λ―€λ‘œ 직접 객체 생성 → 맴버 λ³€μˆ˜μ΄λ―€λ‘œ private
    3. Getter 생성 : μ™ΈλΆ€μ—μ„œ private member에 μ ‘κ·Ό κ°€λŠ₯ν•˜κ²Œ 함(setterλŠ” ν•„μš”x)
    4. Getter 와 λ³€μˆ˜μ— static을 μΆ”κ°€ν•˜μ—¬ 객체 없이 μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ 함

🧸 외뢀에선 getter 을 ν†΅ν•΄μ„œ 객체λ₯Ό μ°Έμ‘°ν•˜κΈ°λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 객체만 μž¬μ‚¬μš©ν• μˆ˜μžˆλ‹€

 

728x90
λ°˜μ‘ν˜•