[Java] ๊ณต๋ณ์ฑ A/S (feat. ์์๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ)
๐คช ์์ง๋ ์ด๋ ค์ด ๊ณต๋ณ์ฑ
22๋ ๋ 9์์ฏค ์ด ๊ธ์ด ์๋ค.
๋ฐ๋ก Covariant(๊ณต๋ณ์ฑ)์ ๊ดํ ๊ธ์ด๋ค. ๊ธฐ์กด์ ์ผ๋ ๊ธ์ ๋ณด๊ฐํ๊ธฐ ์ํด ์ด ๊ธ์ ์ฐ๊ฒ ๋๋ค.
๊ธฐ์กด๊ธ
2022.09.02 - [Java] - [Java] Covariant(๊ณต๋ณ์ฑ)์ ๊ดํ ๊ฐ๋จํ ์ด์ผ๊ธฐ
[Java] Covariant(๊ณต๋ณ์ฑ)์ ๊ดํ ๊ฐ๋จํ ์ด์ผ๊ธฐ
๐ ๊ฐ์ฒด์งํฅ 5์์น(SOLID) SOLID๋ ๊ฐ์ฒด์งํฅ 5์์น์ ๋์์ ๋ฐ์ ๋ง๋ ๋ง์ด๋ค. ๊ฐ๊ฐ ๋์ดํ์๋ฉด, SRP(๋จ์ผ ์ฑ ์ ์์น) OCP(๊ฐ๋ฐฉ ํ์ ์์น) LSP(๋ฆฌ์ค์ฝํ ์นํ ์์น) ISP(์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น) DIP(์์กด
codari.tistory.com
๊ฐ์ฒด์งํฅ 5์์น ์ค LSP์ ๊ดํ ๊ธ์ ์ฐ๋ค๊ฐ ๋งํ๋ ๋ถ๋ถ์ด ์๋ค.
๋ํ, three๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋ถ๋ช ํ B ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ J๊ฐ ์๋ I๋ฅผ ๋ฆฌํดํ๋์ง ๊ถ๊ธํ ์ ์๋ค. ์ด๊ฒ์ ์์ฑ์๋ณด๋ค ๋ณ์์ ํ์ ์ด ๋ ์ค์ํ๋ฐ, ๋ณ์์ ํ์ ์ด A์ด๊ธฐ ๋๋ฌธ์ A์์ ์์ฑ๋ ๋ฆฌํด๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.(๊ทธ๋ฐ๋ฐ, ํ๋ฆฐํธ ๊ฐ์๋ B๊ฐ ์ฐํ๋๋ฐ, ์ด๊ฒ์ ๋ํ ์ ํํ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๋ค๋ง, ํ์ฌ ๋๋ ๊ฐ์ฒด๊ฐ ๋ฆฌํดํ๋ ๊ฐ๊ณผ ๋จ์ํ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ํ๋ฆฐํธ๋ฌธ์ ์๋ก ์ฒ๋ฆฌ๋๋ ์์๊ฐ ๋ฌ๋ผ์ ๋ฐ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์๋ค.)ps. ํน์ ์ ํํ ์ด์ ๋ฅผ ์๊ณ ๊ณ์๋ค๋ฉด ๋๊ธ์ ๋ถํ๋๋ฆฝ๋๋ค.
๋ฐ๋ก ์ทจ์์ ์ด ๊ทธ์ด์ง ๋ถ๋ถ์ด๋ค.
์ด ๋น์ ๊ธ์ ์ธ ๋, ๊ณต๋ณ์ฑ๊ณผ ์ญ๊ณต๋ณ์ฑ์ ์ค๋ช ํ๊ณ ์ถ์ด์ ๋ด ๋จธ๋ฆฌ ์์์ ๋ง ๊ตด๋ ธ๋ ์์ ์๋๋ฐ, ์ค์ ๋ก ๋ฆฌํด๋ฌธ์ด ๋ค๋ฅด๊ฒ ๋์ํด์ ์์ํ๋ ๊ธฐ์ต์ด ์๋ค.
์ค๋๋ง์ ์ ๊ธ์ ๋ณด๋ ์ฐธ ์ด์ฌํ ์ด๋ ค๊ณ ํ๊ตฌ๋ ์ถ๊ธฐ๋ ํ๋ค.
๋ณธ๋ก ์ผ๋ก ๋์์์ ์ทจ์์ ์ด ๊ทธ์ด์ง ๋ถ๋ถ์ด ๋์ํ๋ ์๋ฆฌ๋ฅผ ์์๋ค. ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ๋ฅผ ์ค๋นํ๋ค๊ฐ ์๊ฒ๋ ๋ด์ฉ์ธ๋ฐ, ์๊ฐํด๋ณด๋ฉด ๋๋ฌด๋ ๋จ์ํด์ ํํํ ์์์ด ๋๋ค.
๊ธ์ ์ ๋ชฉ์ ๊ณต๋ณ์ฑ A/S์ด์ง๋ง, ์ฌ๊ธฐ์ ๊ณต๋ณ์ฑ๊ณผ ์ญ๊ณต๋ณ์ฑ์ ๊ฐ๋ ์ ๋ฐฐ์ ํ๊ฒ ๋ค. ์ฆ, ๋ณธ ๊ธ์ ์๋ I์ Jํ์ ์ ํด๋์ค๋ ๊ณ ๋ คํ์ง ์๊ฒ ๋ค๋ ๋ง์ด๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด Bํด๋์ค๋ก ์ ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
public class B extends A{
J method() {
System.out.println("B");
return new J();
}
// ์ค๋ต ...
public static J three() {
A a = new B();
return a.method(); // return I
}
// ์ค๋ต ...
public static void main(String[] args) {
B.one();
B.two();
B.three();
B.four();
}
}
์์ ๊ฐ์ด Aํ์ ์ผ๋ก ์ ์ธํ๊ณ Bํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ ๋, B ํด๋์ค์ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด ์๋ method() ๊ฐ ๋์ํ๋ฉด์, ํ๋ฆฐํธ๋ฌธ์๋ "B"๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด์๋ค. ์ฆ, ํ์ ์ด ๋ถ๋ชจ์ธ A๊ฐ ์ ์ธ๋์ด ์๋ค ํ๋๋ผ๋, ์ค์ ์์ฑ๋ ๊ฐ์ฒด๋ B์ธ ์์์ด๊ธฐ ๋๋ฌธ์ ์์์ ์ ์ธ๋์ด ์๋ ๋ฉ์๋๊ฐ ๋์ํ๋ค๋ ๊ฒ์ด๋ค.
์๋ฐ์ ๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ณธ์ด์์ํ ๋ฐ... ์ด ๊ธ์ ์ ์ ๋น์ ๊ธฐ๋ณธ์ ํท๊ฐ๋ ธ๋ค๋ ๊ฒ์ด ์ฐธ ๋ถ๋๋ฌ์ธ ๋ฟ์ด๋ค. ์ฌํํผ ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๋ค์๊ธ ๋์๊ธธ ์ ์์ด์ ๊ธฐ๋ถ์ด ์ฐธ ์ข๋ค.