GiantStepDEV
Published 2023. 2. 22. 14:21
OOP(2) static vs instance ๐Ÿ“š Study/OOP

์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” '์ถ”์ƒํ™”'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค!

https://developyanggaeng.tistory.com/190

 

[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] OOP(1) ์ถ”์ƒํ™”๋Š” ๋ชจ๋ธ๋ง

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ๊ด€๊ณ„์˜ ์˜คํ•ด์— ๋Œ€ํ•ด์„œ๋Š” 'ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด' ๊ธ€์— ์ •๋ฆฌํ•˜์—ฌ ์—…๋กœ๋“œ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ๊ด€๊ณ„๋Š” ๋ถ•์–ด๋นตํ‹€๊ณผ ๋ถ•์–ด๋นต์ด ๋งž๋‚˜์— ๋Œ€ํ•œ ์ฃผ์ œ https://developyanggaeng.tistory.com/189

developyanggaeng.tistory.com

๊ทธ ์—ฐ์žฅ์„ ์œผ๋กœ static ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฐ์šธ ๋•Œ static์ด ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ ธ๋˜..


ํด๋ž˜์Šค ๋ฉค๋ฒ„ vs ๊ฐ์ฒด ๋ฉค๋ฒ„ = static ๋ฉค๋ฒ„ vs instance ๋ฉค๋ฒ„

์ง€๊ธˆ๊นŒ์ง€ ๋ฌด์ˆ˜ํžˆ ๊ฐ์ฒด์™€ ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋Š”๋ฐ์š”!

 

์ด์ œ ๊ฐ์ฒด์™€ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ๋ˆˆ๊ฐ๊ณ ๋„ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๊ฒฝ์— ์ด๋ฅด๋ €์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•˜๋ฉฐ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ฐ์ฒด๋Š” ์œ ์ผ๋ฌด์ดํ•˜๊ฒŒ ์กด์žฌํ•˜๋Š” ์‹ค์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์†์„ฑ์— ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,

ํด๋ž˜์Šค๋Š” ๊ฐœ๋…์ด๋ฉด์„œ ๋ถ„๋ฅ˜์ผ ๋ฟ์ด๋ฏ€๋กœ ์†์„ฑ์— ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋ฒˆ์—” ์ด ์งˆ๋ฌธ์— ํ•œ ๋ฒˆ ๋‹ต์„ ํ•ด๋ณผ๊นŒ์š”?

  • ๋ฏธํ‚ค๋งˆ์šฐ์Šค์˜ ๊ผฌ๋ฆฌ๋Š” ๋ช‡ ๊ฐœ์ธ๊ฐ€์š”?
  • ์ฅ์˜ ๊ผฌ๋ฆฌ๋Š” ๋ช‡ ๊ฐœ์ธ๊ฐ€์š”?
  • ์ œ๋ฆฌ์˜ ๊ผฌ๋ฆฌ๋Š” ๋ช‡ ๊ฐœ์ธ๊ฐ€์š”?

ํฐ ์‹œ๊ฐ„์„ ๋“ค์ด์ง€ ์•Š๊ณ ๋„ ์ •๋‹ต์€ 1๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฅ์˜ ๊ผฌ๋ฆฌ ๊ฐœ์ˆ˜๋Š” 1๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(์ •๋ง ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ˆ์™ธ๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

์ฐธ๊ณ ๋กœ ์œ„ ์งˆ๋ฌธ์—์„œ ๋ฏธํ‚ค๋งˆ์šฐ์Šค์™€ ์ œ๋ฆฌ๋Š” ๊ฐ์ฒด์ด๊ณ , ์ฅ๋Š” ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฅ ๊ฐ์ฒด์˜ ๊ผฌ๋ฆฌ ๊ฐœ์ˆ˜๋Š” 1๊ฐœ๋กœ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์งˆ๋ฌธํ•ด๋„ 1๊ฐœ๋ผ๋Š” ๋‹ต์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด ๋ง์„ ์ฝ”๋“œ๋กœ ์˜ฎ๊ฒจ๋ณผ๊นŒ์š”?

public class Mouse {
	public String name;
    public int age;
    public int countOfTail;
}

public class Main {
	public static void main(String[] args) {
    	Mouse micky = new Mouse();
        Mouse jerry = new Mouse();
        Mouse mouse = new Mouse();
        
        micky.countOfTail = 1;
        jerry.countOfTail = 1;
        mouse.countOfTail = 1;
    }
}

๋ชจ๋“  Mouse ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ƒ์„ฑ๋œ Mouse ๊ฐ์ฒด ์ˆ˜๋งŒํผ ์“ธ๋ฐ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„๋จน๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตณ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์ด๋Ÿฐ ๊ฒƒ์„ ๋ณด๋ฉด ๋งˆ๊ตฌ๋งˆ๊ตฌ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์€ ์š•๊ตฌ๊ฐ€ ๋“ค๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ static ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

public class Mouse {
	public String name;
    public int age;
    public static int countOfTail = 1;
}

public class Main {
	public static void main(String[] args) {
    	Mouse micky = new Mouse();
        Mouse jerry = new Mouse();
        Mouse mouse = new Mouse();
        
        System.out.println(Mouse.countOfTail);
        System.out.println(micky.countOfTail);
        System.out.println(jerry.countOfTail);
    }
}
1
1
1

์ด๋ ‡๊ฒŒ static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ์†์„ฑ์„ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ์†์„ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ static์ด ์•ˆ ๋ถ™์€ ์†์„ฑ์€? ๊ฐ์ฒด ๋ฉค๋ฒ„ ์†์„ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์†์„ฑ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ”์†Œ๋“œ๋„ static ํ‚ค์›Œ๋“œ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ, ๊ฐ์ฒด ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ main()๋Š” ํ•ญ์ƒ static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๋Š” ๊ฒƒ์ด์ฃ !

 

ํด๋ž˜์Šค ๋ฉค๋ฒ„๋“ค์€ static ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒœํ‹ฑ ์˜์—ญ์— ์ƒ์ฃผํ•˜๋ฏ€๋กœ static(์ •์ ) ๋ฉค๋ฒ„๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ „ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋“ฏ์ด ๊ฐ์ฒด ๋ฉค๋ฒ„๋“ค์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ด๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

์ •๋ฆฌ๐Ÿ’ก

ํด๋ž˜์Šค ๋ฉค๋ฒ„ == static ๋ฉค๋ฒ„ == ์ •์ ๋ฉค๋ฒ„

๊ฐ์ฒด ๋ฉค๋ฒ„ == ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„

 

์ด๋Ÿฌํ•œ ์ •์  ๋ฉค๋ฒ„ ์†์„ฑ์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ•์•„์ง€ ํด๋ž˜์Šค์˜ ๋‹ค๋ฆฌ ๊ฐœ์ˆ˜
  • ์Šน์šฉ์ฐจ ํด๋ž˜์Šค์˜ ๋ฐ”ํ€ด ๊ฐœ์ˆ˜

์ง€๊ธˆ ๋‹น์žฅ ์ƒ๊ฐ๋‚˜๋Š” ์˜ˆ์‹œ๊ฐ€ ์ด๊ฒƒ ๋ฐ–์— ์—†๋„ค์š” ^^;;;

 

์ •์  ๋ฉ”์†Œ๋“œ๋Š” ์ž๋ฐ”์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Math ํด๋ž˜์Šค๋ฅผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Math ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑ ์•ˆํ•˜๊ณ  ๋ฐ”๋กœ ์“ฐ๊ณค ํ•˜์ฃ .

(์˜ˆ. Math.random(), Math.floor())

 

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฑธ๊นŒ์š”?

โžก๏ธ ์ •์  ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์— ์†ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

     ํด๋ž˜์Šค๋Š” JVM ๊ตฌ๋™์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ ์˜์—ญ์— ๋ฐ”๋กœ ๋ฐฐ์น˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์กด์žฌ ์—ฌ๋ถ€ ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™”

ํ˜น์‹œ ์Šคํƒ ์˜์—ญ์— ์ƒ๊ธฐ๋Š” ๋ณ€์ˆ˜๋“ค์„ ๋ญ๋ผ๊ณ  ํ•˜๋Š”์ง€ ์•„์‹œ๋‚˜์š”?

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค.

์Šคํƒ ์˜์—ญ : ์ง€์—ญ ๋ณ€์ˆ˜
ํž™ ์˜์—ญ : ๊ฐ์ฒด ๋ณ€์ˆ˜(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)
์Šคํƒœํ‹ฑ ์˜์—ญ : ์ •์  ๋ณ€์ˆ˜

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ณ„๋„๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

ํ—ˆ๋‚˜ ํด๋ž˜์Šค ์†์„ฑ๊ณผ ๊ฐ์ฒด ์†์„ฑ์€ ๋ณ„๋„๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ •์ˆ˜ํ˜•์€ 0, ์‹ค์ˆ˜ํ˜•์€ 0.0, ๋…ผ๋ฆฌํ˜•์€ false, ๊ฐ์ฒด๋Š” null๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ static ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ์š”.

์ œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋˜ ์˜๋ฌธ์ ์ด ํ•ด๊ฒฐ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ ์ด ๊ธ€์„ ์ฝ์œผ์‹œ๋Š” ๋ถ„๋“ค๋„ ์˜๋ฌธ์ ์ด ๋ชจ๋‘ ํ•ด๊ฒฐ๋˜์…จ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ๋ถ•์–ด๋นตํ‹€๊ณผ ๋ถ•์–ด๋นต ์ฒ˜๋Ÿผ ์˜คํ•ด๊ฐ€ ๋งŽ์€ '์ƒ์†'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

'๐Ÿ“š Study > OOP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

OOP(3) ์ƒ์†: ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ + LSP, ISP  (0) 2023.02.22
OOP(1) ์ถ”์ƒํ™”๋Š” ๋ชจ๋ธ๋ง  (0) 2023.02.22
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!