์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[Java] ๊ฐ์ฒด์ง€ํ–ฅ์„ ํ•ด์น˜์ง€ ์•Š์œผ๋ฉด์„œ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

hee-ro 2025. 4. 14. 23:36

๐Ÿ“š ์ •์  ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ธฐ์ค€์„ ์ฐพ์•„์„œ

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋ฉด, ๋ถˆ์‘ฅ ๋ถˆ์‘ฅ ์ •์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‹ถ์–ด์ง„๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋šœ๋ ทํ•œ ๋‹จ์ ์— ๋Œ€ํ•œ ์ธ์‹ ์—†์ด, ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ธฐ์ค€ ์—†์ด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋‘๋ ค์›Œ ๋‚˜์˜ ๊ธฐ์ค€์„ ์„ธ์›Œ๋ณด๊ณ ์ž ์—ฌ๋Ÿฌ ์•„ํ‹ฐํด๋“ค์„ ์ฝ์–ด ๋ณด์•˜๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ์ข‹์•˜๋˜ ์„ธ ๊ฐ€์ง€๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ณ , ๋‚˜์˜ ๊ธฐ์ค€์„ ์ƒ๊ฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


๐Ÿ“ 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. ์ˆœ์ˆ˜ํ•จ์ˆ˜์ธ ๊ฒฝ์šฐ

 

๋ผ๊ณ  ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ๋‹ค!