๐ ์ฑ ์๊ฐํ๊ธฐ
๋ด๊ฐ ์ฌ์ฉํ ์๋ฐ์์ ์ ๋ณต ์ฑ
๋งํฌ!
ใด ๊น๋ํ ์ง์, ์ด์ง์คํผ๋ธ๋ฆฌ์ฑ
์ด ์ฑ ์ ๊ณ ๋ฅด๊ฒ ๋ ์ด์ ๋ ์น๊ตฌ์ ์ถ์ฒ์ด์๋ค. ๊ต์ฅํ ๊ผผ๊ผผํ๊ฒ ์ ํ์์ด ์ดํดํ๊ธฐ ์ฝ๋ค๋ ์ด์ ๋ก ์น๊ตฌ๋ ์ด ์ฑ ์ ๊ณจ๋๋ค๊ณ ํ๋ค. ๋๋ ๊ทธ๋์ ๊ทธ๋ฅ ๋ฐ๋ผ์๋ค. ์ค์ ๋ก ์ฑ ์ ์ดํด๋ณด๋ ๊ต์ฅํ ๊ผผ๊ผผํ๊ฒ ์ ๋ฆฌ๋์ด์๋ค. ๋ค๋ฅธ ์ฑ ์ ๋ณธ ์ ์ด ์์ด ๋น๊ต๊ฐ ๋ถ๊ฐํ์ง๋ง, ๋ด ์๊ฐ์ผ๋ก ์ฒ์ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ค๋ฉด ์ด ์ฑ ์ ๊ฐ์ง๊ณ ์ถฉ๋ถํ ๋ฐ๋ผ๊ฐ ์ ์์ ๋ฏ ํ๋ค. ๋ชจ๋๋ค ํ์ดํ !!
๐ฐ
โ๏ธ ๋ฉค๋ฒ ๋ฐ ์์ฑ์์ ์ ๊ทผ ์ง์ ์_ 280p
• 4์ข ๋ฅ์ ์ ๊ทผ์ง์ ์
: public, protected, default(ํน์ package), private
• ์ ๊ทผ ๋ฒ์
: public > protected > default > private
์ ๊ทผ์ง์ ์ | ์ฌ์ฉ ๊ฐ๋ฅ ๋ฒ์ |
public | ๋์ผ ํจํค์ง ๋ด ๋ชจ๋ ํด๋์ค O, ๋ค๋ฅธ ํจํค์ง์ ๋ชจ๋ ํด๋์ค๋ง O |
protected | ๋์ผ ํจํค์ง ๋ด ๋ชจ๋ ํด๋์ค O, ๋ค๋ฅธ ํจํค์ง์ ์์ ํด๋์ค๋ง O - ์์์ ํตํด |
default | ๋์ผ ํจํค์ง ๋ด ๋ชจ๋ ํด๋์ค๋ง O (๋ค๋ฅธ ํจํค์ง X) |
private | ๊ฐ์ ํด๋์ค๋ง O (๋ค๋ฅธ ํจํค์ง X, ๋ค๋ฅธ ํด๋์ค X) |
• ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํ์ฌ ๋ฐ์ ๊ฒฝ์ฐ
public class A {
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4;
public void print() {
System.out.println(a + " ");
System.out.println(b + " ");
System.out.println(c + " ");
System.out.println(d + " ");
}
}
public class B extends A{
public void print() {
System.out.println(a + " ");
System.out.println(b + " ");
}
}
ํด๋์ค B๋ ํด๋์ค A๋ฅผ ์์ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ํจํค์ง์ ๋ชจ๋ ํด๋์ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ pubic์ด ๋ถ์ ๋ณ์ a์ ๋ค๋ฅธ ํจํค์ง์ ์์ ํด๋์ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ protected๊ฐ ๋ถ์ ๋ณ์ b๋ฅผ ํด๋์ค B์์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์๋ ๋ค๋ฅธ ํด๋์ค์ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ์ฒด ์์ฑ์ ํด์ค์ผํ๋ค. ํ์ง๋ง ์์์ ๊ฐ์ฒด ์์ฑ ์์ด ๋ฐ๋ก ํด๋์ค A์ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
• ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํ์ง ์์ ๊ฒฝ์ฐ
public class A {
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4;
public void print() {
System.out.println(a + " ");
System.out.println(b + " ");
System.out.println(c + " ");
System.out.println(d + " ");
}
}
public class B {
A a = new A(); // ๊ฐ์ฒด ์์ฑ!!!
public void print() {
// public์ธ ๋ณ์ a๋ง ๊ฐ๋ฅ
System.out.println(a + " ");
}
}
โ๏ธ ํด๋์ค ์ ๊ทผ ์ง์ ์์ ์์ฑ์ ์ ๊ทผ ์ง์ ์_ 285p
• default ํด๋์ค๋ฅผ import ํ๋ ๊ฒฝ์ฐ
import abc.bcd.A;
class A {
...
}
import abc.bcd.A;
class B {
...
}
ํด๋์ค ์์๋ private์ default๋ง ๋ถ์ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ default๋ ๋์ผ ํจํค์ง ๋ด ๋ชจ๋ ํด๋์ค์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํจํค์ง์ importํ๋๊ฒ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์์ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
๋ง์ฝ public ํด๋์ค์ ์์ฑ์๋ฅผ ์ถ๊ฐํ๋ค๋ฉด, ๊ทธ ์์ฑ์ ์์ ์ ๊ทผ์ง์ ์๋ฅผ ๋ถ์ด์ง ์์๋ public์ด ๋ถ์ ๊ฒ์ด๋ค. ์ด๋ ๋ฏ ์๋์ผ๋ก ์ถ๊ฐ๋๋ ์์ฑ์์ ์ ๊ทผ ์ง์ ์๋ ํด๋์ค์ ์ ๊ทผ ์ง์ ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ฉฐ, ์๋์ด ์๋ ์ง์ ์ ๊ทผ ์ง์ ์๋ฅผ ๋ถ์ฌ์ฃผ๋ ๊ฒฝ์ฐ ํด๋์ค์ ์ ๊ทผ ์ง์ ์๋ฅผ ๋ฐ๋ผ ๋ถ์ผ ํ์๋ ์๋ค.
ํด๋์ค์๋ public๊ณผ default๋ง ์์ ๋ถ์ ์ ์์๋ค. ๊ทธ๋ฌ๋ฉด ์์ฑ์์ ์๋์ผ๋ก ์ถ๊ฐ๋๋ ์ ๊ทผ ์ง์ ์๋ public ํน์ default๊ฐ ๋ ๊ฒ์ด๋ค. ์์ฑ์๊ฐ default๋ผ๋ฉด ๋ค๋ฅธ ํจํค์ง์๋ ์ฌ์ฉ๋ถ๊ฐํ๋ค๋ ์ ์ ์ ์ํ๋ฉด ๋๋ค.
Q. ํด๋์ค ์์ private์ default๋ง ๋ถ์ ์ ์๋ ์ด์ ๋?
A. private๋ฅผ ํด๋์ค์ ๋ถ๋๋ค๋ฉด ์ ๊ทผ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ๊ฒ๋์ด ํด๋์ค์ ์๋ฏธ ์์ฒด๊ฐ ์์ด์ง ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด protected๋ ์๋๋ฉด์ default๋ ๋๋ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ์ถ์ธกํด๋ด์ผํ๋ค. protected๋ ์์์ด ๋๋ค. ์ด ์ ์ด default์ ์ฐจ์ด์ ์ธ๋ฐ, ์๋ง ์์์ด ๋ถ์ด์ protected๋ ํด๋์ค์ ๋ถ์ด์ง ์์ ๊ฒ ๊ฐ๋ค. (์์ธ๊ฐ ์๊ธฐ๋ ๋๋?)_ ๋ช ํํ ๋ต์ ๋ชป์ฐพ์
• public ํด๋์ค์ default ์์ฑ์์ ๊ฒฝ์ฐ
Package abc.bcd;
public class A {
A() {
}
}
package bcd.cde;
import abc.bcd.A;
class C {
public static void main(String[] ar) {
A a = new A();
}
}
public ์ ๊ทผ ์ง์ ์๋ฅผ ๊ฐ์ง ํด๋์ค A์๋ default ์ ๊ทผ ์ง์ ์๋ฅผ ๊ฐ์ง ์์ฑ์๊ฐ ์๋ค. ํด๋์ค A๋ public์ด๋ ๋ค๋ฅธ ํด๋์ค์ import๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฐ๋ฐ ์์ฑ์ A๋ default๋ก ๋ค๋ฅธ ํด๋์ค์ ํธ์ถ์ด ๋ถ๊ฐํ๋ค. ๋ง์ฝ ํด๋์ค C๊ฐ ํด๋์ค A๋ฅผ ์์ํ๋คํด๋ ์์ฑ์ A๋ default ์ ๊ทผ ์ง์ ์๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ ์ธ์คํด์ค ํ๋์ ์ ์ ํ๋_ 292p
• ์ธ์คํด์ค ๋ฉค๋ฒ
: ๊ฐ์ฒด ์์ ์์ ๋ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ๋๋ ๋ฉค๋ฒ
• ์ ์ ๋ฉค๋ฒ
: static์ด ๋ถ์ด ์๋ ๋ฉค๋ฒ
class A {
int m = 3;
static int n = 5;
}
// ์ธ์คํด์ค ํ๋์ ํ์ฉ ๋ฐฉ๋ฒ
A a = new A();
System.out.println(a.m);
// static ํ๋ ํ์ฉ ๋ฐฉ๋ฒ
System.out.println(A.n);
์ธ์คํด์ค ํ๋ m์ ๊ฐ์ฒด ๋ด๋ถ์ ์์ฑ๋๋ค. ๊ทธ๋์ m์ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋จผ์ ์์ฑํด์ผ ํ๋ค. ๋ํ ์ ์ฅ ๊ณต๊ฐ์ด ํ ๋ฉ๋ชจ๋ฆฌ์ ์์นํ๋ฏ๋ก ์ ์ฅ ๊ณต๊ฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ํด์ ์ฐธ์กฐ ๋ณ์๋ช ์ ์ฌ์ฉํด์ผํ๋ค.
์ ์ ํ๋ n์ ํด๋์ค ๋ด๋ถ์ ์ ์ฅ ๊ณต๊ฐ์ ์ง๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ ์์ด ํด๋์ค๋ช . ๋ฉค๋ฒ๋ช ์ธ A.n์ผ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ฌผ๋ก ์ธ์คํด์ค์ฒ๋ผ ์ฐธ์กฐ ๋ณ์๋ช .๋ฉค๋ฒ๋ช ์ธ a.m๊ณผ ๊ฐ์ด ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ์ฌ์ฉํ๋ค๋ฉด ์ ์ ๋ฉค๋ฒ๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ผ๋ฏ๋ก ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋๋ค.
A a1 = new A();
A a2 = new A();
a1.n = 7;
a2.n = 8;
์ ์ ํ๋ n์ ๊ฐ 7๊ณผ 8์ ์ฐจ๋ก๋ก ๋ฃ์๋ค. ์๋ง ์ธ์คํด์ค ๋ณ์ m์ ๋ฃ์๋ค๋ฉด a1.m์ 7์ด ๋๊ณ a2.m์ 8์ด ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ ์ ๋ณ์๋ a1.n๊ณผ a2.n ๋ชจ๋ 8์ด ๋์๋ค.
๊ฐ์ฒด ์์ฑ์ ํ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ค์ง๊ณ ์ธ์คํด์ค ํ๋๋ ๊ฐ์ฒด ๋ด๋ถ์ ์์ฑ๋๋ฏ๋ก ๊ฐ ๋ฐ์ดํฐ ๊ฐ์ ๋ ๊ฐ์ฒด ์์ ์ ์ฅํ๊ฒ ๋๋ค. ๊ฐ์ ์ฝ์ผ๋ ค๊ณ ํ๋ค๋ฉด ๋ฐ๋ก ๊ฐ์ฒด ์์ฑ์ด ๋์ด์๋ a1๊ณผ a2 ๋ด๋ถ์ ๊ฐ๋ง ๊ฐ์ ธ์ค๋ฉด ๋๋ค.
์ ์ ํ๋๋ ํด๋์ค A์์ ์ค์ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ํ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ฒด ์์๋ ๋ฐ์ดํฐ ๊ฐ์ ์์น๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ตญ ๋ ๊ฐ์ฒด๋ ํด๋์ค A๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ ๊ฐ 7์ด ๋ค์ด๊ฐ๋ฉด a1์ ํตํด ํด๋์ค A ์์ 7์ ์ ์ฅํ๊ฒ ๋๋ค. ๊ทธ ํ a2๋ฅผ ํตํด ๊ฐ 8์ ๋ฃ์ผ๋ฉด ์ด ๋ํ ํด๋์ค A๋ฅผ ๊ฐ๋ฆฌํค๋ 7์ ๊ฐ์ ์ฌ๋ผ์ง๊ณ 8์ด ์ ์ฅ๋๊ฒ ๋๋ค.
โ๏ธ ์ธ์คํด์ค ๋ฉ์๋์ ์ ์ ๋ฉ์๋_ 298p
class A {
void abc() {
System.out.pritnln("์ธ์คํด์ค ๋ฉ์๋");
}
static void avc() {
System.out.println("์ ์ ๋ฉ์๋");
}
}
A a1 = new A();
a1. abc();
A.bcd();
์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ธ์คํด์ค ํ๋์ ๊ฐ๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ค. ์ ์ ๋ฉ์๋์ ๊ฒฝ์ฐ ํด๋์ค๋ช ์ผ๋ก ๋ฐ๋ก ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
์ ์ ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋๋ ์ธ์คํด์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ ์ด์ ๋ ์ธ์คํด์ค ๋ฉค๋ฒ๋ ๊ฐ์ฒด ์์ฑ์ด ํ์์ธ๋ฐ, ์ ์ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๊ฐ์ฒด ์์ฑ ์์ด ์คํํ๊ธฐ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์ ์ ๋ฉ์๋ ๋ด๋ถ์๋ this ํค์๋๋ ์ฌ ์ ์๋ค. ์๋ํ๋ฉด this ์์ฒด๊ฐ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. this๋ ์ธ์คํด์ค ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ๋ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ ์ ๋ฉ์๋์ ์ฌ ์ ์๋ค.