๐Ÿ” Java์˜ protected๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

2025. 7. 2. 16:05ใ†๐Ÿ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/JAVA

๋ฐ˜์‘ํ˜•

๐Ÿ” Java์˜ protected๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

"public๋„ ์žˆ๋Š”๋ฐ ์™œ ๊ตณ์ด protected๋ฅผ ์“ธ๊นŒ?"


โœจ ์ด๋Ÿฐ ๊ณ ๋ฏผ, ํ•ด๋ณด์…จ๋‚˜์š”?

“protected๋Š” ๊ฐœ๋…์€ ์•Œ๊ฒ ๋Š”๋ฐ, ์‹ค์ œ๋กœ ์™œ ์“ฐ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š”.”
“public์ด๋ฉด ๋‹ค ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?”
“๋ฉด์ ‘์—์„œ ์ ‘๊ทผ์ œ์–ด์ž ์ฐจ์ด์ ์€ ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ค๊ณ„ ๊ด€์ ์—์„œ ์™œ ์“ฐ๋Š”์ง€๋Š” ์• ๋งคํ•ด์š”…”

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ '์ด๋ก ์€ ์•„๋Š”๋ฐ, ์„ค๊ณ„์—์„œ ์™œ ๊ทธ๋ ‡๊ฒŒ ์จ์•ผ ํ•˜๋Š”์ง€' ๊ณ ๋ฏผ์ด ์ƒ๊ธฐ์ฃ .
์ด ๊ธ€์—์„œ๋Š” protected์˜ ์‹ค์ œ ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ์„ค๊ณ„ ์ด์œ ๋ฅผ, ๊ฐœ๋ฐœ์ž์™€ ๋ฉด์ ‘๊ด€ ๊ด€์  ๋ชจ๋‘์—์„œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.


๐Ÿ“˜ ๊ฐœ๋… ์ •๋ฆฌ: ์ ‘๊ทผ์ œ์–ด์ž์˜ ๋น„๊ต

์ ‘๊ทผ ์ œ์–ด์ž ๊ฐ™์€ ํด๋ž˜์Šค ๊ฐ™์€ ํŒจํ‚ค์ง€ ํ•˜์œ„ ํด๋ž˜์Šค ๋‹ค๋ฅธ ํŒจํ‚ค์ง€

private โœ… โŒ โŒ โŒ
(default) โœ… โœ… โŒ โŒ
protected โœ… โœ… โœ… โŒ
public โœ… โœ… โœ… โœ…
  • protected: ํŒจํ‚ค์ง€ ๋‚ด๋ถ€ + ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • public: ๋ชจ๋“  ๊ณณ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ‘จ‍๐Ÿ’ป ๊ฐœ๋ฐœ์ž ์ž…์žฅ: ์–ธ์ œ protected๋ฅผ ์จ์•ผ ํ• ๊นŒ?

โœ… 1. ์ƒ์†์„ ํ†ตํ•œ ํ™•์žฅ๋งŒ ํ—ˆ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ

public abstract class Animal {
    protected void breathe() {
        System.out.println("์ˆจ์„ ์‰ฐ๋‹ค");
    }
}
  • Animal์„ ์ƒ์†ํ•œ Dog, Cat ํด๋ž˜์Šค์—์„œ๋Š” breathe() ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์™ธ๋ถ€์—์„œ animal.breathe()๋Š” ๋ถˆ๊ฐ€๋Šฅ

๐Ÿ”Ž ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์ˆจ๊ธฐ๋ฉด์„œ, ์ž์‹ ํด๋ž˜์Šค์—๊ฒŒ๋งŒ ์—ด์–ด์ฃผ๋Š” “ํ™•์žฅ ํฌ์ธํŠธ”


โœ… 2. ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์˜๋„๋œ ํ™•์žฅ์„ ์„ค๊ณ„ํ•  ๋•Œ

public abstract class BaseController {
    protected void validate() {
        // ๊ธฐ๋ณธ ๊ฒ€์ฆ ๋กœ์ง
    }
}
  • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด extends BaseControllerํ•ด์„œ validate()๋ฅผ ์žฌ์‚ฌ์šฉ
  • ๋‹จ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” BaseController์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ์ ‘๊ทผ ๋ถˆ๊ฐ€

๐Ÿ”Ž Spring, JPA, Hibernate ๋“ฑ ๋Œ€ํ˜• ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ์Šค์— protected ๋งŽ์ด ์‚ฌ์šฉ


๐Ÿง‘‍โš–๏ธ ๋ฉด์ ‘๊ด€ ์ž…์žฅ์—์„œ ๋ณด๋Š” ํฌ์ธํŠธ

๐Ÿ’ฌ ๋ฉด์ ‘ ์งˆ๋ฌธ ์˜ˆ์‹œ

"Java์˜ protected๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?"
"์ ‘๊ทผ์ œ์–ด์ž๋ฅผ public์ด ์•„๋‹ˆ๋ผ protected๋กœ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๋ญ์ฃ ?"


โœ… ์ข‹์€ ๋‹ต๋ณ€ ์˜ˆ์‹œ

"protected๋Š” ์ฃผ๋กœ ์ƒ์†์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉด์„œ,
๋ถˆํ•„์š”ํ•œ ์™ธ๋ถ€ ์ ‘๊ทผ์€ ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์ฒ˜๋Ÿผ ํŠน์ • ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค๋งŒ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค."


โœ… ํ•œ๋ˆˆ์— ์ •๋ฆฌ

์ƒํ™ฉ ์ ์ ˆํ•œ ์ ‘๊ทผ์ œ์–ด์ž

๋‚ด๋ถ€์—์„œ๋งŒ ์“ฐ์ž„ private
ํŒจํ‚ค์ง€ ์•ˆ์—์„œ๋งŒ ๊ณต์œ  (default)
์ž์‹ ํด๋ž˜์Šค์—๋งŒ ๊ณต์œ  protected
์–ด๋””์„œ๋“  ๊ณต์œ  ๊ฐ€๋Šฅ public

โœ๏ธ ๋งˆ๋ฌด๋ฆฌ

Java์—์„œ protected๋Š” ๋‹จ์ˆœํžˆ "์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€"๋ฅผ ๋„˜์–ด์„œ
"์ด ๊ธฐ๋Šฅ์€ ๋„ˆ๊ฐ€ ์ƒ์†ํ•ด์„œ ํ™•์žฅํ•  ๋• ์จ๋„ ๋˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ฑด๋“ค์ง€ ๋งˆ"
๋ผ๋Š” ์„ค๊ณ„์ž์˜ ์˜๋„์™€ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ , ๋ณ€๊ฒฝ์— ๊ฐ•ํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ๊ฐœ๋…์ด์ฃ .

๋ฐ˜์‘ํ˜•

'๐Ÿ“ ๊ฐœ๋ฐœ ยท ํ”„๋กœ๊ทธ๋ž˜๋ฐ > JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JAVA #42  (0) 2020.04.21
JAVA ์ƒ์†  (0) 2020.04.21
JAVA #40  (0) 2020.03.31
JAVA #39  (0) 2020.03.31
JAVA #38  (0) 2020.03.31