6-5ํด๋์ค(์ธ์คํด์ค ๋ฉค๋ฒ์ ์ ์ ๋ฉค๋ฒ)
์ธ์คํด์ค ๋ฉค๋ฒ : ์ธ์คํด์ค ๋ฉค๋ฒ๋ ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์์ฑํ ํ ์ฌ์ฉํ ์ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๋งํ๋๋ฐ, ์ด๋ค์ ๊ฐ๊ฐ ์ธ์คํด์ค ํ๋, ์ธ์คํด์ค ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ธ์คํด์ค ํ๋์ ๋ฉ์๋๋ ๊ฐ์ฒด์ ์์๋ ๋ฉค๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ด๋ ์ฌ์ฉํ ์ ์๋ค.
this : ๊ฐ์ฒด ์ธ๋ถ์์ ์ธ์คํด์ค ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฐธ์กฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฒด ๋ด๋ถ์์๋ ์ธ์คํด์ค ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํด this๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์์ ์ '๋'๋ผ๊ณ ๊ฐ๋ฆฌํค๋ฏ์ด ๊ฐ์ฒด๋ ์์ ์ this๋ผ๊ณ ํ๋ค. ๋ฐ๋ผ์ this.model์ ์์ ์ด ๊ฐ์ง๊ณ ์๋ model ํ๋๋ผ๋ ๋ป์ด๋ค. this๋ ์ฃผ๋ก ์์ฑ์์ ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์ ์ด๋ฆ์ด ํ๋์ ๋์ผํ ๊ฒฝ์ฐ, ์ธ์คํด์ค ๋ฉค๋ฒ์ธ ํ๋์์ ๋ช ์ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
ex)
Car(String model) {
this.model = model;
}
void setModel(String model){
this.model = model;
}
์ ์ ๋ฉค๋ฒ(static) : ์ ์ ์ '๊ณ ์ ๋'์ด๋ ์๋ฏธ์ด๋ค. ์ ์ ๋ฉค๋ฒ๋ ํด๋์ค์ ๊ณ ์ ๋ ๋ฉค๋ฒ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๋งํ๋ค. ์ด๋ค์ ๊ฐ๊ฐ ์ ์ ํ๋, ์ ์ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ์ ๋ฉค๋ฒ ์ ์ธ: ์ ์ ํ๋์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ ค๋ฉด ํ๋์ ๋ฉ์๋ ์ ์ธ ์ static ํค์๋๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ถ์ด๋ฉด ๋๋ค.
์ ์ ๋ฉค๋ฒ ์ฌ์ฉ
ex)
public class Calculator {
static double pi = 3.14159;
static int plus(int x, int y) {...}
static int minus(int x, int y) {...}
}
์ ์ ํ๋ pi์ ์ ์ ๋ฉ์๋ plus(), minus()๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
double result1 = 10 * 10 * Calcultor.pi;
int result2 = Calculator.plus(10, 5);
int result3 = Calculator.minus(10, 5);
์ ์ ํ๋์ ์ ์ ๋ฉ์๋๋ ์์น์ ์ผ๋ก ์์ฒ๋ผ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ ๊ทผํด์ผ ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฒฃ ์ฐธ์กฐ ๋ณ์๋ก๋ ๊ฐ๋ฅํ๋ค.
Calculator myCalcu = new Calculator();
double result1 = 10 * 10 * myCalcu.pi;
int result2 = myCalcu.plus(10, 5);
int result3 = myCalcu.minus(10, 5);
ํ์ง๋ง, ์ ์ ์์๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ข๋ค.
์ ์ ๋ฉ์๋ ์ ์ธ ์ ์ฃผ์ํ ์
๊ฐ์ฒด๊ฐ ์์ด๋ ์คํ๋๋ค๋ ํน์ง ๋๋ฌธ์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ธํ ๋๋ ์ด๋ค ๋ด๋ถ์ ์ธ์คํด์ค ํ๋๋ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ํ ๊ฐ์ฒด ์์ ์ ์ฐธ์กฐ์ธ this ํค์๋๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
public class ClassName {
//์ธ์คํด์ค ํ๋์ ๋ฉ์
int field1;
void method1() {...}
//์ ์ ํ๋์ ๋ฉ์๋
static int field2;
static void method2() {...}
//์ ์ ๋ฉ์๋
static void method3() {
this.field1 = 10; //(x)
this.method1() //(x)
field2 = 10;//(o) --> ๊ฐ์ static์ ๊ฐ์ class์ผ ๊ฒฝ์ฐ ๋ฐ๋ก ์ฌ์ฉ๊ฐ๋ฅ
method2();//(o)
}
}
์ ์ ๋ฉ์๋์์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ๋จผ์ ์์ฑํ๊ณ ์ฐธ์กฐ ๋ณ์๋ก ์ ๊ทผํด์ผ ํ๋ค.
static void method3() {
ClassName obj = new ClassName();
obj.field1 = 10;
obj.method1();
}
์ฑ๊ธํค
๊ฐ๋ ์ ์ฒด ํ๋ก๊ทธ๋จ์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ง ๋ง๋ค๋๋ก ๋ณด์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋จ ํ๋๋ง ์์ฑ๋๋ค๊ณ ํด์ ์ด ๊ฐ์ฒด๋ฅผ ์ฑํดํค์ด๋ผ๊ณ ํ๋ค.
์ฑ๊ธํค์ ๋ง๋ค๋ ค๋ฉด ํด๋์ค ์ธ๋ถ์์ new ์ฐ์ฐ์๋ก ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋๋ก ๋ง์์ผ ํ๋ค. ์์ฑ์๋ฅผ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋๋ก ํ๋ ค๋ฉด ์์ฑ์ ์์ private ์ ๊ทผ ์ ํ์๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ ํ์ ์ธ ์ ์ ํ๋๋ฅผ ํ๋ ์ ์ธํ๊ณ ์์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ด๊ธฐํํ๋ค. ์ฐธ๊ณ ๋ก ํด๋์ค ๋ด๋ถ์์๋ new ์ฐ์ฐ์๋ก ์์ฑ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค. ์ ์ ํ๋๋ private ์ ๊ทผ ์ ํ์๋ฅผ ๋ถ์ฌ ์ธ๋ถ์์ ํ๋๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๋ง๋๋ค. ๋์ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋ ์ ์ ๋ฉ์๋์ธ getInstance()๋ฅผ ์ ์ธํ๊ณ ์ ์ ํ๋์์ ์ฐธ์กฐํ๊ณ ์๋ ์์ ์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํด์ค๋ค.
ex)
//์ ์ ํ๋
private static ํด๋์ค singleton = new ํด๋์ค();
//์์ฑ์
pirvate ํด๋์ค() {}
//์ ์ ๋ฉ์๋
static ํด๋์ค getInstance() {
return singleton;
}
์ด๋ ๊ฒ ํ๋ฉด
ํด๋์ค ๋ณ์1 = ํด๋์ค.getInstance();
ํด๋์ค ๋ณ์2 = ํด๋์ค.getInstance();
์์, ๋ณ์1 ์ด๋ ๋ณ์2 ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
final ํ๋์ ์์
final ํ๋ : final์ '์ต์ข ์ '์ด๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด final ํ๋๋ ์ต์ข ์ ์ธ ํ๋๋ ๋ป์ธ๋ฐ, final ํ๋๋ ์ด๊ธฐ๊ฐ์ด ์ ์ฅ๋๋ฉด ์ด๊ฒ์ด ์ต์ข ์ ์ธ ๊ฐ์ด ๋์ด์ ํ๋ก๊ทธ๋จ ์คํ ๋์ค์ ์์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์์: ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ณ์ ๊ฐ์ ์์(static final)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ถ๋ณ์ ๊ฐ์ ์ํ์์ ์ฌ์ฉ๋๋ ์์ฃผ์จ ํ์ด๋ ์ง๊ตฌ์ ๋ฌด๊ฒ ๋ฐ ๋๋ ๋ฑ์ด ํด๋น๋๋ค. ์ด๋ฐ ๋ถ๋ณ์ ๊ฐ์ ์ ์ฅํ๋ ํ๋๋ฅผ ์๋ฐ์์๋ ์์(constant)๋ผ๊ณ ํ๋ค.
final ํ๋๋ ํ ๋ฒ ์ด๊ธฐํ ๋๋ฉด ์์ ํ ์ ์๋ ํ๋์ด์ง๋ง, ์์๊ฐ ์๋ ์ด์ ๋ ์์๋ ๋ถ๋ณ์ ๊ฐ์ด๋ฉฐ, ๊ฐ์ฒด๋ง๋ค ์ ์ฅํ ํ์๊ฐ ์๋ ๊ณต์ฉ์ฑ์ ๋ ๊ณ ์์ผ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์์๋ static์ด๋ฉด์ final์ด์ด์ผ ํ๋ค. static final ํ๋๋ ๊ฐ์ฒด๋ง๋ค ์กด์ฌํ์ง ์๊ณ ํด๋์ค์๋ง ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋ฒ ์ด๊ธฐ๊ฐ์ด ์ ์ฅ๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.
*์์ ์ด๋ฆ์ ๋ชจ๋ ๋๋ฌธ์๋ก ์์ฑํ๋ ๊ฒ์ด ๊ด๋ก์ด๋ค. ๋ง์ฝ ์๋ก ๋ค๋ฅธ ๋จ์ด๊ฐ ํผํฉ๋ ์ด๋ฆ์ด๋ผ๋ฉด ์ธ๋๋ฐ(_)๋ก ๋จ์ด๋ค์ ์ฐ๊ฒฐํด์ค๋ค.
'๊ฐ๋ฐ ์ง์, ์คํฌ๋ฆฝํธ > Java ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7-1.์์(์์) (1) | 2023.10.07 |
---|---|
6-6ํด๋์ค(ํจํค์ง์ ์ ๊ทผ ์ ํ์) (1) | 2023.10.03 |
6-4ํด๋์ค(๋ฉ์๋) (1) | 2023.10.02 |
6-3ํด๋์ค(์์ฑ์) (0) | 2023.09.30 |
6-2ํด๋์ค(ํ๋) (0) | 2023.09.29 |
๋๊ธ