[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item15. ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ.

2023. 2. 24. 08:37ใ†JAVA/Effective JAVA

728x90

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item15. ํด๋ž˜์Šค๋‚˜ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ. 

https://www.inflearn.com/course/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-2/dashboard

 

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต 2๋ถ€ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์ž๋ฐ” ํ•™์Šต์˜ ๋ํŒ์™• “์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ””๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ํ•™์Šตํ•˜์„ธ์š”. ์ด ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์‹๊ณผ ์‹ค๋ ฅ๋ฟ ์•„๋‹ˆ๋ผ ํ•™์Šต ๋Šฅ๋ ฅ ๋˜ํ•œ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•

www.inflearn.com

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 1๋ถ€ ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ๋‹ค ๋“ฃ๊ณ , ์ด์ œ 2๋ถ€ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค! ๐Ÿค—

1๋ถ€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 2๋ถ€๋„ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋“ค์€ ๋‚ด์šฉ์„ ๋ธ”๋กœ๊ทธ์— ์ž‘์„ฑํ•ด๋‘˜ ์˜ˆ์ •์ด๋‹ค. 

2๋ถ€์—์„œ๋Š” 4์žฅ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค, 5์žฅ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•œ๋‹ค..! ๊ฐ•์˜ ์˜ˆ์ •์€ ์ด 4๋ถ€๊นŒ์ง€ ์žˆ๋Š”๋ฐ ์•„์ง 2๋ถ€๊นŒ์ง€๋งŒ ๊ฐ•์˜๊ฐ€ ๋‚˜์™”๋‹ค..  

์–ธ์ œ 3๋ถ€ ๋‚˜์˜ฌ์ง€๋Š” ์•„์ง ๋ชจ๋ฅด๋Š”๊ฑฐ ๊ฐ™๊ธดํ•œ๋ฐ... ํ  

์•„๋ฌดํŠผ 3๋ถ€ ๋‚˜์˜ค๊ธฐ์ „๊นŒ์ง€ 2๋ถ€ ๋‹ค ๋“ฃ๊ณ  1๋ถ€, 2๋ถ€ ๋ณต์Šตํ•˜๊ณ  ์žˆ์–ด์•ผ์ง€! 

 

 

 

4์žฅ. ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค 

item15. ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ. 

์ฑ…์—์„œ ์–ด์„คํ”„๊ฒŒ ์„ค๊ณ„ํ•œ ์ปดํฌ๋„ŒํŠธ์™€ ์ž˜ ์„ค๊ณ„๋œ ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด๋Š” ๋ฐ”๋กœ ํด๋ž˜์Šค ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ์™€ ๋‚ด๋ถ€ ๊ตฌํ˜„ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ˆจ๊ฒผ๋Š๋ƒ์— ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 

์ž˜ ์„ค๊ณ„๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ชจ๋‘ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์™„๋ฒฝํžˆ ์ˆจ๊ฒจ, ๊ตฌํ˜„๊ณผ API๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ์˜ค์ง API๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ์†Œํ†ตํ•˜๋ฉฐ ์„œ๋กœ์˜ ๋‚ด๋ถ€ ๋™์ž‘์—๋Š” ์ „ํ˜€ ๊ฐœ์˜์น˜ ์•Š๋Š”๋‹ค. 

์ด๋Ÿฐ ๋ฐฉ์‹์„ ์บก์Šํ™”๋ผ๊ณ ๋„ ํ•œ๋‹ค. 

 

 

๐Ÿ‘พ ์บก์Šํ™”, ์ฆ‰ ์ •๋ณด ์€๋‹‰์˜ ์žฅ์  

1๏ธโƒฃ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ธ๋‹ค. 

: ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„๋ฅผ ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ๊ณผ ๊ฐœ๋ฐœํ•˜๋Š” ์ชฝ์ด ๋‘˜ ๋‹ค ๋™์‹œ์— ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์„œ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก  ํŒ€ ํ˜‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•  ๋•Œ์ด๋‹ค.) 

 

2๏ธโƒฃ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋น„์šฉ์„ ๋‚ฎ์ถ˜๋‹ค. 

: ํ”„๋กœ์ ํŠธ์— ์ฒ˜์Œ ํˆฌ์ž…๋˜์—ˆ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ฝ”๋“œ ํŒŒ์•…์ด ๊ต‰์žฅํžˆ ํž˜๋“ค์–ด์ง€๋Š”๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ข€ ๋” ๋นจ๋ฆฌ ํŒŒ์•…ํ•˜์—ฌ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ถ€๋‹ด๋„ ์ ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

3๏ธโƒฃ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์„ ์ค€๋‹ค.  

: ์ •๋ณด ์€๋‹‰ ์ž์ฒด๊ฐ€ ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ฃผ์ง€๋Š” ์•Š์ง€๋งŒ, ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์„ ์ค€๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ๊ณ  ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋งŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

4๏ธโƒฃ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ๋‚œ์ด๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. 

: ์ „์ฒด ํฐ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์ „์— ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋„ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋™์ž‘์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป  ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ ‘๊ทผ ์ œํ•œ์ž ์‚ฌ์šฉ ์›์น™ 

์ž๋ฐ”์—์„œ๋Š” ์บก์Šํ™”๋ฅผ ์œ„ํ•ด์„œ ์ ‘๊ทผ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ฑ(์ ‘๊ทผ ํ—ˆ์šฉ ๋ฒ”์œ„)๋ฅผ ๋ช…์‹œํ•œ๋‹ค. 

๊ฐ ์š”์†Œ์˜ ์ ‘๊ทผ์„ฑ์€ ๊ทธ ์š”์†Œ๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜์™€ ์ ‘๊ทผ ์ œํ•œ์ž๋กœ ์ •ํ•ด์ง„๋‹ค. -> ์ด์ œ ์ด ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์บก์Šํ™”์˜ ํ•ต์‹ฌ์ด๊ธฐ๋„ ํ•˜๋‹ค!!!

 

- ๋ชจ๋“  ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ฑ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ขํ˜€์•ผ ํ•œ๋‹ค. 

: ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ํ•œ ํ•ญ์ƒ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ‘๊ทผ ์ˆ˜์ค€์„ ๋ถ€์—ฌํ•ด์•ผ ํ•œ๋‹ค. 

 

- ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์— Package-private ๋˜๋Š” public์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. 

: public์œผ๋กœ ์„ ์–ธํ•˜๋ฉด  ๊ณต๊ฐœ API๊ฐ€๋˜๊ณ , package-private๋กœ ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํŒจํ‚ค์ง€๋ฅผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด package-private๋กœ ์„ ์–ธํ•˜์ž! ๊ทธ๋Ÿฌ๋ฉด ํฌ๋ผ์ด์–ธํŠธ์— ์•„๋ฌด๋Ÿฐ ํ”ผํ•ด ์—†์ด๋„ ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ์— ์ˆ˜์ •, ๊ต์ฒด, ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด์— public์œผ๋กœ ์„ ์–ธํ•œ๋‹ค๋ฉด API๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜์›ํžˆ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค...๐Ÿ˜ฎ

 

- ํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” package-private ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์— private static์œผ๋กœ ์ค‘์ฒฉ ์‹œํ‚ค์ž 

/**
 * item15. ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ.
 *  package-private๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ?
 *  ์™œ๋ƒํ•˜๋ฉด DefaultMemberService๋Š” MemberService์˜ ๊ตฌํ˜„์ฒด๋กœ ๋‚ด๋ถ€์—์„œ๋งŒ ์•Œ์•„๋„ ๋˜์ง€ ์•Š๋Š”๊ฐ€? -> ์™ธ๋ถ€(ํด๋ผ์ด์–ธํŠธ)์—์„œ๋Š” ์•Œ ํ•„์š”๊ฐ€ ์—†์ง€ ์•Š๋‚˜
 */
class DefaultMemberService implements MemberService
{
   private String name;
   
   /**
    * ํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” package-private ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š”
    * ํ•ด๋‹น ํด๋ž˜์Šค์— private static์œผ๋กœ ์ค‘์ฒฉ ์‹œํ‚ค์ž !
    */
   private static class PrivateStaticClass
   {
      // ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ์กด์žฌํ•˜๋˜ ๊ฒƒ์„ ํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ค‘์ฒฉ์‹œํ‚ค์ž~ ํ•ด์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
      // ์ด๋ ‡๊ฒŒ private static์œผ๋กœ ์ค‘์ฒฉ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋งž๋‹ค. (DefaultMemberSerivce์™€ ๋…๋ฆฝ์ ์ธ ๊ด€๊ณ„)
   }
   
   private class PrivateClass
   {
      void doPrint() // ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ์‹ธ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ name์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      {
         System.out.println("name = " + name);
      }
   }
   
   public static void main(String[] args)
   {
      // final chapter03.item15.class_and_interface.member.DefaultMemberService chapter03.item15.class_and_interface.member.DefaultMemberService$PrivateClass.this$0
      Arrays.stream(PrivateClass.class.getDeclaredFields()).forEach(System.out::println);
   }
   
}

์ด๋ ‡๊ฒŒ ํ†ฑ๋ ˆ๋ฒจ๋กœ ๋‘๋ฉด ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, private static์œผ๋กœ ์ค‘์ฒฉ์‹œํ‚ค๋ฉด ๋ฐ”๊นฅ ํด๋ž˜์Šค ํ•˜๋‚˜์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์— private static์œผ๋กœ ์ค‘์ฒฉ ์‹œํ‚ค๋Š”๊ฒŒ ์ข‹๋‹ค. 

์™œ๋ƒํ•˜๋ฉด public์ผ ํ•„์š”๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ ์ ‘๊ทผ ์ˆ˜์ค€์„ package private ํ†ฑ ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋กœ ์ขํžˆ๋ฉด 

public ํด๋ž˜์Šค๋Š” ๊ทธ ํŒจํ‚ค์ง€์˜ API์ธ ๋ฐ˜๋ฉด, package-private ํ†ฑ๋ ˆ๋ฒจ์€ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป  ๋ฉค๋ฒ„(ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ค‘์ฒฉ ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค)์˜ ์ ‘๊ทผ ์ œํ•œ์ž ์›์น™ 

 

๋ฉค๋ฒ„(ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ค‘์ฒฉ ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค)์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ ์ˆ˜์ค€์€ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

- private

: ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- package-private

: ๋ฉค๋ฒ„๊ฐ€ ์†Œ์†๋œ ํŒจํ‚ค์ง€ ์•ˆ์˜ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ์ ‘๊ทผ ์ˆ˜์ค€์ด๋‹ค. 

 

- protected 

: package-private์˜ ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผํฌํ•จํ•˜๋ฉฐ, ์ด ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.  

 

- public 

: ๋ชจ๋“  ๊ณณ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๋ฉค๋ฒ„(ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ค‘์ฒฉ ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค)์˜ ์ ‘๊ทผ ์ œํ•œ์ž ์›์น™ 

- private์™€ package-private๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ด๊ณ , public ํด๋ž˜์Šค์˜ protected์™€ public์€ ๊ณต๊ฐœ API์ด๋‹ค. 

 

- public ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋Š” ๋˜๋„๋ก public์ด ์•„๋‹ˆ์–ด์•ผ ํ•œ๋‹ค. -> ํด๋ž˜์Šค์˜ ๊ณต๊ฐœ API๋ฅผ ์„ค๊ณ„ํ•œ ํ›„์— ๊ทธ ์™ธ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๋Š” private๋กœ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ ์˜ค์ง ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๋ฉค๋ฒ„์— ํ•œํ•ด์„œ๋งŒ package-private๋กœ ํ’€์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

- ๊ทธ๋ฆฌ๊ณ  ๋‹จ์ง€ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ private๋ฅผ package-private๋กœ ํ’€์–ด์ฃผ๋Š” ๊ฒƒ์€ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๋ฉค๋ฒ„๋ฅผ ๊ณต๊ฐœ API๋กœ๋งŒ๋“ค์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค!! 

 

- ํด๋ž˜์Šค์—์„œ public static final ๋ฐฐ์—ด ํ•„๋“œ๋ฅผ ๋‘๊ฑฐ๋‚˜ ์ด ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์„œ๋„ ์•ˆ๋œ๋‹ค! 

 

 

 

๐Ÿ˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ 

์ž๋ฐ” 9์—์„œ๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋˜๋ฉด์„œ ๋‘ ๊ฐ€์ง€์˜ ์•”๋ฌต์  ์ ‘๊ทผ ์ˆ˜์ค€์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. 

๋ชจ๋“ˆ์ด๋ž€ ํŒจํ‚ค์ง€์˜ ํŒจํ‚ค์ง€๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ํŒจํ‚ค์ง€๊ฐ€ ํด๋ž˜์Šค๋“ค์˜ ๋ฌถ์Œ์ด๋“ฏ์ด, ๋ชจ๋“ˆ์€ ํŒจํ‚ค์ง€๋“ค์˜ ๋ฌถ์Œ์ด๋‹ค. 

 

๋ชจ๋“ˆ์€ ์ž์‹ ์ด ์†ํ•˜๋Š” ํŒจํ‚ค์ง€ ์ค‘ ๊ณต๊ฐœ(export)ํ•  ๊ฒƒ๋“ค์„ module-info.javaํŒŒ์ผ์— ์„ ์–ธํ•œ๋‹ค. protected ๋˜๋Š” public์œผ๋กœ ์„ ์–ธ๋œ ๋ฉค๋ฒ„๋“ค์ด๋ผ๋„ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. (๋ฌผ๋ก  ๋ชจ๋“ˆ ์•ˆ์—์„œ๋Š” exports ์—ฌ๋ถ€์™€๋Š” ์ƒ๊ด€ ์—†๋‹ค.) 

 

์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜๋ฉด ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ฐ™์€ ๋ชจ๋“ˆ์„ ์ด๋ฃจ๋Š” ํŒจํ‚ค์ง€ ์•ˆ์—์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์ด ๋ชจ๋“ˆ์˜ jar ํŒŒ์ผ์„ ์ž์‹ ์˜ ๋ชจ๋“ˆ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์ŠคํŒจ์Šค์— ๋‘๋ฉด ๊ทธ ๋ชจ๋“ˆ ์•ˆ์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€๋Š” ๋งˆ์น˜ ๋ชจ๋“ˆ์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ–‰๋™ํ•œ๋‹ค. ์ฆ‰, ๋ชจ๋“ˆ์ด ๊ณต๊ฐœํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด public ํด๋ž˜์Šค๊ฐ€ ์„ ์–ธํ•œ ๋ชจ๋“  ๋ฉค๋ฒ„๋ฅผ ๋ชจ๋“ˆ ๋ฐ–์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค..! 

 

 

โ— ์‚ฌ์‹ค ๋ชจ๋“ˆ์˜ ์žฅ์ ์„ ์ œ๋Œ€๋กœ ๋ˆ„๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ •ํ•ด์•ผ ํ•  ์ผ๋“ค์ด ๋งŽ๋‹ค. 

๋จผ์ € ํŒจํ‚ค์ง€๋“ค์„ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ , ๋ชจ๋“ˆ ์„ ์–ธ์— ํŒจํ‚ค์ง€๋“ค์˜ ๋ชจ๋“  ์˜์กด์„ฑ์„ ๋ช…์‹œํ•ด์•ผ ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์†Œ์Šค ํŠธ๋ฆฌ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๊ณ .. ๋ชจ๋“ˆ ์•ˆ์œผ๋กœ๋ถ€ํ„ฐ ์ผ๋ฐ˜ ํŒจํ‚ค์ง€๋กœ์˜ ๋ชจ๋“  ์ ‘๊ทผ์— ํŠน๋ณ„ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผ ํ•œ๋‹ค...

๋ชจ๋“ˆ์„ ํ™œ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€  jdk ์ธ๋ฐ jdk ์™ธ์—๋„ ๋ชจ๋“ˆ ๊ฐœ๋…์ด ๋„๋ฆฌ ์ด์šฉ๋˜๊ธฐ์—๋Š” ์•„์ง ์ด๋ฅธ ๊ฐ์ด ์žˆ๊ณ  ๋‹น๋ถ„๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๊ฒ ๋‹ค๋ผ๊ณ ... ์ฑ…์— ์จ์žˆ๋‹ค..ใ…Žใ…Ž 

 

 

 

 

 

 

 

๐Ÿ“š ์ •๋ฆฌ 

ํ”„๋กœ๊ทธ๋žจ ์š”์†Œ์˜ ์ ‘๊ทผ์„ฑ์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์œผ๋กœ ํ•˜๊ณ 
๊ผญ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊ณจ๋ผ์„œ ์ตœ์†Œํ•œ์˜ public API๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. 

๊ทธ ์™ธ์—๋Š” ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉค๋ฒ„๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ API๋กœ ๊ณต๊ฐœ๋˜๋Š” ์ผ์ด ์—†๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. 

public ํด๋ž˜์Šค๋Š” ์ƒ์ˆ˜์šฉ public static final ํ•„๋“œ ์™ธ์—๋Š” ์–ด๋– ํ•œ public ํ•„๋“œ๋„ ๊ฐ€์ ธ์„œ๋Š” ์•ˆ๋œ๋‹ค!! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90