[Java] ๊ฐ์ฒด์งํฅ์ ํด์น์ง ์์ผ๋ฉด์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์๊น?
๐ ์ ์ ๋ฉ์๋ ์ฌ์ฉ ๊ธฐ์ค์ ์ฐพ์์
์ฝ๋๋ฅผ ์์ฑํ ๋๋ฉด, ๋ถ์ฅ ๋ถ์ฅ ์ ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ ์ถ์ด์ง๋ค.
๊ทธ๋ฌ๋ ๋๋ ทํ ๋จ์ ์ ๋ํ ์ธ์ ์์ด, ์ฌ์ฉ์ ๋ํ ๊ธฐ์ค ์์ด๋ ์ฌ์ฉํ๊ธฐ๊ฐ ๋๋ ค์ ๋์ ๊ธฐ์ค์ ์ธ์๋ณด๊ณ ์ ์ฌ๋ฌ ์ํฐํด๋ค์ ์ฝ์ด ๋ณด์๋ค. ๊ทธ ์ค์์๋ ๊ฐ์ฅ ์ข์๋ ์ธ ๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด๊ณ , ๋์ ๊ธฐ์ค์ ์๊ฐํด๋ณด๊ณ ์ ํ๋ค.
๐ 1. Why are static embers and methods bad for object-oriented design?
Why are static embers and methods bad for object-oriented design?
In this article I’ll try to explain my vision of why we should preferably avoid static members and methods in our OO code. I will show you…
medium.com
์ ์ํฐํด์์ ์ฃผ๋ก ์ด์ผ๊ธฐํ๋ ๊ฒ์, โก๏ธ ๊ฐ์ฒด์งํฅ์ ํจ๋ฌ๋ค์๊ณผ์ ๋ถ์ผ์น๋ค.
๊ฐ์ฒด์งํฅ์ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ํฌ์ธํธ๋ค์ ๊ฐ๋๋ค.
1. ๋ฉ์์ง
OOP ์ ๊ฐ์ฒด๋ค์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ๋ฉ์์ง๋ฅผ ํตํด ์ํตํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ static ๋ฉ์๋๋ค์ ์ด๋ค ๊ฐ์ฒด์๋ ์ํ์ง ์๊ธฐ์ ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์ ์์ฒด์ ์ด๊ธ๋๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ค์ ์ด๋ ๊ฒ ์ ์๋ ๋ฉ์๋๋ค์ ๋ฉ์๋๋ผ๊ธฐ๋ณด๋ค๋ ์ผ์ข ์ 'procedure(์ ์ฐจ)' ์ ๊ฐ๊น๋ค๊ณ ์ด์ผ๊ธฐํ๋ค.
2. ๋์ ๋์คํจ์น ๋ฐ ๋คํ์ฑ
static ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌํ์ฒด๋ฅผ ๋ฐํ์์ ์ ํํ ์ ์๋ ๊ฐ์ฒด์งํฅ์ ์ถ์ํ๋ฅผ ํ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค. static ์ ์ฌ์ฉํ๋ฉด ๊ตฌํ์ฒด๊ฐ ๊ณ ์ ๋์ด ๋ฒ๋ฆฐ๋ค๊ณ ์ด์ผ๊ธฐํ๋ค.(fixed by using polymorphic behavior)
๊ธ์์ ์ด์ผ๊ธฐํ๋ static ์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ์ฅ ์ ํฉํ ์ํฉ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์์ ํ ์ฌ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒฝ์ฐ
2. ์ด๋ ํ ์ธ์คํด์ค์๋ ์ฐ๊ด๋์ง ์๊ณ ํน์ ๊ตฌํ์ฒด์ ์์ ํ ์ข ์๋๋ ๊ฒฝ์ฐ
๐ 2. Use Cases for Static Methods in Java
์์ ๊ธ์์๋ ์ ์ ๋ฉ์๋์ ์ ์ ํ ์ ์ค ์ผ์ด์ค๋ค์ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ์ด์ผ๊ธฐํ๋ค.
1. standard ํ ํ๋์ ํ ๋
Math.max(a,b);
์์ ๊ฐ์ด ๋๋ฌด๋๋ ์๋ช ํ๊ฒ ๋ ํฐ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด ๊ธฐ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
2. ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
์ฌ๊ธฐ์์ ๊ณตํต์ ์ด๋ผ๋ ๊ฒ์ ์๋ฏธ๋ ์ฒซ์งธ๋ก, ํน์ ๋๋ฉ์ธ์ ๋ฌถ์ด์ง ์๊ณ ๋์งธ๋ก ํน์ ํ ์ํ๋ฅผ ๊ฐ์ง ์๋ ๊ฒฝ์ฐ๋ค์ ์ด์ผ๊ธฐํ๋ค.
3. ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒฝ์ฐ
4. ์์ํจ์์ธ ๊ฒฝ์ฐ
์ฌ๊ธฐ์ ์์ํจ์๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ ๋ฌ๋ ๊ทธ๋๋ก ๋ฐํ๋๋ ๊ฒฝ์ฐ์ด๋ค. ์ฆ, ์๋ฌด๋ฐ ๊ฐ์ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ํ side-effect ๋ ๋ฐ์ํ์ง ์๋๋ค.
public class Logger {
private static int logCount = 0;
public static void log(String msg) {
logCount++;
}
}
์์ ๊ฐ์ด ํน์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์์ํจ์๊ฐ ์๋๋ค.
public class MathUtil {
public static int square(int x) {
return x * x;
}
}
๊ทธ๋ฌ๋ ์์ ๊ฐ์ด ํน์ ๊ฐ์ ๋ณํํด ๋ฐํํ๊ธฐ๋ง ํ๋ ๊ฒ์ ์์ ํจ์์ด๋ค.
๐ 3. When to Make a Method Static in Java? Example
When to Make a Method Static in Java? Example
It's not enough to know about static keyword in Java, you need to learn when to make a method static in Java. You should make a method static if it's a utility method, doesn't modify state of object and needs to be conveniently accessed outside of class.
javarevisited.blogspot.com
์์ ๊ธ์์๋ static ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋๋ ๊ฒฝ์ฐ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ์ด์ผ๊ธฐํ๋ค.
1. ์์ํจ์์ด๊ฑฐ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
2. ์ธ์คํด์ค ์์ฑ ์์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ
3. ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด์๋ง ์์ ํ๋ ๊ฒฝ์ฐ
4. ์ ํธ ๋ฉ์๋๋ค์ ํ์ฉํ๋ ๊ฒฝ์ฐ
5. ํด๋์ค๋ค์ ๊ณ์ธต ์ ์ฒด์์ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
์๋ฅผ ๋ค์ด, equals ๋ฉ์๋์ ๊ฒฝ์ฐ์๋ ๊ฐ ๊ฐ์ฒด๋ง๋ค ๊ณ ์ ํ ๋ฐฉ์์ด ์๊ธฐ์ ์ ์ ์ผ๋ก ์ ์ธํด์๋ ์๋๋ ๋ํ์ ์ธ ๋ฉ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค.
๐ ๋๋ง์ ๊ธฐ์ค
์ฌ๋ฌ ์๋ฃ๋ค์ ์ฝ์ผ๋ฉฐ ๋ด๊ฐ ๋๊ผ๋ ๊ฒฐ๋ก ์ ๊ฐ์ฒด ์งํฅ์ ๋งฅ๋ฝ์์ ‘๊ฐ์ฒด ๊ฐ ํ๋ ฅ’์ด๋ ‘๋คํ์ฑ’์ ํ์ฉํ์ง ์๋๋ค๋ฉด, ์ ์ ๋ฉ์๋๋ ์ ์ ํ ์ ํ์ด ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ฒซ๋ฒ์งธ ์ํฐํด์์ ์ด์ผ๊ธฐํ๋ฏ, ๊ฐ์ฒด์งํฅ์ ๊ฐ์ฒด๋ค์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๊ณ ๋คํ์ฑ์ ํ์ฉ ํ ์ ์์ด์ผ ํ๋ค.
๋ง์ฝ ํด๋์ค ๊ฒ์ธต ์ ์ฒด์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋์ํ ๊ฒ์ด ๋ช ํํ ๊ฒฝ์ฐ, ์ฆ ๋คํ์ฑ์ ํ์ฉํ์ง ์์๋ ๋๋ค๋ฉด ์ด๋ ์ ์ ์ผ๋ก ์ ์ธํด๋ ๋๋ค. Math ์ max ๋ฉ์๋๋ ์ ๊ณ์ธต์ ์์ธ๋ฌ ๊ฐ์ ๋์์ ํ ๊ฒ์์ด ๋๋ฌด๋ ๋ช ํํ๋ค. ๊ทธ๋ฌ๋ Student ์ goToSchool ์ด๋ผ๋ ๋ฉ์๋๋ ํ์๋ง๋ค ๋ฑ๊ต ๋ฐฉ์์ด ๋ค๋ฅผ ์ ์๋ค. ์ด๋ฆฐ์ด์ง ํ์์ ์ ๋ชจ์ฐจ๋ฅผ ํ๊ณ ์ฌ ์๋ ์๊ณ , ๊ธฐ์์ฌ ํ์์ ๊ฑธ์ด์ ์ฌ ์๋ ์๋ค. ์ด๋ฌํ ์ํฉ์์๋ ์ ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์ ์ธํด์๋ ์๋๋ค.
๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์งํฅ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๊ฐ์ฒด๊ฐ ์์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ ์ฐจ์งํฅ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์์ ์ง์ ์กฐ์ํ๋ ๊ฒฝํฅ์ด ์์ง๋ง, ๊ฐ์ฒด์งํฅ์์๋ ๊ฐ์ฒด๊ฐ ์์ ์ ์ํ๋ฅผ ์ค์ค๋ก ์บก์ํํ๊ณ ์ฑ ์์ ๊ฐ๋๋ค.
์ด์ ๊ฐ์ด ๊ฐ์ฒด์งํฅ์ '๊ฐ์ฒด'๊ฐ ์๋ฏธ ์๊ธฐ ์ํด์๋ ํน์ ์ํ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฑฐ๋ ์ธ๋ถ๋ก ๊ณต๊ฐํ์ง ์์์ผ ํ๋ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ๋ฉ์๋๊ฐ ์๋ฌด๋ฐ ์ธ์คํด์ค ๋ณ์์ ์ฐ๊ด์ฑ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋๋ค๊ณ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
๋ ๋์๊ฐ, ๋ฉ์๋๋ฅผ ํตํด ๋๋ฌด๋๋ ์๋ช ํ๊ฒ ์ด๋ค ํ๋์ ํ ์ง ๋ปํ ์์๋๋ ๊ฒฝ์ฐ์๋ ์บก์ํ์ ํ์์ฑ์ด ์๋์ ์ผ๋ก ๋ฎ์์ง๋ค. Math ์ max ๋ ์ด๋ค ํ๋์ ํ ์ง ๋ปํ ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋ Student ํด๋์ค์ goToSchool ์ด๋ผ๋ฉด? ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๋ฐฉ์์ ํํ๋์ง ์ ์๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฉ์๋์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋ค.
๋ํ ๋์์, ๊ธฐ์กด์ ํ๋ ฅ ๊ตฌ์กฐ๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์๋ ๋ฐฉํฅ์ฑ์ผ๋ก ์ค๊ณํด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ์ ์ ์ ๋ฉ์๋๋ ์ด๋ ํ ์ํ๋ ๋ณ๊ฒฝํ์ง ์๋ ์์ํจ์์ฌ์ผ ํ๋ค๊ณ ์๊ฐํ๋ค. ์์ํจ์๊ฐ ์๋๋ผ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์์ ํ๋ ฅ์ด ์ ๋์ํ๊ณ ์๋ ๊ฐ์ฒด์งํฅ ์ธ๊ณ์์ ์ ์ ๋ฉ์๋๊ฐ ์ ์๋ ํด๋์ค์ ์ธ๋ถ๋ก, ๋ค๋ฅธ ๊ฐ์ฒด์๊น์ง ์ํฅ์ ๋ผ์น ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ ์ํฅ์ ๋ฒ์๋ฅผ ํด๋์ค ๋ด๋ถ๋ก ํ์ ์ง๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก,
1. ๋ชจ๋ ํด๋์ค์ ๊ณ์ธต์์ ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒฝ์ฐ
2. ํ์ค์ ์ผ๋ก ๋์ํ๋ ๊ฒฝ์ฐ
3. ์ธ์คํด์ค ๋ณ์์ ์ฐ๊ด์ฑ์ด ์๋ ๊ฒฝ์ฐ
4. ์์ํจ์์ธ ๊ฒฝ์ฐ
๋ผ๊ณ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค!