JAVA/Theory

μžλ°”(Java)의 μ ‘κ·Ό μ œμ–΄μž

ITs Min 2023. 12. 17.

πŸ” μ ‘κ·Όμ œμ–΄μžλž€?

μžλ°”(Java)λŠ” 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œμ„œ, ν΄λž˜μŠ€μ™€ 객체λ₯Ό μ€‘μ‹¬μœΌλ‘œ ν•œ κ°œλ°œμ„ μ§€μ›ν•œλ‹€. μ΄λŸ¬ν•œ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 핡심적인 역할을 ν•˜λŠ” 것 쀑 ν•˜λ‚˜κ°€ μ ‘κ·Ό μ œμ–΄μž(access modifier)이닀. μžλ°”μ—μ„œλŠ” λ‹€μ„― κ°€μ§€ μ£Όμš” μ ‘κ·Ό μ œμ–΄μžλ₯Ό 톡해 클래슀의 멀버 λ³€μˆ˜μ™€ λ©”μ„œλ“œμ— λŒ€ν•œ 접근을 효과적으둜 μ œμ–΄ν•  수 μžˆλ‹€.


πŸ” default (package-private): νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ 자유둜운 μ ‘κ·Ό

λ§Œμ•½ μ ‘κ·Ό μ œμ–΄μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄, ν•΄λ‹Ή λ©€λ²„λŠ” default둜 κ°„μ£Όλ˜μ–΄ 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€. 이λ₯Ό 톡해 νŒ¨ν‚€μ§€ λ‚΄λΆ€μ—μ„œμ˜ 자유둜운 μ†Œν†΅μ΄ κ°€λŠ₯ν•΄μ§„λ‹€.

class MyClass {
    int myDefaultVariable;
    void myDefaultMethod() {
        // λ©”μ„œλ“œ λ‚΄μš©
    }
}

πŸ” public: μ–΄λ””μ„œλ“  자유둜운 μ ‘κ·Ό

public μ ‘κ·Ό μ œμ–΄μžλŠ” μ–΄λ–€ νŒ¨ν‚€μ§€μ—μ„œλ“  ν•΄λ‹Ή 멀버에 자유둭게 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€. λ˜ν•œ, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€μ—μ„œλ„ 접근이 κ°€λŠ₯ν•˜λ‹€. 이λ₯Ό 톡해 λͺ¨λ“ˆ 간에 μœ μ—°ν•œ μ†Œν†΅μ΄ κ°€λŠ₯ν•΄μ§„λ‹€.

public class MyClass {
    public int myPublicVariable;
    public void myPublicMethod() {
        // λ©”μ„œλ“œ λ‚΄μš©
    }
}

πŸ” protected: 상속을 ν†΅ν•œ ν™•μž₯ κ°€λŠ₯

같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ μ ‘κ·Ό κ°€λŠ₯:

protected둜 μ„ μ–Έλœ λ©€λ²„λŠ” λ™μΌν•œ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œλ„ 자유둭게 μ ‘κ·Όν•  수 μžˆλ‹€. μ΄λŠ” λͺ¨λ“ˆ κ°„ μœ μ—°ν•œ μ†Œν†΅μ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

 

λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯:

protected둜 μ„ μ–Έλœ λ©€λ²„λŠ” 같은 νŒ¨ν‚€μ§€κ°€ μ•„λ‹Œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ protected 멀버λ₯Ό μ„ μ–Έν•œ 클래슀의 μžμ‹ 클래슀일 κ²½μš°μ—λ§Œ κ°€λŠ₯ν•˜λ‹€. μ΄λŠ” 상속 κ΄€κ³„μ—μ„œ λΆ€λͺ¨ 클래슀의 일뢀 멀버λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ ν™œμš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.

 

클래슀 μ™ΈλΆ€μ—μ„œλŠ” 직접 μ ‘κ·Ό λΆˆκ°€:

protected둜 μ„ μ–Έλœ λ©€λ²„λŠ” 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ“  μ™ΈλΆ€ νŒ¨ν‚€μ§€μ˜ μžμ‹ ν΄λž˜μŠ€μ—μ„œλ“  직접 μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, μ™ΈλΆ€ νŒ¨ν‚€μ§€μ˜ 일반적인 ν΄λž˜μŠ€λ‚˜ μ™ΈλΆ€ νŒ¨ν‚€μ§€μ˜ 클래슀의 μΈμŠ€ν„΄μŠ€μ—μ„œλŠ” 직접 μ ‘κ·Όν•  수 μ—†λ‹€. μ΄λŠ” 정보 은닉을 톡해 클래슀의 일뢀λ₯Ό λ³΄ν˜Έν•œλ‹€.

 

μƒμ†μ—μ„œ ν™œμš©:

주둜 상속과 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄, λΆ€λͺ¨ 클래슀의 protected 멀버λ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œν•˜κ±°λ‚˜ 직접 ν™œμš©ν•  수 μžˆλ‹€. μ΄λŠ” 클래슀 κ°„μ˜ μœ μ—°ν•œ 상속 ꡬ쑰λ₯Ό κ°€λŠ₯μΌ€ ν•œλ‹€.

package com.example;

public class ParentClass {
    protected int protectedVariable;

    protected void protectedMethod() {
        // λ©”μ„œλ“œ λ‚΄μš©
    }
}

```java
package com.otherpackage;

import com.example.ParentClass;

public class ChildClass extends ParentClass {
    void accessProtectedMember() {
        // 같은 νŒ¨ν‚€μ§€ 내에 μžˆμœΌλ―€λ‘œ protected 멀버에 μ ‘κ·Ό κ°€λŠ₯
        int variableValue = protectedVariable;

        // λΆ€λͺ¨ 클래슀의 protected λ©”μ„œλ“œ 호좜 κ°€λŠ₯
        protectedMethod();
    }
}

πŸ” private: 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ 보호

private μ ‘κ·Ό μ œμ–΄μžλŠ” 같은 클래슀 λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ©°, μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€. μ΄λŠ” 정보 은닉(Encapsulation)을 톡해 클래슀의 λ‚΄λΆ€ κ΅¬ν˜„μ„ λ³΄ν˜Έν•˜λŠ” 데에 μ‚¬μš©λœλ‹€. (getter와 setterλ₯Ό μ΄μš©ν•΄μ„œ 접근을 ν—ˆμš©.)

public class ProductDTO {
	private int pid;
	private String name;
	private int price;
	
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}

πŸ” final: μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•œ μ•ˆμ •μ„±

λ§ˆμ§€λ§‰μœΌλ‘œ, final μ ‘κ·Ό μ œμ–΄μžλŠ” ν•΄λ‹Ή 멀버가 μ΅œμ’…μ μœΌλ‘œ μˆ˜μ •λ  수 μ—†μŒμ„ λ‚˜νƒ€λ‚Έλ‹€. 클래슀, λ©”μ„œλ“œ, λ³€μˆ˜μ— 적용될 수 μžˆμ–΄, μ½”λ“œμ˜ λΆˆλ³€μ„±μ„ μœ μ§€ν•  λ•Œ μœ μš©ν•˜λ‹€. final이 뢙은 건 λΆˆλ³€μ΄λ‹€. κ·ΈλŸ¬λ―€λ‘œ 멀버 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” ν•˜μ§€ μ•Šκ³  ν΄λž˜μŠ€μ—μ„œ μ΄ˆκΈ°ν™”ν•œλ‹€.

public final class MyFinalClass {
    final int myFinalVariable = 10;
    final void myFinalMethod() {
        // λ©”μ„œλ“œ λ‚΄μš©
    }
}

πŸ’‘ κ²°λ‘ 

μžλ°”μ˜ λ‹€μ–‘ν•œ μ ‘κ·Ό μ œμ–΄μžλ“€μ„ 적절히 ν™œμš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ μ•ˆμ „μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€. 각각의 νŠΉμ„±μ„ μ΄ν•΄ν•˜κ³  μ μš©ν•˜μ—¬ μ½”λ”©ν•˜λ©΄, 보닀 κ²¬κ³ ν•˜κ³  μ‹ λ’°μ„± μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  수 μžˆλ‹€. μžλ°”μ˜ 객체 μ§€ν–₯ νŠΉμ„±μ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜λŠ” 것이 쒋을 것 κ°™λ‹€!


 

λŒ“κΈ€

TOP

λŠ¦μ—ˆλ‹€κ³  생각할 땐 λ„ˆλ¬΄ λŠ¦μ€ κ±°λ‹€.