์ ๊ทผ ์ ์ด์
์ ๊ทผ ์ ์ด์ ์ดํด 1
์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค ์ธ๋ถ์์ ํน์ ํ๋๋ ๋ฉ์๋์ ์ ๊ทผํ๋ ๊ฒ์ ํ์ฉํ๊ฑฐ๋ ์ ํํ ์ ์๋ค.
ํ๋์ ์ง์ ์ ๊ทผํด์ ์ํ๋ ๊ฐ์ ์ค์ ํ๋ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํ๋์ ์ธ๋ถ ์ ๊ทผ์ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
์ ๊ทผ ์ ์ด์ ์ดํด 2
private ์ ๊ทผ ์ ์ด์๋ ๋ชจ๋ ์ธ๋ถ ํธ์ถ์ ๋ง๋๋ค. ๋ฐ๋ผ์ private์ด ๋ถ์ ๊ฒฝ์ฐ ํด๋น ํด๋์ค ๋ด๋ถ์์๋ง ํธ์ถํ ์ ์๋ค.
โ๏ธ ์ฐธ๊ณ
์ข์ ํ๋ก๊ทธ๋จ์ ๋ฌดํํ ์์ ๋๊ฐ ์ฃผ์ด์ง๋ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ ์ ์ ํ ์ ์ฝ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์ ๊ทผ ์ ์ด์ ์ข ๋ฅ
Java๋ 4๊ฐ์ง ์ข ๋ฅ์ ์ ๊ทผ ์ ์ด์๋ฅผ ์ ๊ณตํ๋ค.
์ ๊ทผ ์ ์ด์ ์ข
๋ฅ
- private : ๋ชจ๋ ์ธ๋ถ ํธ์ถ์ ๋ง๋๋ค.
- default(package-private) : ๊ฐ์ ํจํค์ง ์์์ ํธ์ถ์ ํ์ฉํ๋ค.
- protected : ๊ฐ์ ํจํค์ง ์์์ ํธ์ถ์ ํ์ฉํ๋ค. ํจํค์ง๊ฐ ๋ฌ๋ผ๋ ์์ ๊ด๊ณ์ ํธ์ถ์ ํ์ฉํ๋ค.
- public : ๋ชจ๋ ์ธ๋ถ ํธ์ถ์ ํ์ฉํ๋ค.
์์๋๋ก private์ด ๊ฐ์ฅ ๋ง์ด ์ฐจ๋จํ๊ณ , public์ด ๊ฐ์ฅ ๋ง์ด ํ์ฉํ๋ค.
private → default → protected → public
package-private
์ ๊ทผ ์ ์ด์๋ฅผ ๋ช
์ํ์ง ์์ผ๋ฉด ๊ฐ์ ํจํค์ง ์์์ ํธ์ถ์ ํ์ฉํ๋ default ์ ๊ทผ ์ ์ด์๊ฐ ์ ์ฉ๋๋ค.
default๋ผ๋ ์ฉ์ด๋ ํด๋น ์ ๊ทผ ์ ์ด์๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ถ์ฌ์ง ์ด๋ฆ์ด์ง๋ง, ์ค์ ๋ก๋ package-private์ด ๋ ์ ํํ ํํ์ด๋ค. ํด๋น ์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ๋ฉค๋ฒ๋ ๋์ผํ ํจํค์ง ๋ด์ ๋ค๋ฅธ ํด๋์ค์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๊ทผ ์ ์ด์ ์ฌ์ฉ ์์น
์ ๊ทผ ์ ์ด์๋ ํ๋์ ๋ฉ์๋, ์์ฑ์์ ์ฌ์ฉ๋๋ค.
์ถ๊ฐ๋ก ํด๋์ค ๋ ๋ฒจ์๋ ์ผ๋ถ ์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
public class Speaker { // ํด๋์ค ๋ ๋ฒจ
private int volume; // ํ๋
public Speaker (int volume) {} // ์์ฑ์
public void volumeUp() {} // ๋ฉ์๋
public void volumeDown() {}
public void showVolume() {}
}
์ ๊ทผ ์ ์ด์์ ํต์ฌ์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ธ๋ถ๋ก๋ถํฐ ์จ๊ธฐ๋ ๊ฒ์ด๋ค.
- private์ ๋์ ํด๋์ค ์์ผ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์จ๊ธธ ๋ ์ฌ์ฉ, ์ธ๋ถ ํด๋์ค์์ ํด๋น ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ค.
- default๋ ๋์ ํจํค์ง ์์ผ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์จ๊ธธ ๋ ์ฌ์ฉ, ์ธ๋ถ ํจํค์ง์์ ํด๋น ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ค.
- protected๋ ์์ ๊ด๊ณ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์จ๊ธธ ๋ ์ฌ์ฉ, ์์ ๊ด๊ณ๊ฐ ์๋ ๊ณณ์์ ํด๋น ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ค.
- public์ ๊ธฐ๋ฅ์ ์จ๊ธฐ์ง ์๊ณ ์ด๋์๋ ํธ์ถํ ์ ์๊ฒ ๊ณต๊ฐํ๋ค.
์ ๊ทผ ์ ์ด์ ์ฌ์ฉ - ํ๋, ๋ฉ์๋
โญ์ฃผ์! ์ง๊ธ๋ถํฐ๋ ํจํค์ง ์์น๊ฐ ๋งค์ฐ ์ค์ํ๋ค. ํจํค์ง ์์น์ ์ฃผ์ํ์!โญ
ํ๋, ๋ฉ์๋ ๋ ๋ฒจ์ ์ ๊ทผ ์ ์ด์
AccessData
package access.a;
public class AccessData {
public int publicField;
int defaultField;
private int privateField;
public void publicMethod () {
System.out.println("publicMethod ํธ์ถ " + publicField);
}
void defaultMethod () {
System.out.println("defaultMethod ํธ์ถ " + defaultField);
}
private void privateMethod () {
System.out.println("privateMethod ํธ์ถ " + privateField);
}
public void innerAccess () {
System.out.println("๋ด๋ถ ํธ์ถ");
publicField = 100;
defaultField = 200;
privateField = 300;
publicMethod();
defaultMethod();
privateMethod();
}
}
- ์์๋๋ก public, default, private์ ํ๋์ ๋ฉ์๋์ ์ฌ์ฉํ๋ค.
- ๋ง์ง๋ง์ innerAccess( )๊ฐ ์๋๋ฐ, ์ด ๋ฉ์๋๋ ๋ด๋ถ ํธ์ถ์ ๋ณด์ฌ์ค๋ค. ๋ด๋ถ ํธ์ถ์ ์๊ธฐ ์์ ์๊ฒ ์ ๊ทผํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ private์ ํฌํจํ ๋ชจ๋ ๊ณณ์ ์ ๊ทผํ ์ ์๋ค.
package access.a;
public class AccessInnerMain {
public static void main(String[] args) {
AccessData data = new AccessData();
// public ํธ์ถ ๊ฐ๋ฅ
data.publicField = 1;
data.publicMethod();
// ๊ฐ์ ํจํค์ง default ํธ์ถ ๊ฐ๋ฅ
data.defaultField = 2;
data.defaultMethod();
// private ํธ์ถ ๋ถ๊ฐ
//data.privateField = 3;
//data.privateMethod();
data.innerAccess();
}
}
- public์ ๋ชจ๋ ์ ๊ทผ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋, ๋ฉ์๋ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- default๋ ๊ฐ์ ํจํค์ง์์ ์ ๊ทผํ ์ ์๋ค. AccessInnerMain์ AccessData์ ๊ฐ์ ํจํค์ง์ด๋ค.
๋ฐ๋ผ์ default ์ ๊ทผ ์ ์ด์์ ์ ๊ทผํ ์ ์๋ค. - private์ AccessData ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
๋ฐ๋ผ์ ํธ์ถ์ด ๋ถ๊ฐ๋ฅํ๋ค. - AccessData.innerAccess( ) ๋ฉ์๋๋ public์ด๋ค.
๋ฐ๋ผ์ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋ค.
innerAccess( ) ๋ฉ์๋๋ ์ธ๋ถ์์ ํธ์ถ๋์์ง๋ง, innerAccess( ) ๋ฉ์๋๋ AccessData์ ํฌํจ๋์ด ์๋ค. ์ด ๋ฉ์๋๋ ์์ ์ private ํ๋์ ๋ฉ์๋์ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ค.
package access.b;
import access.a.AccessData;
public class AccessOuterMain {
public static void main(String[] args) {
AccessData data = new AccessData();
// public ํธ์ถ ๊ฐ๋ฅ
data.publicField = 1;
data.publicMethod();
// ๋ค๋ฅธ ํจํค์ง default ํธ์ถ ๋ถ๊ฐ
//data.defaultField = 2;
//data.defaultMethod();
// private ํธ์ถ ๋ถ๊ฐ
//data.privateField = 3;
//data.privateMethod();
data.innerAccess();
}
}
- public์ ๋ชจ๋ ์ ๊ทผ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋, ๋ฉ์๋ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- default๋ ๊ฐ์ ํจํค์ง์์ ์ ๊ทผํ ์ ์๋ค. access.b.AccessOuterMain์ access.a.AccessData์ ๋ค๋ฅธ ํจํค์ง์ด๋ค.
๋ฐ๋ผ์ default ์ ๊ทผ ์ ์ด์์ ์ ๊ทผํ ์ ์๋ค. - private์ AccessData ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
๋ฐ๋ผ์ ํธ์ถ์ด ๋ถ๊ฐ๋ฅํ๋ค. - AccessData.innerAccess( ) ๋ฉ์๋๋ public์ด๋ค.
๋ฐ๋ผ์ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋ค.
innerAccess( ) ๋ฉ์๋๋ ์ธ๋ถ์์ ํธ์ถ๋์์ง๋ง, innerAccess( ) ๋ฉ์๋๋ AccessData์ ํฌํจ๋์ด ์๋ค. ์ด ๋ฉ์๋๋ ์์ ์ private ํ๋์ ๋ฉ์๋์ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ค.
์ ๊ทผ ์ ์ด์ ์ฌ์ฉ - ํด๋์ค ๋ ๋ฒจ
ํด๋์ค ๋ ๋ฒจ์ ์ ๊ทผ ์ ์ด์ ๊ท์น
- ํด๋์ค ๋ ๋ฒจ์ ์ ๊ทผ ์ ์ด์๋ public, default๋ง ์ฌ์ฉํ ์ ์๋ค.
- protected, private๋ ์ฌ์ฉํ ์ ์๋ค.
- public ํด๋์ค๋ ๋ฐ๋์ ํ์ผ๋ช
๊ณผ ์ด๋ฆ์ด ๊ฐ์์ผ ํ๋ค.
- ํ๋์ Java ํ์ผ์ public ํด๋์ค๋ ํ๋๋ง ๋ฑ์ฅํ ์ ์๋ค.
- ํ๋์ Java ํ์ผ์ default ์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค๋ ๋ฌดํ์ ๋ง๋ค ์ ์๋ค.
์บก์ํ
์บก์ํ(Encapsulation)๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ํ ๊ฐ๋
์ค ํ๋์ด๋ค.
์บก์ํ๋ ๋ฐ์ดํฐ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ์ด์ ์ธ๋ถ์์์ ์ ๊ทผ์ ์ ํํ๋ ๊ฒ์ ๋งํ๋ค. ์บก์ํ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ง์ ์ ์ธ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ฑฐ๋ ์ ํํ ์ ์๋ค.
์บก์ํ๋ ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ํ๋๋ก ๋ฌถ๊ณ , ์ธ๋ถ์ ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ๋
ธ์ถํ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ๋ด๋ถ๋ก ์จ๊ธฐ๋ ๊ฒ์ด๋ค.
1. ๋ฐ์ดํฐ๋ฅผ ์จ๊ฒจ๋ผ
๊ฐ์ฒด์๋ ์์ฑ(๋ฐ์ดํฐ)๊ณผ ๊ธฐ๋ฅ(๋ฉ์๋)์ด ์๋ค. ์บก์ํ์์ ๊ฐ์ฅ ํ์๋ก ์จ๊ฒจ์ผ ํ๋ ๊ฒ์ ์์ฑ(๋ฐ์ดํฐ)์ด๋ค.
๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์์ ํจ๋ถ๋ก ์ ๊ทผํ๊ฒ ๋๋ฉด, ํด๋์ค ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ชจ๋ ๋ก์ง์ ๋ฌด์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ์์ ๋ง์ ๋ค ๋น ์ ธ๋๊ฐ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์บก์ํ๊ฐ ๊นจ์ง๋ค.
๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ธ ๋ฉ์๋๋ฅผ ํตํด์ ์ ๊ทผํด์ผ ํ๋ค.
2. ๊ธฐ๋ฅ์ ์จ๊ฒจ๋ผ
๊ฐ์ฒด์ ๊ธฐ๋ฅ ์ค์์ ์ธ๋ถ์์ ์ฌ์ฉํ์ง ์๊ณ ๋ด๋ถ์์๋ง ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ด ์๋ค. ์ด๋ฐ ๊ธฐ๋ฅ๋ ๋ชจ๋ ๊ฐ์ถ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฝ ์ฌ์ฉ์์๊ฒ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ์๋ ค์ค๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ๋๋ฌด ๋ง์ ๊ฒ์ ์์์ผ ํ๋ค.
์ฌ์ฉ์ ์
์ฅ์์ ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ์ธ๋ถ์ ๋
ธ์ถํ์. ๋๋จธ์ง ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ด๋ถ๋ก ์จ๊ธฐ์.
๋ฐ์ดํฐ๋ ๋ชจ๋ ์จ๊ธฐ๊ณ , ๊ธฐ๋ฅ์ ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ๋ ธ์ถํ๋ ๊ฒ์ด ์ข์ ์บก์ํ์ด๋ค.
'๐ Java > ๐ Java ๊ฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ๊ธฐ๋ณธํธ ๊ฐ์_์์ (0) | 2024.12.01 |
---|---|
Java ๊ธฐ๋ณธํธ ๊ฐ์_final (2) | 2024.11.28 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_ํจํค์ง (0) | 2024.11.26 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_์์ฑ์ (0) | 2024.11.26 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2024.11.26 |