Records rather than Memories

접근 제어자 본문

Software/JAVA

접근 제어자

Downer 2019. 10. 23. 15:44

추상 클래스, final, 접근 제어자, 인터페이스 등은 프로그래밍에 있어서 자유에 반대되는 규제에 해당하는 것이다.

즉, 자유에 질서를 부여 함으로서 자유에 가치를 올리는 것.

 

접근 제어자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package org.opentutorials.javatutorials.accessmodifier;
class A {
    public String y(){
        return "public void y()";
    }
    private String z(){
        return "public void z()";
    }
    public String x(){
        return z();
    }
}
public class AccessDemo1 {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.y());
        // 아래 코드는 오류가 발생한다.
        //System.out.println(a.z());
        System.out.println(a.x());
    }
}
cs

y() 메소드는 public : 누구든지 클래스의 메소드를 호출해서 사용할 수 있다.

z() 메소드는 private : 클래스 내부적으로는 사요가능 하지만 외부의 클래스에서는 사용 불가능.

public String x(){

        return z();

    } // 여기서 x()라는 메소드는 z()메소드와 같은 클래스 이므로 사용 가능하다.

 

 

접근 제어자를 사용하는 이유

 

- 은행을 예로 들면 창구는 public, 금고는 private이다. 각각 영역을 나누고 접근 가능한 영역을 나누어야 할 필요가 있다.

 

위의 예제로 돌아가면 a가 고객이고 x라는 창구를 이용해 z라는 금고를 이용하는 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.opentutorials.javatutorials.accessmodifier;
 
class Calculator{
    private int left, right;
     
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
    private int _sum(){
        return this.left+this.right;
    }
    public void sumDecoPlus(){
        System.out.println("++++"+_sum()+"++++");
    }
    public void sumDecoMinus(){
        System.out.println("----"+_sum()+"----");
    }
}
  
public class CalculatorDemo {
    public static void main(String[] args) {        
        Calculator c1 = new Calculator();
        c1.setOprands(1020);
        c1.sumDecoPlus();
        c1.sumDecoMinus();
    }
}
cs

 

여기서 sum() 이라는 메소드는 사용자에게 직접적으로 제공할 필요가 없다.

따라서 내부에 있는 메소드에 접근하는 것을 통제한다.

 

- 또한 setOprand했을 때 10, 20이 저장 되는데 left, right가 private로 지정되어있다.

- 그 이유는 c1.left = 100이라는 명령어로 left의 값을 초기화 시켜버릴 수 있기 때문에 private로 지정해 건드릴 수 없게 한다.

 

*사용할 수 있도록 유도된 인터페이스만 사용 가능하게 한다.

  public  protected default private
같은 패키지, 같은 클래스 허용 허용 허용 허용
같은 패키지, 상속 관계 허용 허용 허용 불허용
같은 패키지, 상속 관계 x 허용 허용 허용 불허용
다른 패키지, 상속 관계 허용 허용 불허용 불허용
다른 패키지, 상속 관계 x 허용 불허용 불허용 불허용

 

클래스의 접근 제어자

 

위 내용은 클래스 멤버에 대한 내용이다. 클래스 접근 제어자는 총 2개로 public과 default 이다.

 

- public 클래스는 다른 패키지 클래스에서도 사용가능

- defulat 클래스는 같은 패키지안에서만 사용 가능

 

* 중요한 것은 public 클래스가 포함된 소스코드는 클래스 명과 소스코드 파일명이 같아야 한다. 다시 말해 하나의 소스코는 반드시 하나의 public 클래스만 존재 할 수 있다는 의미이다.

'Software > JAVA' 카테고리의 다른 글

final  (0) 2019.10.23
abstract  (0) 2019.10.23
패키지  (0) 2019.10.22
overloading  (0) 2019.10.21
overriding  (0) 2019.10.21
Comments