Backend/Java

[Java]μ ‘κ·Όμ œν•œμž(Access Modifier) - (1)

sukii 2023. 12. 26. 17:14
λ°˜μ‘ν˜•

πŸ€”μ ‘κ·Όμ œν•œμž(Access Modifier)

클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œ μž‘μ„±μ‹œ 클래슀 μ™ΈλΆ€μ—μ„œμ˜ 접근을 μ œν•œν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ œν•œμž

=> 정보 은닉(data hiding)을 톡해 μ‚¬μš©μžκ°€ μ΅œμ†Œν•œμ˜ μ •λ³΄λ§ŒμœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•  수 있게 ν•˜κΈ° μœ„ν•΄

=> μ’…λ₯˜ 및 ν—ˆμš© λ²”μœ„ :  public > protected >  default > private

 

μ ‘κ·Όμ œμ–΄μž 클래슀 λ‚΄λΆ€ 동일 νŒ¨ν‚€μ§€ 상속받은 클래슀
(λ‹€λ₯Έ νŒ¨ν‚€μ§€)
이외 λ‹€λ₯Έ νŒ¨ν‚€μ§€
private O X X X
default O O X X
protected O O O X
public O O O O

 

 

⚫private μ ‘κ·Ό μ œν•œμž

ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” μ ‘κ·Ό μ œν•œμž - 은닉화

=> 클래슀 μ™ΈλΆ€μ—μ„œ ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  경우 μ—λŸ¬ λ°œμƒ

 

μ‹€μŠ΅μ˜ˆμ œπŸ‘©‍πŸ’»

1) PrivateMember λΌλŠ” 클래슀 μ•ˆμ— private μ œν•œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„λ“œμ™€ λ©”μ†Œλ“œ μž‘μ„±

package xyz.itwill.access;

public class PrivateMember {
	private int number;
	
	@SuppressWarnings("unused")
	private void disply() {
		System.out.println("number = "+number);
	}
}

 

2) κ°™μ€ νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ PrivateMember κ°μ²΄λ₯Ό μƒμ„±ν•˜μ—¬ μ ‘κ·Όν•˜λ €κ³  μ‹œλ„ν•΄λ΄„.

그러면 μ•„λž˜μ™€ 같이 였λ₯˜κ°€ λ°œμƒ.

package xyz.itwill.access;

public class PrivateMemberUse {
	public void run() {
		@SuppressWarnings("unused")
		PrivateMember member = new PrivateMember();
		
		member.number=100;
		member.display();
	}
}

 

PrivateMember 객체 생성 ν›„ μ ‘κ·Ό μ‹œλ„ μ‹œ 였λ₯˜ λ°œμƒ

 

 

⚫ default μ ‘κ·Ό μ œν•œμž

클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œ μž‘μ„±μ‹œ μ ‘κ·Ό μ œν•œμž κ΄€λ ¨ ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ default μ ‘κ·Ό μ œν•œμžλ‘œ 처리
=> 클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό 같은 νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” μ ‘κ·Ό μ œν•œμž
=> 클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  경우 μ—λŸ¬ λ°œμƒ

 

μ‹€μŠ΅μ˜ˆμ œπŸ‘©‍πŸ’»

1) PackageMemberλΌλŠ” 클래슀 μ•ˆμ— μ œν•œμž κ΄€λ ¨ ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•„λ“œμ™€ λ©”μ†Œλ“œ μž‘μ„±

package xyz.itwill.access;

public class PackageMember {
	int number;
	
	void display() {
		System.out.println("number = "+number);
	}
}

 

2) κ°™μ€ νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ PackageMemberUseλΌλŠ” μƒˆλ‘œμš΄ ν΄λž˜μŠ€μ—μ„œ  PackageMember객체λ₯Ό μƒμ„±ν•˜μ—¬ μ ‘κ·Όν•˜λ €κ³  μ‹œλ„ν•΄λ΄„. μ•„λž˜μ™€ 같이 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠμŒ.

클래슀 외뢀이긴 ν•˜μ§€λ§Œ, defaultμ œν•œμžλ₯Ό μ‚¬μš©ν•˜λ©΄ 같은 νŒ¨ν‚€μ§€ λ‚΄λΆ€μ—μ„œλŠ” μ ‘κ·Ό κ°€λŠ₯.

package xyz.itwill.access;

public class PackageMeberUse {
	public void run() {
		PackageMember member=new PackageMember();
		
		member.number=100;
		member.display();
	}
}

 

3) μ•„λž˜λŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ PackageMember 클래슀λ₯Ό 상속받은 κ²½μš°μž„.

defaultμ œν•œμžλ₯Ό μ‚¬μš©ν•˜λ©΄ μžμ‹ν΄λž˜μŠ€μž„μ—λ„ λΆˆκ΅¬ν•˜κ³  λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλŠ” μ—λŸ¬ λ°œμƒ.

 

 

⚫ protected μ ‘κ·Ό μ œν•œμž

ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό 같은 νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” μ ‘κ·Ό μ œν•œμž
=> ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  경우 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λ§Œ 클래슀λ₯Ό 상속받을 경우 μ‚¬μš© κ°€λŠ₯

 

μ‹€μŠ΅μ˜ˆμ œπŸ‘©‍πŸ’»

1) ProtectedMemberλΌλŠ” 클래슀 μ•ˆμ— Protected μ œν•œμž ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„λ“œμ™€ λ©”μ†Œλ“œ μž‘μ„±

package xyz.itwill.access;

public class ProtectedMember {
	protected int number;
	
	protected void display() {
		System.out.println("number = "+number);
	}
}

 

2) λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ ProtectedMember객체λ₯Ό μƒμ„±ν•˜μ—¬ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•΄λ³΄λ €κ³  ν•˜λ‹ˆ μ—λŸ¬ λ°œμƒ

 

3) κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—¬λ„ ProtectedMember 클래슀λ₯Ό μƒμ†λ°›μœΌλ©΄ ν•„λ“œμ™€ λ©”μ†Œλ“œ μ‚¬μš© κ°€λŠ₯

 

 

⚫ public μ ‘κ·Ό μ œν•œμž

클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό 같은 νŒ¨ν‚€μ§€ 및 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” μ ‘κ·Ό μ œν•œμž

=> μ†ŒμŠ€νŒŒμΌμ—λŠ” λ‹€μˆ˜μ˜ Java μžλ£Œν˜•(클래슀, μΈν„°νŽ˜μ΄μŠ€, μ—΄κ±°ν˜•) μ„ μ–Έ κ°€λŠ₯ - λΉ„κΆŒμž₯
=> μ†ŒμŠ€νŒŒμΌμ—λŠ” public μ œν•œμžλ‘œ μ„ μ–Έλœ 클래슀λ₯Ό ν•˜λ‚˜λ§Œ μž‘μ„± κ°€λŠ₯
=> public μ œν•œμžλ₯Ό μ‚¬μš©ν•œ Java μžλ£Œν˜•μ˜ μ΄λ¦„μœΌλ‘œ μ†ŒμŠ€νŒŒμΌλͺ…을 μ €μž₯

 

μ‹€μŠ΅μ˜ˆμ œπŸ‘©‍πŸ’»

1) PublicMemberλΌλŠ” 클래슀 μ•ˆμ— Public μ œν•œμž ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„λ“œμ™€ λ©”μ†Œλ“œ μž‘μ„±

package xyz.itwill.access;

public class PublicMember {
	public int number;
	
	public void display() {
		System.out.println("number = "+number);
		
	}
}

 

2) μ•„λž˜μ™€ 같이 같은 νŒ¨ν‚€μ§€μ˜ λ‹€λ₯Έ 클래슀, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯

동일 νŒ¨ν‚€μ§€ - λ‹€λ₯Έ 클래슀
λ‹€λ₯Έ νŒ¨ν‚€μ§€ - λ‹€λ₯Έ 클래슀

 

λ°˜μ‘ν˜•