본문 바로가기
STUDY/JAVA

접근제어자1

by NOTEEE 2018. 1. 22.

접근제어자

  • private
  • public
  • protected


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

  • 객체의 로직을 보호하기 위해서
  • 멤버에 따라서 외부의 접근을 허용하거나 차단해야 할 필요성이 생김.
  • 사용자에게 객체를 조작 할 수 있는 수단만을 제공함으로서 결과적으로 객체의 사용에 집중 할 수 있도록 돕기 위함.


간단한 예제를 보자

public class AClass {
    
    Integer i;
    Integer j;
    Integer k;
    
    static int TEMP = 10;
    
    public void setOprands(int i, int j) {
        this.i = i;
        this.j = j;
    }
    
    public void AMethod(){
        System.out.println("A 클래스 호출 완료");
    }
    
    // 오버라이딩
    public void overRiding(){
        System.out.println("오버라이딩");
    }
    
    // private
    private String x(){
        return "private";
    }
    
    // public
    public String y(){
        return "public";
    }
    
    // public - private 메소드에 접근
    public String z(){
        return x();
    }
    
}
 
public static void main(String[] args) {
        
        AClass aClass = new AClass();
        BClass bClass = new BClass();
 
        aClass.overRiding();
        bClass.overRiding();
        
        // 에러 발생 - 접근제어자가 private 이라서
        // aClass.x();
        aClass.y();
        aClass.z();
    }
 
}
 
cs

aClass.x() - private, aClass.y() - public, aClass.z() - public 이지만 private인 x를 호출하고 있다.

aClass.x()는 에러가 발생하는데, private 으로 선언했기 때문에 외부에서는 호출이 되지않는다.

만약,

aClass.x() 를 호출하고 싶다면 aClass.z() 처럼 호출해야 한다.




private -> default -> protected ->public


private

public class PrivateAccess {
    
    private String a;
    private String getA(){
         return this.a;
    }
    
}
cs

위 예제의 a 변수와 getA메소드는 오직 PrivateAccess 클래스에서만 접근이 가능하고 다른 클래스에선 접근이 불가능하다.


default

public class PublicClass {
 
}
 
class DefaultClass {
 
}
 
public class ClassPackage1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PublicClass publicClass = new PublicClass();
        DefaultClass defaultClass = new DefaultClass();
    }
 
}
cs


위 예제의 a 변수와 getA메소드는 오직 PrivateAccess 클래스에서만 접근이 가능하고 다른 클래스에선 접근이 불가능하다.



protected

package com.kor.test.sample.name;
 
public class ClassPackage1 {
 
    protected String name = "HAHA";
 
}

package com.kor.test.sample.test;
 
import com.kor.test.sample.name.ClassPackage1;
 
public class ClassPackage extends ClassPackage1{
 
    public static void main(String[] args) {
        ClassPackage classPackage = new ClassPackage();
        System.out.println(classPackage.name);
    }
 
}
cs

위 예제의 패키지가 서로 다르지만 name 변수가 protected로 선언 되었으므로 접근이 가능하다.

name 변수가 protected가 아니었으면 에러가 발생한다.

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

Abstract1  (0) 2018.01.22
접근제어자2(Default 접근제어자와 Public 접근제어자)  (0) 2018.01.22
오버라이딩  (0) 2018.01.22
오버로딩  (0) 2018.01.22
상속이란?  (0) 2018.01.22