PL(Programming Language)/Java

[Java] ์ž๋ฐ”์˜ ์ ‘๊ทผ ์ง€์ •์ž (private, protected, public, default), static ๋ฉค๋ฒ„, final ํด๋ž˜์Šค

ํƒฑ์ ค 2021. 11. 4. 13:49

์ ‘๊ทผ ์ง€์ •์ž

  • private, protected, public, ๋””ํดํŠธ(์ ‘๊ทผ ์ง€์ •์ž ์ƒ๋žต)
  • ๋ชฉ์ 
    • ํด๋ž˜์Šค๋‚˜ ์ผ๋ถ€ ๋ฉค๋ฒ„๋ฅผ ๊ณต๊ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉ
    • ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ์บก์Šํ™” ์ •์ฑ…์€ ๋ฉค๋ฒ„๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ

ํด๋ž˜์Šค ์ ‘๊ทผ ์ง€์ •

  • ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ง€ ์ง€์ •
  • public ํด๋ž˜์Šค -> ๋‹ค๋ฅธ ๋ชจ๋“  ํด๋ž˜์Šค์—๊ฒŒ ์ ‘๊ทผ ํ—ˆ์šฉ
  • ๋””ํดํŠธ ํด๋ž˜์Šค -> ์ ‘๊ทผ ์ง€์ •์ž ์ƒ๋žต, package-private๋ผ๊ณ ๋„ ํ•จ, ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค์—๋งŒ ์ ‘๊ทผ ํ—ˆ์šฉ 
    ํŒจํ‚ค์ง€ P์—์„œ Q ๋‚ด์˜ ๋””ํดํŠธ ํด๋ž˜์Šค C ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ

๋งด๋ฒ„ ์ ‘๊ทผ ์ง€์ •

  • public
    • ํŒจํ‚ค์ง€์— ๊ด€๊ณ„ ์—†์ด ๋ชจ๋“  ํด๋ž˜์Šค์—์„ธ ์ ‘๊ทผ ํ—ˆ์šฉ
  • private
    • ๋™์ผ ํด๋ž˜์Šค ๋‚ด์—๋งŒ ์ ‘๊ทผ ํ—ˆ์šฉ
    • ์ƒ์†๋ฐ›์€ ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • protected
    • ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํด๋ž˜์Šค์—์„ธ ์ ‘๊ทผ ํ—ˆ์šฉ
    • ์ƒ์† ๋ฐ›์€ ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์žˆ์–ด๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋””ํดํŠธ(default)
    • ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด ๋‹ค๋ฅธ ํด๋ž˜์Šค์—๊ฒŒ ์ ‘๊ทผ ํ—ˆ์šฉ


์•„๋ž˜ ์ฝ”๋“œ์˜ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์ด์œ ?

class Sample {
	public int a;
    private int b;
    int c;
}

public class AccessEx{
	public static void main(String[] args) {
    	Sample aClass = new Sample();
        aClass.a = 10;
        aClass.b = 10; // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
        aClass.c = 10;
    }
}

-> Sample ํด๋ž˜์Šค์˜ a์™€ c๋Š” ๊ฐ๊ฐ public, default ์ ‘๊ทผ ์ง€์ •์ž๋กœ ์„ ์–ธ์ด ๋˜์–ด ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†ํ•œ AccesEx ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

-> Sample ํด๋ž˜์Šค์˜ b๋Š” private์œผ๋กœ ์„ ์–ธ์ด ๋˜์–ด AccessEx ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ


static ๋ฉค๋ฒ„

  • static ๋ฉค๋ฒ„ ์„ ์–ธ
class StaticSample {
	int n; 			// non-static ํ•„๋“œ
    void g() {...}  // not-static ๋ฉ”์†Œ๋“œ
    
    static int m; 			// static ํ•„๋“œ
    static void f() {...}	// static ๋ฉ”์†Œ๋“œ
}

 

  • ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ non-static ๋ฉค๋ฒ„์˜ ์ƒ์„ฑ
    • non-static ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ๊ฐ์ฒด๋งˆ๋‹ค ์ƒ๊ธด๋‹ค.
    • static ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๊ฐ์ฒด๋“ค์— ์˜ํ•ด ๊ณต์œ ๋œ๋‹ค.
  • static ๋ฉค๋ฒ„์™€ non-static ๋ฉค๋ฒ„ ํŠน์„ฑ

      non-static ๋ฉค๋ฒ„ static ๋ฉค๋ฒ„
    ์„ ์–ธ class Sample {
        int n;
        void g() {...}
    }
    class Sample {
        static int m;
        static void g() {...}
    }
    ๊ณต๊ฐ„์  ํŠน์„ฑ ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด๋งˆ๋‹ค ๋ณ„๋„ ์กด์žฌ
     - ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋ผ๊ณ  ๋ถ€๋ฆ„
    ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค ๋‹น ํ•˜๋‚˜ ์ƒ์„ฑ
     - ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€ ์•„๋‹Œ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ƒ์„ฑ
     - ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ผ๊ณ  ๋ถ€๋ฆ„
    ์‹œ๊ฐ„์  ํŠน์„ฑ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์— ๋ฉค๋ฒ„ ์ƒ์„ฑ
     - ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธธ ๋•Œ ๋ฉค๋ฒ„๋„ ์ƒ์„ฑ
     - ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋ฉค๋ฒ„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
     - ๊ฐ์ฒด ์‚ฌ๋ผ์ง€๋ฉด ๋ฉค๋ฒ„๋„ ์‚ฌ๋ผ์ง
    ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์— ๋ฉค๋ฒ„ ์ƒ์„ฑ
     - ๊ฐ์ฒด ์ƒ๊ธฐ๊ธฐ ์ „์— ์ด๋ฏธ ์ƒ์„ฑ
     - ๊ฐ์ฒด ์ƒ๊ธฐ๊ธฐ ์ „์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
     - ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ ธ๋„ ๋ฉค๋ฒ„๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ
     - ๋ฉค๋ฒ„๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ์‚ฌ๋ผ์ง
    ๊ณต์œ ์˜ ํŠน์„ฑ ๊ณต์œ ๋˜์ง€ ์•Š์Œ
     - ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด ๋‚ด์— ๊ฐ๊ฐ ๊ณต๊ฐ„ ์œ ์ง€
    ๋™์ผํ•œ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์— ์˜ํ•ด ๊ณต์œ 
  • static ๋ฉค๋ฒ„ ์‚ฌ์šฉ
    • ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ 
    • StaticSample.m = 3; // ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ static ํ•„๋“œ ์ ‘๊ทผ StaticSample.f(); // ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ static ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœโ€‹
    • ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
      StaticSample b1 = new StaticSample();
      
      b1.m = 3; // ๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ static ํ•„๋“œ ์ ‘๊ทผ
      b1.f();   // ๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ static ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœโ€‹
    • non-static ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ

  • static์˜ ํ™œ์šฉ
    • ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ „์—ญ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ
    • ๊ณต์œ  ๋ฉค๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ
  • static ๋ฉ”์†Œ๋“œ์˜ ์ œ์•ฝ ์กฐ๊ฑด
    • static ๋ฉ”์†Œ๋“œ๋Š” ์˜ค์ง static ๋ฉค๋ฒ„๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
      • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ๋„ static ๋ฉ”์†Œ๋“œ๋Š” ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, non-static ๋ฉค๋ฒ„ ํ™œ์šฉ ๋ถˆ๊ฐ€
      • non-static ๋ฉ”์†Œ๋“œ๋Š” static ๋ฉค๋ฒ„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
        class StaticMethod {
        	int n;
            void f1(int x) {n = x;} // ์ •์ƒ
            void f2(int x) {m = x;} // ์ •์ƒ
            static int m;
            static void s1(int x) {n = x;} // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜, static ๋ฉ”์†Œ๋“œ๋Š” non-static ํ•„๋“œ n ์‚ฌ์šฉ ๋ถˆ๊ฐ€
            static void s2(int x) {f1(3);} // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜, static ๋ฉ”์†Œ๋“œ๋Š” non-static ๋ฉ”์†Œ๋“œ f1() ์‚ฌ์šฉ ๋ถˆ๊ฐ€
            static void s3(int x) {m = x;} // ์ •์ƒ, static ๋ฉ”์†Œ๋“œ๋Š” static ํ•„๋“œ m ์‚ฌ์šฉ ๊ฐ€๋Šฅ
            static void s4(int x) {s3(3);} // ์ •์ƒ, static ๋ฉ”์†Œ๋“œ๋Š” static ๋ฉ”์†Œ๋“œ s3() ํ˜ธ์ถœ ๊ฐ€๋Šฅ
        }โ€‹
      • static ๋ฉ”์†Œ๋“œ๋Š” this ์‚ฌ์šฉ ๋ถˆ๊ฐ€ -> static ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด ์—†์ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด this ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค!
        static void f() {this.n = x;} // ์˜ค๋ฅ˜. static ๋ฉ”์†Œ๋“œ์—์„œ this ์‚ฌ์šฉ ๋ถˆ๊ฐ€
        static void g() {this.m = x;} // ์˜ค๋ฅ˜. static ๋ฉ”์†Œ๋“œ์—์„œ this ์‚ฌ์šฉ ๋ถˆ๊ฐ€โ€‹

static ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ง„ Calc ํด๋ž˜์Šค ์ž‘์„ฑ - ์ „์—ญ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” abs, max, min 3๊ฐœ ํ•จ์ˆ˜๋ฅผ static ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ๋ก€๋กœ ๋ณด์—ฌ๋ผ.

class Calc{
	public static int abs(int a) {
		return a > 0? a : -a; // a>0์ด๋ฉด a, ์•„๋‹ˆ๋ฉด -a ์กฐ๊ฑด๋ฌธ
    }
	public static int max(int a , int b) {
		return (a > b)? a : b;
	}
	public static int min(int a , int b) {
		return (a > b)? b: a;
	}
}

public class CalcEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Calc.abs(-5));
		System.out.println(Calc.max(10, 8));
		System.out.println(Calc.min(-3, -8));
	}

}

Calc ํด๋ž˜์Šค์—์„œ static์„ ์ง€์šฐ๋ฉด ์ „์—ญ ํ•จ์ˆ˜์˜ ์—ญํ•  ๋ชปํ•จ -> ์—๋Ÿฌ ๋ฐœ์ƒ


final ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ

  • final ํด๋ž˜์Šค - ๋” ์ด์ƒ ํด๋ž˜์Šค ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ
    final class FinalClass {
    	....
    }
    
    class DerivedClass extends FinalClass {
    	// ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
    }โ€‹
  • final ๋ฉ”์†Œ๋“œ - ๋” ์ด์ƒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€๋Šฅ
    public class SuperClass {
    	protected final int finalMethod() {....}
    }
    
    class subClass extends SuperClass {
    	protected int finalMethod() {....} // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜. ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€๋Šฅ
    }โ€‹

 

final ํ•„๋“œ

  • final ํ•„๋“œ, ์ƒ์ˆ˜ ์„ ์–ธ
    // ์ƒ์ˆ˜ ์„ ์–ธ ์‹œ ์‚ฌ์šฉ
    class SharedClass {
    	public static final double PI = 3.14;
    }โ€‹
  • ์ƒ์ˆ˜ ํ•„๋“œ๋Š” ์„ ์–ธ ์‹œ์— ์ดˆ๊ธฐ ๊ฐ’ ์ง€์ •ํ•ด์•ผํ•จ
  • ์ƒ์ˆ˜ ํ•„๋“œ๋Š” ์‹คํ–‰ ์ค‘ ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ
728x90