-
์๋ฐ๊ฐ ํ์ฅํ ๊ฐ์ฒด ์งํฅ๊ฐ๋ฐ/Java 2022. 5. 24. 02:42
๐ก abstract - ์ถ์ ๋ฉ์๋์ ์ถ์ ํด๋์ค
์ถ์๋ฉ์๋ : ์ ์ธ๋ถ๋ ์๋๋ฐ, ๊ตฌํ๋ถ๊ฐ ์๋ ๋ฉ์๋
์ถ์ ํด๋์ค - ์ถ์ ๋ฉ์๋๋ฅผ ํ๋๋ผ๋ ๊ฐ๊ณ ์๋ ํด๋์ค
์ถ์ ํด๋์ค๋ ์ธ์คํด์ค, ์ฆ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ํด๋์ค๊ฐ ๋๋ค.
- ์ถ์ํด๋์ค๋ ์ธ์คํด์ค, ์ฆ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋ง์ฝ ํด๋น ์ถ์ํด๋์ค๋ฅผ ์์ํ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์ถ์๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ถ์๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค์ฌ์ผ ํ๋ค.๐ก interface์ implements
์ธํฐํ์ด์ค๋ public static final ์์๋ง ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ฉ์๋๋ public abstract ๋ง ๊ฐ์ง ์ ์๋ค.
๋ค๋ง, ์ฝ๋์ ์ด๋ฐ ์์ฝ์ด๋ค์ด ์๋ถ์ด์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ฐ ์ด์ ๋ ์์ ๊ตณ์ด ์์ฑ์ public, static, final ๊ณผ ๋ฉ์๋์ public๊ณผ abstract์ ๋ถ์ด์ง ์์๋ ์๋์ผ๋ก ์๋ฐ๊ฐ ์์์ ๋ถ์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ, ์๋ฐ8์์ ๋ถํฐ๋ default method๋ฅผ ํตํด ๊ตฌํ์ฒด๊ฐ ์๋ ๋ฉ์๋์ ์์ฑ๋ ๊ฐ๋ฅํด์ก๋ค.
๐ก ์์ฑ์
๋ฐํ๊ฐ์ด ์๊ณ ํด๋์ค๋ช ๊ณผ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฉ์๋๋ฅผ ์์ฑ์๋ผ๊ณ ํ๋ค. ๊ฐ๋ฐ์๊ฐ ์๋ฌด๋ฐ ์์ฑ์๋ ๋ง๋ค์ง ์์ผ๋ฉด ์๋ฐ๋ ์๋์ผ๋ก ์ธ์๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋ค. ํ์ง๋ง, ์ธ์๊ฐ ์๋ ์์ฑ์๋ฅผ ํ๋๋ผ๋ ๋ง๋ ๋ค๋ฉด ์๋ฐ๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด ์ฃผ์ง ์๋๋ค.
๐ก ํด๋์ค ์์ฑ ์์ ์คํ ๋ธ๋ก, static ๋ธ๋ก
ํด๋์ค๊ฐ ์คํํฑ ์์ญ์ ๋ฐฐ์น๋ ๋ ์คํ๋๋ ์ฝ๋๋ธ๋ก์ static ๋ธ๋ก์ด๋ผ๊ณ ํ๋ค. static ๋ธ๋ก์์ ์ฌ์ฉํ ์ ์๋ ์์ฑ๊ณผ ๋ฉ์๋๋ ๋น์ฐํ static ๋ฉค๋ฒ ๋ฟ์ด๋ค. ํ ํด๋์ค์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋ ์ด ํด๋์ค์ static ๋ธ๋ก์ ๋จ ํ๋ฒ๋ง ์คํ๋๋ค. static ๋ธ๋ก์ด ์ฌ์ฉ๋๋, ์ฆ ํด๋์ค๊ฐ ์ ์ผ ์ฒ์ ์ฌ์ฉ๋ ๋๋ ๋ค์ ์ธ๊ฐ์ง ๊ฒฝ์ฐ ์ค ํ๋๋ค.
- ํด๋์ค์ ์ ์ ์์ฑ์ ์ฌ์ฉํ ๋
- ํด๋์ค์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋
- ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ต์ด๋ก ๋ง๋ค ๋๐๐ปโ๏ธ ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋ฐ๋ก ํด๋์ค๋ค์ ์ ๋ณด๋ฅผ static ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ก๋ฉํ์ง ์๊ณ , ํด๋น ํด๋์ค๊ฐ ์ฒ์ ์ฌ์ฉ๋ ๋ ๋ก๋ฉํ ๊น?
์คํํฑ ์์ญ๋ ๋ฉ๋ชจ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ์ต๋ํ ๋ฆ๊ฒ ์ฌ์ฉ์ ์์ํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ๋ฐํํ๋ ๊ฒ์ด ์ ์์ด๋ค. ์๋ฐ๋ ์คํํฑ ์์ญ์ ํ๋ฒ ์ฌ๋ผ๊ฐ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ ์ ์์ง๋ง, ๊ทธ๋ผ์๋ ์ต๋ํ ๋ฆ๊ฒ ๋ก๋ฉํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต๋ํ ๋ฆ์ถ๊ธฐ ์ํด์๋ค.
๐๐ปโ๏ธ static ๋ธ๋ก์ด ์๋ค๋ฉด, ์ธ์คํด์ค ๋ธ๋ก์ด๋ผ๋ ๊ฒ๋ ์์๊น?
์๋ค. ์๋ฌด๋ฐ ํ์์์ด {} ๋ธ๋ก์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค {} ๋ธ๋ก์ด ์คํ๋๋ค. {} ๋ธ๋ก์ ๊ฐ์ฒด ์์ฑ์๊ฐ ์คํ๋๊ธฐ ์ ์ ๋จผ์ ์คํ๋๋ค. ๊ฐ์ฒด๋ ์ฃผ๋ก ์์ฑ์๋ฅผ ํตํด ์ด๊ธฐํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ค ๊ฑฐ์ ์ฌ์ฉํ ์ผ์ ์๋ค.
๐ก final
- ํด๋์ค์ final : ์์์ ํ์ฉํ์ง ์๋๋ค.
- ๋ณ์์ final : ์ด๊ธฐํ ์ดํ ๊ฐ์ ๋ณ๊ฒฝ์ ํ์ฉํ์ง ์๋๋ค. (์์)
- ๋ฉ์๋์ final : ์ฌ์ ์, ์ฆ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ฉํ์ง ์๋๋ค.๐ก instanceof
๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ๋ฌผ์ด๋ณด๋ ์ฐ์ฐ์์ด๋ค. ์ด๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น ๊ฐ์ด๋ฐ LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น)๋ฅผ ์ด๊ธฐ๋ ์ฝ๋์์ ์ฃผ๋ก ๋ํ๋๋ ์ฐ์ฐ์์ด๊ธฐ์ ์ฝ๋์ instanceof๊ฐ ๋ณด์ธ๋ค๋ฉด ๋ฆฌํฉํฐ๋ง์ ๋์์ด ์๋์ง ์ ๊ฒํด ๋ด์ผ ํ๋ค. ์ด ์ฐ์ฐ์๋ ํด๋์ค๋ค์ ์์ ๊ด๊ณ ๋ฟ๋ง ์๋๋ผ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ด๊ณ์์๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
๐ก package
package ํค์๋๋ ๋ค์์คํ์ด์ค(์ด๋ฆ๊ณต๊ฐ)๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ค. ๊ฐ์ ์ด๋ฆ์ Customer ํด๋์ค๋ฅผ ์์ฑํ ๊ฒฝ์ฐ, ํจํค์ง๋ฅผ ํตํด ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ค. ex) Marketing.Customer , Customer.Customer ๋ง์ผํ ์ฌ์ ๋ถ์ ๊ณ ๊ฐ, ๊ณ ๊ฐ์ฌ์ ๋ถ์ ๊ณ ๊ฐ.
๐ก this
๊ฐ์ฒด๊ฐ ์๊ธฐ ์์ ์ ์ง์นญํ ๋ ์ฐ๋ ํค์๋์ด๋ค.
- ์ง์ญ ๋ณ์์ ์์ฑ(๊ฐ์ฒด ๋ณ์, ์ ์ ๋ณ์)์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ง์ญ ๋ณ์๊ฐ ์ฐ์ ํ๋ค.
- ๊ฐ์ฒด ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ์ง์ญ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ฐ์ฒด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด this๋ฅผ ์ ๋์ฌ๋ก ์ฌ์ฉํ๋ค.
- ์ ์ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ์ง์ญ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋์ค๋ช ์ ์ ๋์ฌ๋ก ์ฌ์ฉํ๋ค.๐ก super
๋จ์ผ ์์๋ง์ ์ง์ํ๋ ์๋ฐ์์ ๋ฐ๋ก ์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ง์นญํ๋ค. super ํค์๋๋ก ๋ฐ๋ก ์์ ์์ ํด๋์ค ์ธ์คํด์ค์๋ ์ ๊ทผํ ์ ์์ง๋ง super.super ํํ๋ก ์์์ ์์ ํด๋์ค์ ์ธ์คํด์ค์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๐ก ๊ฐ์ฒด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋
๊ฐ์ฒด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ STS์ ์คํ ์ ๋ณด๋ฅผ ๋ณด๋ฉด ๊ฐ์ฒด๋ช .๊ฐ์ฒด๋ฉ์๋๋ช ()์ด ์๋ ํด๋์ค๋ช .๊ฐ์ฒด๋ฉ์๋๋ช ()์์ ํ์ธํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํญ๊ท ๋ฝ๋ก๋ก = new ํญ๊ท(); ๋ฝ๋ก๋ก.test(); ๋ผ๊ณ ๋์ด์์ ๋, ์ฌ๊ธฐ์ ๋ฝ๋ก๋ก.test()๊ฐ ๋๋ฒ๊ทธ ๋ทฐ์์ ๋ณด๋ฉด ํญ๊ท.test()๋ก ๋์์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ์ด์ ๋ ์๋ฅผ ๋ค์ด ํญ๊ท ๊ฐ์ฒด๊ฐ ๋ฝ๋ก๋ก ํ๋๊ฐ ์๋๋ผ 100๊ฐ๋ผ๊ณ ๊ฐ์ ์ ํ๋ฉด, test() ๋ฉ์๋๋ ๊ฐ ํญ๊ท ๊ฐ์ฒด์ ๋ฐ๋ผ ํ์ 100๊ฐ๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด ๋ฉค๋ฒ ๋ฉ์๋๋ ๊ฐ ๊ฐ์ฒด๋ณ๋ก ๋ฌ๋ผ์ง๋ ๊ฒ์ด ์๋๋ค. ๊ฐ์ฒด ๋ฉค๋ฒ ๋ฉ์๋์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด ๋ฉค๋ฒ ์์ฑ์ ๊ฐ๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค. ๋๊ฐ์ ๊ฐ์ฒด ๋ฉค๋ฒ ๋ฉ์๋์ธ test() ๋ฉ์๋๋ฅผ ํ ์์ญ์ 100๊ฐ๋ ๋ง๋ ๋ค๋ ๊ฒ์ ์ฌ๊ฐํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ๋์ JVM์ ์ง๋ฅ์ ์ผ๋ก ๊ฐ์ฒด ๋ฉค๋ฒ ๋ฉ์๋ test()๋ฅผ ์คํํฑ ์์ญ์ ๋จ ํ๋๋ง ๋ณด์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ณด์ด์ง๋ ์์ง๋ง test() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๊ฐ์ฒด ์์ ์ ๋ํ๋ด๋ this ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๋ฅผ ๋๊ธด๋ค.
'๊ฐ๋ฐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM์ด์ผ๊ธฐ - ์ ์(+JRE, JDK), ๊ตฌ์กฐ (0) 2022.07.05 Java8 - stream(์คํธ๋ฆผ), forEach(), map(), filter(), Method Reference(๋ฉ์๋ ์ฐธ์กฐ) (0) 2022.04.30 Java8 - Lamda ํํ์(expression) (0) 2022.04.29 [Thread] Runnable and Callable in Java (0) 2022.04.25 [Thread] Volatile์ด๋, Volatile๊ณผ DCL(Double Checking Locking) ๊ณต๋ถ ๊ธฐ๋ก (0) 2022.04.24