접근제어자

접근제어자 (access modifier)

private 같은클래스 내에서만 접근가능
(default) 같은 패키지 내에서만 접근가능
protected 같은패키지 내에서
그리고 다른패키지의 자손클래스에서 접근이가능
public 접근제한이 전혀없다


넓은범위순서

pulblic > protected > (default) > private

public,(default) 클래스 앞에붙일수있는건 단2개
public,protected,(default),private 멤버변수(인스턴스변수,클래스변수) 에는 4가지 가능하다

package pkg1;

class MyParent{  // 한패키지안에서는 퍼블릭 클래스는 1개뿐이다 

    private   int prv; // 같은클래스
            int dft; // 같은 패키지
    protected int prt; // 같은패키지 + 자손 (다른패키지)
    public    int pub; // 접근제한없음.


    public void printMember(){
        System.out.println(prv); // 성공
        System.out.println(dft); // 성공
        System.out.println(prt); // 성공
        System.out.println(pub); // 성공
    }
}

public class MyParentTest {
    public static void main(String[] args) {
        MyParent p = new MyParent();// 기본생성자

        System.out.println(p.prv); // 실패  > 원인은 다른 클래스에서는 사용불가이기 때문
        System.out.println(p.dft); // 성공
        System.out.println(p.prt); // 성공
        System.out.println(p.pub); // 성공
    }
}

캡슐화와 접근제어자

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

  • 외부로 부터 데이터를 보호하기 위해서 , 잘못된 데이터값이 들어오거나 변경되는걸 되는걸막으려고
  • 외부에는 불필요한걸 노출안시키려고 , 내부에만 사용되는
  • 메서드를 통한 간접접근 스타일로 코딩을한다

      class Time{
          private int hour;  // 여기있는변수들의 변형되는걸 막을려고 추후에 따로 객체를생성해서 다른주소로 변수를 초기화(변경,저장)한다
          private int minute; // iv 인스턴스변수들 , private 기떄문에 클래스내에서만 사용가능하다 ,클래스내부에서 메서드를통해 간접적으로 가져온다 
          private int second; 
    
      public void setHour(int hour) { //3번 인스턴스 메서드 (static이없기떄문에)
          if(hour <0 || hour > 23 ) return;
    
          this.hour = hour; // < 이곳에서 발동되는건 새로운 TIME 객체에서의 hour다  >
      }
    
      public int getHour() { //인스턴스 메서드 
          return hour;
      }   }
    
      public class TimeTest{
          public static void main (String[] args) {
              Time t = new Time(); // 1번 새로운 기본생성자 객체 생성 필수 
              t.setHour(12); // 2번
              System.out.println(t.getHour());
          }
      }
    

private 의 변수를 보호하기위해서

새로운 Time 클래스가 생성시켜 그안의 변수들을 사용한다라는 개념이 중요하다

static은 클래스명을 사용 하고 인스턴스는 객체를 생성하고 참조변수명을사용한다

Categories:

Updated:

Leave a comment