Java - 접근제어자

Terror·2024년 9월 17일
0

사전적 정의

  • 자바에서 접근제어자는 "클래스와, 클래스의 멤버를 사용할때 접근할 수 있는 범위 지정" 하는 역할입니다
  • 보통 접근제어자 or 접근지정자 라고 부르며 클래스나 클래스 멤버 앞에 붙어있는 public,private,protected,default 등의 키워드가 바로 접근제어자 입니다

클래스의 접근 제어자

  • 테스트에 앞서 기본적인 뼈대는 아래와 같다
package accessModifier.Parernt;

public class Book {
}
package accessModifier.Parernt.ChildTwo;

class NoteBook {
}
  • 클래스를 정의할 때 사용 가능한 접근제어자는 딱 2개입니다
  • Public: "모든 클래스"에서 이 클래스에 접근 가능 (패키지 상관 없음)
  • Default: 클래스 앞에 접근제어자가 없으면 default 클래스로, " 같은 패키지 안의 클래스"에서만 접근 가능
  • Book은 public으로 선언해놓았기때문에 어디서든 접근 가능하여 문제가 없지만
  • NoteBook은 default로 설정되어있어 ChildTwo 패키지안에서만 접근이 가능하여, Parent 패키지에서는 접근이 불가한 모습이다

클래스 멤버 접근제어자

  • 클래스 멤버와 함께 사용할 수 있는 접근제어자는 총 4가지입니다
  • Public 멤버: "모든 클래스" 에서 접근 가능
  • Protected 멤버: "같은 패키지, 다른 패키지의 자식 클래스"에서 접근 가능
  • Default 멤버: "같은 패키지" 에서만 접근 가능
  • Private 멤버: "같은 클래스" 안에서만 접근 가능

Public

package accessModifier.Parernt;

public class Book {
	public String title;
}
package accessModifier.Parernt.ChildTwo;

public class NoteBook {
	public String title;
}

  • Public 이기때문에 잘 접근이 되는 모습이다

Protected

package accessModifier.Parernt.Child.CChild;

public class Computer {
    protected String name = "computerTest";
}

  • Computer 클래스에, name 프로포티가 Protected로 걸려있기 때문에 동일 패키지 안이나, 자식 클래스에서만 접근이 가능하다, 즉
package accessModifier.Parernt;

import accessModifier.Parernt.Child.CChild.Computer;

public class ComputerParent extends Computer {
    public void computerTestMethod(){
        System.out.println(name);
    }
}
package accessModifier.Parernt;

public class ClassTest {
    public static void main(String[] args) {
        ComputerParent computerParent = new ComputerParent();
        computerParent.computerTestMethod();
    }
}
  • 이런식으론 잘 된다는 뜻이다
  • 잘 나오는모습이다

Default

package accessModifier.Parernt.Child.CChild;

public class Computer {
    String name = "computerTest";
}
  • 하지만 접근제어자를 지정하지않으면 자동으로 default로 설정되게 되는데
  • 이럴 경우 같은 패키지안에서만 접근 가능하기 때문에 상속하고있더라도, 다른 패키지에 있을경우 접근이 불가해진다
  • 자식 클래스에서 name 프로포티에 대해 접근이 불가한 모습이다

Private

package accessModifier.Parernt.Child.CChild;

public class Computer {
    private String name = "computerTest";
}

  • 멤버 변수가 private으로 선언되어있어, 같은 패키지 안에있음에도 접근이 불가한 모습이다
  • private의 경우 해당 클래스 안에서만 사용 가능하다

끝!

참조 블로그

https://kadosholy.tistory.com/96

profile
테러대응전문가

0개의 댓글