๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ 1 - ์์
์๋ฐ์์ ์ฐธ์กฐํ์ ์ ๋๋ก ์ดํดํ๋ ๊ฒ์ ์ ๋ง ์ค์ํ๋ค.
๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฅ ํฌ๊ฒ ๋ณด๋ฉด ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค. ์ฌ์ฉํ๋ ๊ฐ์ ๋ณ์์ ์ง์ ๋ฃ์ ์ ์๋ ๊ธฐ๋ณธํ, ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ๊ฐ๋ฅดํค๋ ์ฐธ์กฐ๊ฐ์ ๋ฃ์ ์ ์๋ ์ฐธ์กฐํ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค.
- ๊ธฐ๋ณธํ(Primitive Type) : int, long, double, boolean์ฒ๋ผ ๋ณ์์ ์ฌ์ฉํ ๊ฐ์ ์ง์ ๋ฃ์ ์ ์๋ ๋ฐ์ดํฐ ํ์ ์ ๊ธฐ๋ณธํ์ด๋ผ ํ๋ค.
- ์ฐธ์กฐํ(Reference Type) : ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ์ฐธ์กฐ(์ฃผ์)๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ ํ์ ์ ์ฐธ์กฐํ์ด๋ผ ํ๋ค. ์ฐธ์กฐํ์ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ์ฌ์ฉ๋๋ค.
๊ธฐ๋ณธํ ๋ณ์์๋ ์ง์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ด ๋ค์ด์์ง๋ง ์ฐธ์กฐํ ๋ณ์์๋ ์์น(์ฐธ์กฐ๊ฐ)๊ฐ ๋ค์ด๊ฐ ์๋ค. ์ฐธ์กฐํ ๋ณ์๋ฅผ ํตํด์ ๋ญ๊ฐ ํ๋ ค๋ฉด ๊ฒฐ๊ตญ ์ฐธ์กฐ๊ฐ์ ํตํด ํด๋น ์์น๋ก ์ด๋ํด์ผ ํ๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ - ๊ธฐ๋ณธ
- ๊ธฐ๋ณธํ์ ์ซ์ 10, 20๊ณผ ๊ฐ์ด ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณ์์ ๋ด์ ์ ์๋ค. ๊ทธ๋์ ํด๋น ๊ฐ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ฐธ์กฐํ์ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณ์์ ๋ด๋ ๊ฒ์ด ์๋๋ค. ์ด๋ฆ ๊ทธ๋๋ก ์ค์ ๊ฐ์ฒด์ ์์น(์ฐธ์กฐ, ์ฃผ์)๋ฅผ ์ ์ฅํ๋ค. ์ฐธ์กฐํ์๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์๋ค.
- ๊ฐ์ฒด๋ .(dot)์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ์ผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ฐฐ์ด์ [ ]๋ฅผ ํตํด์ ๋ฉ๋ชจ๋ฆฌ ์์ ์์ฑ๋ ๋ฐฐ์ด์ ์ฐพ์๊ฐ์ผ ์ฌ์ฉํ ์ ์๋ค.
๊ธฐ๋ณธํ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ์ง๋ง ์ฐธ์กฐํ์ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ธฐ๋ณธํ์ ๋ณ์์ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ด ๋ด๊ฒจ์๋ค. +, -์ ๊ฐ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ์กฐํ์ ๋ณ์์ ๊ฐ์ฒด์ ์์น์ธ ์ฐธ์กฐ๊ฐ์ด ๋ค์ด ์๋ค. ์ฐธ์กฐ๊ฐ์ ๊ณ์ฐ์ ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๋ฌผ๋ก .์ ํตํด ๊ฐ์ฒด์ ๊ธฐ๋ณธํ ๋ฉค๋ฒ ๋ณ์์ ์ ๊ทผํ ๊ฒฝ์ฐ์๋ ์ฐ์ฐ์ ํ ์ ์๋ค.
โ๏ธ ์ฝ๊ฒ ์ดํดํ๋ ํ
๊ธฐ๋ณธํ์ ์ ์ธํ ๋๋จธ์ง๋ ๋ชจ๋ ์ฐธ์กฐํ์ด๋ค.
๊ธฐ๋ณธํ์ ์๋ฌธ์๋ก ์์ํ๋ค. int, long, double, boolean ๋ชจ๋ ์๋ฌธ์๋ก ์์ํ๋ค.
๊ธฐ๋ณธํ์ Java๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋ฐ์ดํฐ ํ์ ์ด๋ค. ์ด๋ฌํ ๊ธฐ๋ณธํ์ ๊ฐ๋ฐ์๊ฐ ์๋ก ์ ์ํ ์ ์๋ค.
๊ฐ๋ฐ์๋ ์ฐธ์กฐํ์ธ ํด๋์ค๋ง ์ง์ ์ ์ํ ์ ์๋ค.
ํด๋์ค๋ ๋๋ฌธ์๋ก ์์ํ๋ค. Student
ํด๋์ค๋ ๋ชจ๋ ์ฐธ์กฐํ์ด๋ค.
โ๏ธ ์ฐธ๊ณ - String
Java์์ String์ ํน๋ณํ๋ค. String์ ์ฌ์ค์ ํด๋์ค์ด๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐํ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๊ธฐ๋ณธํ์ฒ๋ผ ๋ฌธ์ ๊ฐ์ ๋ฐ๋ก ๋์ ํ ์ ์๋ค.
๋ฌธ์๋ ๋งค์ฐ ์์ฃผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ Java์์ ํน๋ณํ๊ฒ ํธ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ 2 - ๋ณ์ ๋์
๋์์น : Java๋ ํญ์ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํด์ ๋์ ํ๋ค.
Java์์ ๋ณ์์ ๊ฐ์ ๋์
ํ๋ ๊ฒ์ ๋ณ์์ ๋ค์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธํ, ์ฐธ์กฐํ ๋ชจ๋ ํญ์ ๋ณ์์ ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๊ธฐ๋ณธํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๊ณ , ์ฐธ์กฐํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๊ธฐ๋ณธํ์ ๋ณ์์ ๊ฐ์ ๋์
ํ๋๋ผ๋ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ด ๋ณ์์ ๋ฐ๋ก ๋ค์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฐ๋ง ๋ณต์ฌํด์ ๋์
ํ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ฐธ์กฐํ์ ๊ฒฝ์ฐ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด์ ์์น๋ฅผ ๊ฐ๋ฅดํค๋ ์ฐธ์กฐ๊ฐ๋ง ๋ณต์ฌ๋๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ์ค์ ๊ฑด๋ฌผ์ด ๋ณต์ฌ๊ฐ ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฑด๋ฌผ์ ์์น์ธ ์ฃผ์๋ง ๋ณต์ฌ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ ๊ฑด๋ฌผ์ ์ฐพ์๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ๋ ๋์ด๋ ๋ฟ์ด๋ค.
๊ธฐ๋ณธํ๊ณผ ๋ณ์ ๋์
VarChange1
package ref;
public class VarChange1 {
public static void main(String[] args) {
int a = 10;
int b = a;
System.out.println("a = " + a);
System.out.println("b = " + b);
// a ๋ณ๊ฒฝ
a = 20;
System.out.println("๋ณ๊ฒฝ a = 20");
System.out.println("a = " + a);
System.out.println("b = " + b);
// b ๋ณ๊ฒฝ
b = 30;
System.out.println("๋ณ๊ฒฝ b = 30");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
์ฌ๊ธฐ์ ํต์ฌ์ int b = a๋ผ๊ณ ํ์ ๋ ๋ณ์์ ๋ค์ด์๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค๋ ์ ์ด๋ค. ๋ฐ๋ผ์ a = 20, b = 30์ด๋ผ๊ณ ํ์ ๋ ๊ฐ๊ฐ ๋ณธ์ธ์ ๊ฐ๋ง ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฐธ์กฐํ๊ณผ ๋ณ์ ๋์
Data
package ref;
public class Data {
int value;
}
VarChange2
package ref;
public class VarChange2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;
System.out.println("dataA ์ฐธ์กฐ๊ฐ=" + dataA); // ref.Data@41629346
System.out.println("dataB ์ฐธ์กฐ๊ฐ=" + dataB); // ref.Data@41629346
System.out.println("dataA.value = " + dataA.value); // 10
System.out.println("dataB.value = " + dataB.value); // 10
//dataA ๋ณ๊ฒฝ
dataA.value = 20;
System.out.println("๋ณ๊ฒฝ dataA.value = 20");
System.out.println("dataA.value = " + dataA.value); // 20
System.out.println("dataB.value = " + dataB.value); // 20
//dataB ๋ณ๊ฒฝ
dataB.value = 30;
System.out.println("๋ณ๊ฒฝ dataB.value = 30");
System.out.println("dataA.value = " + dataA.value); // 30
System.out.println("dataB.value = " + dataB.value); // 30
}
}
๋ณ์์ ๋์
์ ๋ณ์์ ๋ค์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค. ๋ณ์ dataA์๋ ์ฐธ์กฐ๊ฐ x001์ด ๋ค์ด ์๋ค.
๋ณ์ dataA์ ๋ค์ด์๋ ์ฐธ์กฐ๊ฐ x001์ ๋ณต์ฌํด์ ๋ณ์ dataB์ ๋์
ํ๋ค.
์ฐธ๊ณ ๋ก ๋ณ์ dataA๊ฐ ๊ฐ๋ฅดํค๋ ์ธ์คํด์ค๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ค! ๋ณ์์ ๋ค์ด์๋ ์ฐธ์กฐ๊ฐ๋ง ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
Data dataB = dataA๋ผ๊ณ ํ์ ๋ ๋ณ์์ ๋ค์ด๊ฐ๋ ๊ฐ์ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๊ฐ์ด ์ฐธ์กฐ๊ฐ์ด๋ค.
๋ฐ๋ผ์ dataA์ dataB๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ง๊ฒ ๋๊ณ , ๋ ๋ณ์๋ ๊ฐ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ 3 - ๋ฉ์๋ ํธ์ถ
๋์์น : ์๋ฐ๋ ํญ์ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํด์ ๋์ ํ๋ค.
Java์์ ๋ณ์์ ๊ฐ์ ๋์
ํ๋ ๊ฒ์ ๋ณ์์ ๋ค์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธํ, ์ฐธ์กฐํ ๋ชจ๋ ํญ์ ๋ณ์์ ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๊ธฐ๋ณธํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๊ณ , ์ฐธ์กฐํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๋ฉ์๋ ํธ์ถ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉํ๋ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)๋ ๊ฒฐ๊ตญ ๋ณ์์ผ ๋ฟ์ด๋ค.
๋ฐ๋ผ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ๋ ์์ ์ค๋ช
ํ ๋ด์ฉ๊ณผ ๊ฐ์ด ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
๊ธฐ๋ณธํ๊ณผ ๋ฉ์๋ ํธ์ถ
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("๋ฉ์๋ ํธ์ถ ์ : a = " + a); // 10
changePrimitive(a);
System.out.println("๋ฉ์๋ ํธ์ถ ํ: a = " + a); // 10
}
static void changePrimitive(int x) {
x = 20;
}
}
์ฐธ์กฐํ๊ณผ ๋ฉ์๋ ํธ์ถ
package ref;
public class MethodChage2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println("๋ฉ์๋ ํธ์ถ ์ : dataA.value = " + dataA.value); // 10
changeReference(dataA);
System.out.println("๋ฉ์๋ ํธ์ถ ํ: dataA.value = " + dataA.value); // 20
}
static void changeReference(Data dataX) {
dataX.value = 20;
}
}
๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๋ฉ์๋ ํธ์ถ
Java์์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)๋ ํญ์ ๊ฐ์ ์ํด ์ ๋ฌ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๊ฐ์ด ์ค์ ๊ฐ์ด๋, ์ฐธ์กฐ(๋ฉ๋ชจ๋ฆฌ ์ฃผ์) ๊ฐ์ด๋์ ๋ฐ๋ผ ๋์์ด ๋ฌ๋ผ์ง๋ค.
- ๊ธฐ๋ณธํ : ๋ฉ์๋๋ก ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด, ํด๋น ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค. ๋ฉ์๋ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)์ ๊ฐ์ ๋ณ๊ฒฝํด๋, ํธ์ถ์์ ๋ณ์ ๊ฐ์๋ ์ํฅ์ด ์๋ค.
- ์ฐธ์กฐํ : ๋ฉ์๋๋ก ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด, ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค. ๋ฉ์๋ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ํธ์ถ์์ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋๋ค.
์ฐธ์กฐํ๊ณผ ๋ฉ์๋ ํธ์ถ - ํ์ฉ
ClassStart3
package class1;
public class ClassStart3 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "ํ์1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "ํ์2";
student2.age = 16;
student2.grade = 80;
System.out.println("์ด๋ฆ: " + student1.name + " ๋์ด: " + student1.age + " ์ฑ์ : " + student1.grade);
System.out.println("์ด๋ฆ: " + student2.name + " ๋์ด: " + student2.age + " ์ฑ์ : " + student2.grade);
}
}
์ค๋ณต์ ๋ฉ์๋๋ฅผ ํตํด์ ์์ฝ๊ฒ ์ ๊ฑฐํ ์ ์๋ค.
๋ฉ์๋์ ๊ฐ์ฒด ์ ๋ฌ
Student
package ref;
public class Student {
String name;
int age;
int grade;
}
Method1
package ref;
public class Method1 {
public static void main(String[] args) {
Student student1 = new Student();
initStudent(student1, "ํ์1", 15, 90);
Student student2= new Student();
initStudent(student2, "ํ์2", 16, 80);
printStudent(student1);
printStudent(student2);
}
static void initStudent(Student student, String name, int age, int grade) {
student.name = name;
student.age = age;
student.grade = grade;
}
static void printStudent(Student student) {
System.out.println("์ด๋ฆ: " + student.name + " ๋์ด: " + student.age + " ์ฑ์ : " + student.grade);
}
}
์ฐธ์กฐํ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฐธ์กฐ๊ฐ์ ์ ๋ฌํ๋ค.
๋ฐ๋ผ์ ๋ฉ์๋ ๋ด๋ถ์์ ์ ๋ฌ๋ ์ฐธ์กฐ๊ฐ์ ํตํด ๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋, ๊ฐ์ ์ฝ์ด์ ์ฌ์ฉํ ์ ์๋ค.
- initStudent(Student student, ...) : ์ ๋ฌํ ํ์ ๊ฐ์ฒด์ ํ๋์ ๊ฐ์ ์ค์ ํ๋ค.
- printStudent(Student student) : ์ ๋ฌํ ํ์ ๊ฐ์ฒด์ ํ๋ ๊ฐ์ ์ฝ์ด์ ์ถ๋ ฅํ๋ค.
โ๏ธ ์ฃผ์!
package ref; import class1.Student; public class Method1 { ... }โ
import class1.Student; ์ด ์ ์ธ๋์ด ์์ผ๋ฉด ์๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด class1 ํจํค์ง์์ ์ ์ธํ Student๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ ๊ทผ ์ ์ด์ ๋๋ฌธ์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ์ ์ธ๋์ด ์๋ค๋ฉด ์ญ์ ํ์. ์ญ์ ํ๋ฉด ๊ฐ์ ํจํค์ง์ ์๋ ref.Student๋ฅผ ์ฌ์ฉํ๋ค.
Method2
package ref;
public class Method2 {
public static void main(String[] args) {
Student student1 = createStudent("ํ์1", 15, 90);
Student student2 = createStudent("ํ์2", 16, 80);
printStudent(student1);
printStudent(student2);
}
static Student createStudent(String name, int age, int grade) {
Student student = new Student();
student.name = name;
student.age = age;
student.grade = grade;
return student;
}
static void printStudent(Student student) {
System.out.println("์ด๋ฆ: " + student.name + " ๋์ด: " + student.age + " ์ฑ์ : " + student.grade);
}
}
createStudent( )๋ผ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ถ๋ถ๋ ์ด ๋ฉ์๋ ์์ ํจ๊ป ํฌํจํ๋ค. ์ด์ ์ด ๋ฉ์๋ ํ๋๋ก ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐ๊ฐ ์ค์ ์ ๋ชจ๋ ์ฒ๋ฆฌํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ฉ์๋ ์์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ๋ฉ์๋ ๋ฐ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋๋ ค์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ ๋ฉ์๋ ๋ฐ์์ ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฉ์๋๋ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ(return)์ ํ ์ ์๋ค. ๋ฉ์๋์ ๋ฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ๋ง๋ค์ด์ง ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋ฐํํ๋ฉด ๋๋ค.
๋ณ์์ ์ด๊ธฐํ
๋ณ์์ ์ข ๋ฅ
- ๋ฉค๋ฒ ๋ณ์(ํ๋) : ํด๋์ค์ ์ ์ธ
- ์ง์ญ ๋ณ์ : ๋ฉ์๋์ ์ ์ธ, ๋งค๊ฐ๋ณ์๋ ์ง์ญ ๋ณ์์ ํ ์ข ๋ฅ์ด๋ค.
๋ฉค๋ฒ ๋ณ์, ํ๋ ์์
public class Student {
String name;
int age;
int grade;
}
์ง์ญ ๋ณ์ ์์
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
student1 = new Student();
Student student2 = new Student();
}
}
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("๋ฉ์๋ ํธ์ถ ์ : a = " + a); // 10
changePrimitive(a);
System.out.println("๋ฉ์๋ ํธ์ถ ํ: a = " + a); // 10
}
static void changePrimitive(int x) {
x = 20;
}
}
a, x(๋งค๊ฐ๋ณ์)๋ ์ง์ญ ๋ณ์์ด๋ค.
์ง์ญ ๋ณ์๋ ์ด๋ฆ ๊ทธ๋๋ก ํน์ ์ง์ญ์์๋ง ์ฌ์ฉ๋๋ ๋ณ์๋ผ๋ ๋ป์ด๋ค. ์๋ฅผ ๋ค์ด์ x๋ changePrimitive( ) ๋ฉ์๋์ ๋ธ๋ก์์๋ง ์ฌ์ฉ๋๋ค. changePrimitive( ) ๋ฉ์๋๊ฐ ๋๋๋ฉด ์ ๊ฑฐ๋๋ค. a ๋ณ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. main( ) ๋ฉ์๋๊ฐ ๋๋๋ฉด ์ ๊ฑฐ๋๋ค.
๋ณ์์ ๊ฐ ์ด๊ธฐํ
- ๋ฉค๋ฒ ๋ณ์ : ์๋ ์ด๊ธฐํ
- ์ธ์คํด์ค์ ๋ฉค๋ฒ ๋ณ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์๋์ผ๋ก ์ด๊ธฐํ๋๋ค.
- ์ซ์(int) = 0, boolean = false, ์ฐธ์กฐํ = null(null ๊ฐ์ ์ฐธ์กฐํ ๋์์ด ์๋ค๋ ๋ป์ผ๋ก ์ฌ์ฉ๋๋ค.)
- ๊ฐ๋ฐ์๊ฐ ์ด๊ธฐ๊ฐ์ ์ง์ ์ง์ ํ ์ ์๋ค.
- ์ง์ญ ๋ณ์ : ์๋ ์ด๊ธฐํ
- ์ง์ญ ๋ณ์๋ ํญ์ ์ง์ ์ด๊ธฐํํด์ผ ํ๋ค.
InitData
package ref;
public class InitMain {
public static void main(String[] args) {
InitData initData = new InitData();
System.out.println("value1 = " + initData.value1);
System.out.println("value2 = " + initData.value2);
}
}
value1์ ์ด๊ธฐ๊ฐ์ ์ง์ ํ์ง ์์์ง๋ง ๋ฉค๋ฒ ๋ณ์๋ ์๋์ผ๋ก ์ด๊ธฐํ๋๋ค. ์ซ์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
value2๋ 10์ผ๋ก ์ด๊ธฐ๊ฐ์ ์ง์ ํด๋์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ 10์ผ๋ก ์ด๊ธฐํ๋๋ค.
null
์ฐธ์กฐํ ๋ณ์์๋ ํญ์ ๊ฐ์ฒด๊ฐ ์๋ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์ด ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ ์์ง ๊ฐ๋ฆฌํค๋ ๋์์ด ์๊ฑฐ๋, ๊ฐ๋ฆฌํค๋ ๋์์ ๋์ค์ ์
๋ ฅํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ฐธ์กฐํ ๋ณ์์์ ์์ง ๊ฐ๋ฆฌํค๋ ๋์์ด ์๋ค๋ฉด null์ด๋ผ๋ ํน๋ณํ ๊ฐ์ ๋ฃ์ด๋ ์ ์๋ค. null์ ๊ฐ์ด ์กด์ฌํ์ง ์๋, ์๋ค๋ ๋ป์ด๋ค.
null ๊ฐ ํ ๋น
package ref;
public class Data {
int value;
}
NullMain1
package ref;
public class NullMain1 {
public static void main(String[] args) {
Data data = null;
System.out.println("1. data = " + data);
data = new Data();
System.out.println("2. data = " + data);
data = null;
System.out.println("3. data = " + data);
}
}
NullPointerException
๋ง์ฝ ์ฐธ์กฐ๊ฐ ์์ด ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น?
์ด ๊ฒฝ์ฐ NullpointerException์ด๋ผ๋ ์์ธ๊ฐ ๋ฐ์ํ๋๋ฐ, ๊ฐ๋ฐ์๋ฅผ ๊ฐ์ฅ ๋ง์ด ๊ดด๋กญํ๋ ์์ธ์ด๋ค.
NullPointerException์ ์ด๋ฆ ๊ทธ๋๋ก null์ ๊ฐ๋ฆฌํค๋ค(Pointer)์ธ๋ฐ, ์ด๋ ๋ฐ์ํ๋ ์์ธ(Exception)๋ค. null์ ์๋ค๋ ๋ป์ด๋ฏ๋ก ๊ฒฐ๊ตญ ์ฃผ์๊ฐ ์๋ ๊ณณ์ ์ฐพ์๊ฐ ๋ ๋ฐ์ํ๋ ์์ธ์ด๋ค.
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋๋ .(dot)์ ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํด์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฐธ์กฐ๊ฐ์ด null์ด๋ผ๋ฉด ๊ฐ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก, ์ฐพ์๊ฐ ์ ์๋ ๊ฐ์ฒด(์ธ์คํด์ค)๊ฐ ์๋ค. NullPointerException์ ์ด์ฒ๋ผ null์ .(dot)์ ์ฐ์์ ๋ ๋ฐ์ํ๋ค.
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = null;
data.value = 10; // NullPointerException ์์ธ ๋ฐ์
System.out.println("data = " + data.value);
}
}
null ๊ฐ์ ์ฐธ์กฐํ ์ฃผ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐํ ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด java.lang.NullPointerException์ด ๋ฐ์ํ๊ณ , ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๋ค.
์ฐธ๊ณ ๋ก ์์ธ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ค์ ๋ก์ง์ ์ํ๋์ง ์๋๋ค.
๋ฉค๋ฒ ๋ณ์์ null
์ง์ญ ๋ณ์์ null ๋ฌธ์ ๋ฅผ ํ์ ํ๋ ๊ฒ์ด ์ด๋ ต์ง ์๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ฉค๋ฒ ๋ณ์๊ฐ null์ธ ๊ฒฝ์ฐ์๋ ์ฃผ์๊ฐ ํ์ํ๋ค.
package ref;
public class NullMain3 {
public static void main(String[] args) {
BigData bigData = new BigData();
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data);
System.out.println("bigData.data.value = " + bigData.data.value);
}
}
- bigData.count๋ฅผ ์ถ๋ ฅํ๋ฉด 0์ด ์ถ๋ ฅ๋๋ค.
- bigData.data๋ฅผ ์ถ๋ ฅํ๋ฉด ์ฐธ์กฐ๊ฐ์ธ null์ด ์ถ๋ ฅ๋๋ค. ์ด ๋ณ์๋ ์์ง ์๋ฌด๊ฒ๋ ์ฐธ์กฐํ๊ณ ์์ง ์๋ค.
- bigData.data.value๋ฅผ ์ถ๋ ฅํ๋ฉด data์ ๊ฐ์ด null์ด๋ฏ๋ก null์ .(dot)์ ์ฐ๊ฒ ๋๊ณ , ๋ฐ๋ผ์ ์ฐธ์กฐํ ๊ณณ์ด ์์ผ๋ฏ๋ก NullPointerException ์์ธ๊ฐ ๋ฐ์ํ๋ค.
package ref;
public class NullMain4 {
public static void main(String[] args) {
BigData bigData = new BigData();
bigData.data = new Data();
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data);
// NullPointerException
System.out.println("bigData.data.value = " + bigData.data.value);
}
}
์ ๋ฆฌ
๋์์น : ์๋ฐ๋ ํญ์ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํด์ ๋์ ํ๋ค.
Java์์ ๋ณ์์ ๊ฐ์ ๋์
ํ๋ ๊ฒ์ ๋ณ์์ ๋ค์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธํ, ์ฐธ์กฐํ ๋ชจ๋ ํญ์ ๋ณ์์ ์๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๊ธฐ๋ณธํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ค์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๊ณ , ์ฐธ์กฐํ์ด๋ฉด ๋ณ์์ ๋ค์ด ์๋ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ๋์
ํ๋ค.
๊ธฐ๋ณธํ์ด๋ ์ฐธ์กฐํ์ด๋ ๋ณ์์ ๊ฐ์ ๋์
ํ๋ ๋ฐฉ์์ ๊ฐ๋ค. ํ์ง๋ง ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๋ฐ๋ผ ๋์ํ๋ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ - ๊ธฐ๋ณธ
- ์๋ฐ์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฅ ํฌ๊ฒ ๋ณด๋ฉด ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ผ๋ก ๋๋ ์ ์๋ค.
- ๊ธฐ๋ณธํ์ ์ ์ธํ ๋๋จธ์ง ๋ณ์๋ ๋ชจ๋ ์ฐธ์กฐํ์ด๋ค. ํด๋์ค์ ๋ฐฐ์ด์ ๋ค๋ฃจ๋ ๋ณ์๋ ์ฐธ์กฐํ์ด๋ค.
- ๊ธฐ๋ณธํ ๋ณ์๋ ๊ฐ์ ์ง์ ์ ์ฅํ์ง๋ง, ์ฐธ์กฐํ ๋ณ์๋ ์ฐธ์กฐ(์ฃผ์)๋ฅผ ์ ์ฅํ๋ค.
- ๊ธฐ๋ณธํ ๋ณ์๋ ์ฐ์ ์ฐ์ฐ์ ์ํํ ์ ์์ง๋ง, ์ฐธ์กฐํ ๋ณ์๋ ์ฐ์ ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
- ๊ธฐ๋ณธํ ๋ณ์๋ null์ ํ ๋นํ ์ ์์ง๋ง, ์ฐธ์กฐํ ๋ณ์๋ null์ ํ ๋นํ ์ ์๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ - ๋์
- ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ ๋ชจ๋ ๋์ ์ ๋ณ์ ์์ ์๋ ๊ฐ์ ์ฝ๊ณ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
- ๊ธฐ๋ณธํ์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๊ณ , ์ฐธ์กฐํ์ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค! ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ ๊ฒ์ด๋ค!
๋ฐ๋ผ์ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฐธ์กฐํ ์ ์๋ค. - ๋ณ์์ ์ด๋ค ๊ฐ์ด ๋ค์ด์๋ ๊ฐ์ ๊ทธ ๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
๊ธฐ๋ณธํ vs ์ฐธ์กฐํ - ๋ฉ์๋ ํธ์ถ
- ๋ฉ์๋ ํธ์ถ์ ๊ธฐ๋ณธํ์ ๋ฉ์๋ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)์ ๊ฐ์ ๋ณ๊ฒฝํด๋ ํธ์ถ์์ ๋ณ์ ๊ฐ์๋ ์ํฅ์ด ์๋ค.
- ๋ฉ์๋ ํธ์ถ์ ์ฐธ์กฐํ์ ๋ฉ์๋ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ํธ์ถ์์ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋๋ค.
'Today I Learned(TIL) > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ๊ธฐ๋ณธํธ ๊ฐ์_์์ฑ์ (0) | 2024.11.26 |
---|---|
Java ๊ธฐ๋ณธํธ ๊ฐ์_๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2024.11.26 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_ํด๋์ค์ ๋ฐ์ดํฐ (1) | 2024.11.25 |
Java ์ ๋ฌธ ๊ฐ์_๋ฐฐ์ด (0) | 2024.11.07 |
Java ์ ๋ฌธ ๊ฐ์_ํ๋ จ (4) | 2024.11.06 |