728x90
Goal
1. ์์กด์ฑ / ์์กด๊ด๊ณ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
2. ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๋ ์ด์ ์ค๋ช ํ๊ธฐ
์์กด์ฑ / ์์กด๊ด๊ณ๋?
A๊ฐ B๋ฅผ ์์กดํ๋ค = B๊ฐ ๋ณํ๋ฉด A์๊ฒ๋ ์ํฅ์ ๋ฏธ์น๋ค
์๋ฐ์์ ํด๋์ค ๊ฐ ์์กด๊ด๊ณ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๋ก ๋ณผ ์ ์๋ค.
๋ฐฉ๋ฒ | ์ค๋ช | ๊ถ์ฅ |
@Autowired | ํ๋ ์ฃผ์ ์ ๋ฐฉ๋ฒ | ์๋ ์ฌ์ฉํ์๋๋ฐ ์ด์ ๋ IntelliJ์์ ์์ฑ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ ์ฐ๋ผ๊ณ ๊ฒฝ๊ณ ๋ธ |
@Setter | ์์ ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ | Public ๋ฉ์๋๋ฅผ ํตํด ์๋ฌด๋ ์์ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ฑ ๋ฌธ์ ๊ฐ ์ |
@RequiredArgsConstructor | ์์ฑ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ | ***๊ฐ์ฅ ๊ถ์ฅ ํ๋ ๋ฐฉ๋ฒ*** |
1. ํ๋ ์ฃผ์ ์ ๋ฐฉ๋ฒ
- new ํค์๋ ์จ์ ์์กดํ๊ฒ ๋๋ฉด Driver๊ฐ ์์ฑ๋ ๋ ์ด๋ฏธ ์ด๋ค ์ฐจ๋ฅผ ๊ฐ์ง๋์ง ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ ์ฝ๋๊ฐ ์ ์ฐํ์ง ๋ชปํ๋ค!!
public interface Car { // ์ฐจ ์ธํฐํ์ด์ค
String getCarName();
}
public class Ferrari implements Car { // ์ฐจ ์ข
๋ฅ 1
@Override
public String getCarName() {
return "ํ๋ผ๋ฆฌ ์
๋๋ค.";
}
}
public class Porsche implements Car { // ์ฐจ ์ข
๋ฅ 2
@Override
public String getCarName() {
return "ํฌ๋ฅด์ ์
๋๋ค.";
}
}
public class Driver {
private Car car = new Ferrari(); // new ๋ผ๋ ํค์๋ ์จ์ Driver๋ Car์ ์์กดํ๊ฒ ๋จ
public String printCar() {
return "์ ์ ์ฐจ๋ " + car.getCarName;
}
}
๋๋
public class Driver {
@Autowired
private Car car;
public String printCar() {
return "์ ์ ์ฐจ๋ " + car.getCarName;
}
}
2. ์์ ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ
- ์์ ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์ ์ ํ๋ฉด Driver ๊ฐ์ฒด๊ฐ ์ด๋ค Car๋ฅผ ๊ฐ์ง๋์ง setCar() ๋ฉ์๋๋ฅผ ํตํด ์ฃผ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค
- ํ์ง๋ง ๋ฌธ์ ๋ Car๋ฅผ ์ฃผ์ ํ์ง ์์๋ Driver ๊ฐ์ฒด๊ฐ ์์ฑ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ printCar() ๋ฉ์๋๋ฅผ ํธ์ถ ํ์ ๋ NullPointerException์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค
- ๊ทธ๋์ ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค!
public class Driver {
private Car car;
// ์์ ์(setter)๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
public void setCar (Car car) {
this.car = car;
}
// ์์ ์๋ฅผ ํตํด Car๋ฅผ ์ฃผ์
ํ์ง ์์๋ Driver ๊ฐ์ฒด๊ฐ ์์ฑ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
// ์ด๋ printCar() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด NullPointerException์ด ๋ฐ์ํจ
public String printCar() {
return "์ ์ ์ฐจ๋ " + car.getCarName;
}
}
3. ์์ฑ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ
- ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์ ์ ํ๋ฉด Driver ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ด๋ค ์ฐจ๋ฅผ ๊ฐ์ง๋์ง ์ธ๋ถ์์ ์ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋ ์ ์ฐํด์ง๊ณ ์์ ์ ์ฃผ์ ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋ค!
public class Driver {
private final Car car;
// ์์ฑ์(constructor)๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
public Driver (Car car) { // ์ธ๋ถ์์ Driver ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฐจ ์ข
๋ฅ๋ฅผ ์ ํํ ์ ์์!
this.car = car;
}
public String printCar() {
return "์ ์ ์ฐจ๋ " + car.getCarName;
}
}
์์ฑ์ ์ฃผ์ ์ ๋ฐฉ๋ฒ ๊ถ์ฅ ์ด์
- null์ ์ฃผ์ ํ์ง ์๋ ํ printCar()์์ NullPointerException์ด ๋ฐ์ํ์ง ์๋๋ค
- ์์กด๊ด๊ณ ์ฃผ์ ์ ํ์ง ์์ผ๋ฉด Driver ๊ฐ์ฒด๋ฅผ ์์ ์์ฑํ ์๊ฐ ์๋ค. ๊ทธ๋์ ์ปดํ์ผ ํ์์ ๋ฏธ๋ฆฌ ์ค๋ฅ๋ฅผ ์ก์๋ผ ์ ์๋ค
- setter ์ฃผ์ ์ ๋ฐฉ๋ฒ์์๋ ํ ์ ์์๋ final ์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํด์ ์๋ฌด๋ Car ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฟ์น๊ธฐ ํ ์ ์๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์๋ค
+) ๋ณด๋์ค ์ด์
- (์คํ๋ง์์๋) ์ํ์ฐธ์กฐ๋ฅผ ํ๊ณ ์๋ ๊ฒฝ์ฐ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ตฌ๋๋์ง ์๊ธฐ ๋๋ฌธ์ ์คํ ์ ๋ฐ๋ก ์ํ์ฐธ์กฐ ์๋ฌ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค (์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ด ์ ๋๋ค๊ฐ ์ํ์ฐธ์กฐ๋ฅผ ํ๋ ๋ถ๋ถ์ด ํธ์ถ ๋ ๋๋ง StackOverflowError ์๋ฌ๊ฐ ์๊ธด๋ค)
- ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ฉ์ดํ๋ค
'๐ฑ CS Study > ์๋ฐ \ ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ก๊ทธ ๋ ๋ฒจ (0) | 2023.03.05 |
---|---|
Spring Security๋? (0) | 2023.03.01 |
์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฐจ์ด (0) | 2023.02.19 |
Java, JIT Compiler, JVM (0) | 2023.02.08 |
๋๊ธ