count
ํ๋๊ฐ ํด๋์ค์์ ์ ์ ์ด๋ฉด Counter
๋ค์ ์์ผ๋ก ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. Counter.count
. ๋ฌผ๋ก ์ก์ธ์ค ํ์ ์๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด private
ํ๋๋ ์ ์ธ๋ ํด๋์ค ๋ด์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ protected
๋ ํจํค์ง ๋ด์ ๋ชจ๋ ํด๋์ค์ ํจํค์ง ์ธ๋ถ์ ๋ชจ๋ ํ์ ํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋์ค ์ ์์
์ ์ฆ๊ฐ์ํค๋ Counter
์ ์ ๋ฉ์๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.increment()
count
ํ๋. ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๋ฉด ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค Counter.increment()
. Counter
์ ์ ํ๋ ๋๋ ๋ฉ์๋์ ์ก์ธ์คํ๊ธฐ ์ํด ํด๋์ค ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค . ์ด๊ฒ์ด ์ ์ (ํด๋์ค) ๋ณ์ ๋ฐ ๋ฉ์๋์ ๋น์ ์ (์ธ์คํด์ค) ๋ณ์ ๋ฐ ๋ฉ์๋ ๊ฐ์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์
๋๋ค. ์ค์ํ ๋ฉ๋ชจ์
๋๋ค. ํด๋์ค์ ์ ์ ๋ฉค๋ฒ๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋๋ผ ํด๋์ค์ ์ง์ ์ํ๋ค๋ ์ ์ ์์ง ๋ง์ญ์์ค. ์ฆ, ์ ์ count
๋ณ์์ ๊ฐ์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๋์ผํฉ๋๋ค Counter
. ์ด ๊ธฐ์ฌ์์๋ Java์์ ์ ์ ํ์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ์ ์ธ ์ธก๋ฉด๊ณผ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ชจ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ Java์ ์ ์ ์์ ์์ ๋ํด ์์์ผ ํ ์ฌํญ.
์ด ์น์ ์์๋ ์ ์ ๋ฉ์๋, ํ๋ ๋ฐ ํด๋์ค ์ฌ์ฉ์ ์ฃผ์ ์ธก๋ฉด์ ์ดํด๋ด ๋๋ค. ๋ณ์๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.-
์ ์ ๋ฉ์๋ ๋๋ ๋ธ๋ก๊ณผ ๊ฐ์ ์ ์ ์ปจํ ์คํธ ๋ด์์ ํด๋์ค์ ๋น์ ์ ๋ฉค๋ฒ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
public class Counter { private int count; public static void main(String args []) { System.out.println(count); // Compile time error } }
์ด๊ฒ์ Java ํ๋ก๊ทธ๋๋จธ, ํนํ ์ด๋ณด์๊ฐ ์ ์ง๋ฅด๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ค์ ์ค ํ๋์ ๋๋ค.
main
๋ฉ์๋๋ ์ ์ ์ด๊ณcount
๋ณ์๋ ์ ์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฉ์๋println
๋ด๋ถ์์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉดmain
"์ปดํ์ผ ์๊ฐ ์ค๋ฅ"๊ฐ ๋ฐ์ํฉ๋๋ค. -
thread safe
๋ก์ปฌ ๋ณ์์ ๋ฌ๋ฆฌ ์ ์ ํ๋ ๋ฐ ๋ฉ์๋๋ Java์ ์์ต๋๋ค . ์ค์ ๋ก ์ด๊ฒ์ ๋ค์ค ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ๋ณด์ ๋ฌธ์ ์ ๊ฐ์ฅ ๋น๋ฒํ ์์ธ ์ค ํ๋์ ๋๋ค. ํด๋์ค์ ๊ฐ ์ธ์คํด์ค๊ฐ ์ ์ ๋ณ์์ ๋์ผํ ๋ณต์ฌ๋ณธ์ ์ฐธ์กฐํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ด๋ฌํ ๋ณ์๋ ํด๋์ค์ ์ํด ๋ณดํธ๋๊ฑฐ๋ "์ ๊ฒจ" ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํsynchronized
๋๋race conditions
. -
์ ์ ๋ฉ์๋๋ ํธ์ถํ ๋๋ง๋ค ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์๋ค๋ ์ค์ฉ์ ์ธ ์ด์ ์ด ์์ต๋๋ค. ์ ์ ๋ฉ์๋๋ ์ ์ธํ ํด๋์ค์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํธ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฐฉ๋ฒ์
factory
๋ฐฉ๋ฒ๊ณผutility
๋ฐฉ๋ฒ์ ์ ํฉํฉ๋๋ค. ํด๋์คjava.lang.Math
๋ ํ๋ฅญํ ์์ ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ๋ฉ์๋๊ฐ ์ ์ ์ ๋๋ค.final
Java์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ๊ฐ์ ์ด์ ๋ก ํ์๋ฉ๋๋ค . -
@Override
๋ ๋ค๋ฅธ ์ค์ํ ์ ์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์( )ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค . ์ ๊ทธ๋ฌํ ๋ฉ์๋, ์ฆ ๋์ผํ ์ด๋ฆ๊ณผ ์๋ช ์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ์ธํ๋ฉดsubclass
ํด๋น ๋ฉ์๋๋ฅผsuperclass
์ฌ์ ์ํ๋ ๋์ "์จ๊ธฐ๊ธฐ"๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด ํ์์method hiding
. ์ฆ, ์ ์ ๋ฉ์๋๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค ๋ชจ๋์์ ์ ์ธ๋๋ฉด ํธ์ถ๋๋ ๋ฉ์๋๋ ํญ์ ์ปดํ์ผ ํ์์ ๋ณ์ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๋ฉ์๋ ์ฌ์ ์์ ๋ฌ๋ฆฌ ์ด๋ฌํ ๋ฉ์๋๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์คํ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.class Vehicle { public static void kmToMiles(int km) { System.out.println("Inside the parent class / static method"); } } class Car extends Vehicle { public static void kmToMiles(int km) { System.out.println("Inside the child class / static method"); } } public class Demo { public static void main(String args []) { Vehicle v = new Car(); v.kmToMiles(10); } }
์ฝ์ ์ถ๋ ฅ:
์์ ํด๋์ค/์ ์ ๋ฉ์๋ ๋ด๋ถ
์ด ์ฝ๋๋ ๊ฐ์ฒด๊ฐ ์ด๋ผ๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ํด๋์ค
Car
์ ์ ์ ๋ฉ์๋๊ฐVehicle
์ปดํ์ผ ํ์์ ํธ์ถ๋์๊ธฐ ๋๋ฌธ์ ํธ์ถ๋์์์ ๋ถ๋ช ํ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ ์ค๋ฅ๊ฐ ์์์ต๋๋ค! -
๋ํ ์ต์์ ํด๋์ค ์ด์ธ์ ํด๋์ค๋ฅผ ์ ์ ์ผ๋ก ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํด๋์ค๋
nested static classes
. ๋ ๋์ ์์ง๋ ฅ์ ์ ๊ณตํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์ค์ฒฉ๋ ์ ์ ํด๋์ค์ ๋๋ผ์ด ์๋HashMap.Entry
๋ด๋ถ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ธ ์ ๋๋คHashMap
. ๋ด๋ถ ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ์ค์ฒฉ ํด๋์ค๋ ๋ณ๋์ .class ํ์ผ์์ ์ ์ธ๋๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ ํด๋์ค์์ 5๊ฐ์ ์ค์ฒฉ ํด๋์ค๋ฅผ ์ ์ธํ๋ฉด .class ํ์ฅ์๋ฅผ ๊ฐ์ง 6๊ฐ์ ํ์ผ์ด ์๊น๋๋ค. ๋ ๋ค๋ฅธ ์๋ ํด๋์ค ์ ๋์ด ๋น๊ต๊ธฐ( )Comparator
์ ๊ฐ์ ์ฐ๋ฆฌ ์์ ์ ์ ์ธ์ ๋๋ค .AgeComparator
Employee
-
์ ์ ์์ ์๋ ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์คํ๋๋ "์ ์ ์ด๊ธฐํ ๋ธ๋ก"์ผ๋ก ๋ ์ ์๋ ค์ง ์ ์ ๋ธ๋ก์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๋ธ๋ก์ ์ ์ธํ์ง ์์ผ๋ฉด Java๋ ๋ชจ๋ ์ ์ ํ๋๋ฅผ ๋จ์ผ ๋ชฉ๋ก์ผ๋ก ์์งํ๊ณ ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์ด๊ธฐํํฉ๋๋ค. ์ ์ ๋ธ๋ก์ ํ์ธ๋ ์์ธ๋ฅผ throwํ ์ ์์ง๋ง ํ์ธ๋์ง ์์ ์์ธ๋ throwํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ
ExceptionInInitializerError
๋ฐ์ํฉ๋๋ค. ์ค์ ๋ก ์ ์ ํ๋๋ฅผ ์ด๊ธฐํํ๋ ๋์ ๋ฐ์ํ๋ ๋ชจ๋ ์์ธ๋ Java์ ์ํด ์ด ์ค๋ฅ๋ก ๋ํ๋ฉ๋๋ค.NoClassDefFoundError
์ด๊ฒ์ ํด๋์ค๊ฐ ์ฐธ์กฐ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ด๊ธฐ๋ ํฉ๋๋ค . -
์ค์ ๊ฐ์ฒด์์ ํธ์ถ๋ ๋ ๋ฐํ์์ ์ฐ๊ฒฐ๋๋ ๊ฐ์ ๋๋ ๋น์ ์ ๋ฉ์๋์ ์ฐ๊ฒฐ๊ณผ ๋ฌ๋ฆฌ ์ ์ ๋ฉ์๋๋ ์ปดํ์ผ ์๊ฐ์ ์ฐ๊ฒฐ๋๋ค๋ ์ ์ ์๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ ๋ฉ์๋๋ ๋ฐํ์์ ๋คํ์ฑ์ด ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ Java์์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฉ์๋๋ฅผ ์ ์ ์ผ๋ก ์ ์ธํ ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์ ํ ์ฌํญ์ ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ํ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ๋ฅ๋ ฅ์ด ์๊ฑฐ๋ ์ฌ์ ์ํ ํ์๊ฐ ์์ ๋๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค. ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ ์ ์ ํ์ ์๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ ์ข์ ์์ ๋๋ค. Joshua Bloch๋ ๋ชจ๋ Java ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ๋์ ์ฝ์ด์ผ ํ ์ ์ Effective Java์์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๊ฐ ๊ตฌ์ฑ์์ ๋นํด ๋ช ๊ฐ์ง ์ฅ์ ์ ์ง์ ํฉ๋๋ค.
-
์ด๊ธฐํ๋ ์ ์ ๋ธ๋ก์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ์ ์ ํ๋ ๋๋ ๋ณ์๋ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ ์ด๊ธฐํ๋ฉ๋๋ค. ์ด๊ธฐํ ์์๋ Java ํด๋์ค์ ์์ค ํ์ผ์ ์ ์ธ๋ ์์์ ๋์ผํ๊ฒ ์์์ ์๋๋ก ์งํ๋ฉ๋๋ค. ์ ์ ํ๋๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ๋ฐฉ์์ผ๋ก ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ ์ด ํ๋ก์ธ์ค๋
Singleton
ํจํด์ ๊ตฌํํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ฉ๋๋ค.Enum
์ด๋ค ์ด์ ๋ก as a๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐSingleton
์ข์ ๋์์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ "์ง์ฐ" ์ด๊ธฐํ๊ฐ ์๋์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ ์ ํ๋๊ฐ ๋๊ตฐ๊ฐ "์์ฒญ"ํ๊ธฐ ์ ์ ์ด๊ธฐํ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ฆฌ์์ค๊ฐ ๋ง๊ฑฐ๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ ์ ์ ๋ธ๋ก์์ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ๊ฒ์ด ์ ๋ฆฌํ์ง ์์ต๋๋ค. -
์ง๋ ฌํ ์ค์
transient
๋ณ์์ ๊ฐ์ ์ ์ ํ๋๋ ์ง๋ ฌํ๋์ง ์์ต๋๋ค. ์ค์ ๋ก ์ ์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ์ญ์ง๋ ฌํ ํ ์ด๊ธฐ(๊ธฐ๋ณธ๊ฐ) ๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ ํ๋๊ฐ ์ธ ๊ฒฝ์ฐint
์ญ์ง๋ ฌํ ํ ํด๋น ๊ฐ์ 0์ด ๋ฉ๋๋ค. ์ ํ์ด ์ธ ๊ฒฝ์ฐfloat
๊ฐ์ 0.0์ด ๋ฉ๋๋ค. ํ๋๊ฐ ์ด๋ฉดObject
๊ฐ์ ์ ๋๋คnull
. ์์งํ ๋งํด์ ์ด๊ฒ์ Java ์ง์ฑ ์ ๋ํ ์ธํฐ๋ทฐ์์ ์ง๋ ฌํ์ ๋ํด ๊ฐ์ฅ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ ์ค ํ๋์ ๋๋ค. ํ์ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๋์ ์ ์ฅํ์ง ๋ง์ญ์์ค! -
๋ง์ง๋ง์ผ๋ก ์ ์ ๊ฐ์ ธ์ค๊ธฐ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์์ ์๋ ํ์ค ๋ฌธ๊ณผ ๊ณตํต์ ์ด ๋ง์ง๋ง
import
ํ๋ ๋๋ ๋ชจ๋ ์ ์ ํด๋์ค ๋ฉค๋ฒ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ์ ์์ ๋ค๋ฆ ๋๋ค. ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋์ผํ ํด๋์ค์์ ์ ์ธ๋ ๊ฒ์ฒ๋ผ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ฉด ํด๋์ค ์ด๋ฆ์ ์ง์ ํ์ง ์๊ณ ๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Java 1.5์ ๋ฑ์ฅํ์ผ๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค. ์ด ๊ตฌ์ฑ์ JUnit ํ ์คํธ์์ ๊ฐ์ฅ ์์ฃผ ๋ฐ๊ฒฌ๋ฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ํ ์คํธ ๊ฐ๋ฐ์๊ฐ assert ๋ฉ์๋(์:assertEquals()
์ค๋ฒ๋ก๋๋ ๋ณํ)์ ๋ํด ์ ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. -
์ง๊ธ์ ์ฌ๊ธฐ๊น์ง์ ๋๋ค. ๋ชจ๋ Java ํ๋ก๊ทธ๋๋จธ๋ ์์์ ์ธ๊ธํ ์ ์ ์์ ์์ ๋ชจ๋ ์ธก๋ฉด์ ์์์ผ ํฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ ์ ๋ณ์, ํ๋, ๋ฉ์๋, ์ด๊ธฐํ ๋ธ๋ก ๋ฐ ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๊ฒํ ํ์ต๋๋ค. ๋ํ Java ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ์ดํดํ๊ธฐ ์ํด ์์์ผ ํ๋ ๋ช ๊ฐ์ง ์ค์ํ ์์ฑ์ ๋ํด์๋ ๋ค๋ฃจ์์ต๋๋ค. ์ง์งํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋งค์ฐ โโ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ ๋ฉค๋ฒ๋ฅผ ๋ฅ์ํ๊ฒ ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค."
GO TO FULL VERSION