본문 바로가기

Java & JSP

[Java] 접근 제어자(access modifier)

728x90
반응형

접근 제어자 종류와 접근 범위

private - 같은 클래스 내

default - 같은 패키지 내 (아무것도 없으면 default)

protected - 같은 패키지 내, 다른 패키지의 자손 클래스

public - 제한x



넓 > 좁

public > protected > default > private



대상에 따른 사용 가능한 접근 제어자

클래스 -> public ,default

메서드, 멤버변수 -> public, protected, default, private (모두)

지역변수 -> X



접근 제어자 사용 이유

- 외부로부터 데이터 보호

- 외부에서 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서 => 데이터 감추기(data hiding)이고 캡슐화(encapsulation)에 해당

- 값의 유효성 검사의 기능도 함



public를 클래스에 붙일 때 주의할 점

하나의 소스파일(*.java)에는 public 클래스가 하나만 있어야 한다. => 메인 메소드를 

소스파일의 이름은 public클래스의 이름과 같아야 한다.


Q


왜 하나의 소스파일에 public클래스는 하나여야할까?

꼭 메인 메소드가 없어도 public은 하나여야 한다는 조건은 왜 그럴까?



A


(https://stackoverflow.com/questions/3578490/why-only-1-public-class-in-java-file)


아니이건뭐람..ㅎㅎ.. 그냥궁금해서요..ㅠ



뭐 대강 논쟁의 결과는


컴파일러가 컴파일,로드,링크를 위해 특정 자바소스파일이나 클래스파일을 쉽게 찾을 수 있도록 강제하기 위함 정도라고 보면 될 듯 하다.

자바파일이름이랑 public인 클래스 명을 동일하게 해서 컴파일러가 쉽게 찾을 수 있나보다.

겹치면 또 그 사이에서 서로 매칭되는 것을 찾아야 하니까 그렇지 않을까 생각한다.




제어자의 조합 주의사항

- 메서드 (static, abstract) 함께 사용 불가 -> static은 몸통 있어야 사용 가능

- 클래스 (abstract, final) 동시 사용 불가 -> final은 확장x, private면 자손 클래스에서 접근 불가

- abstract의 메서드는 private 불가 -> abstract메서드는 자손에서 구현해야함. private면 자손에서 접근 불가

- 메서드 (private, final) 같이 사용 불가 -> private는 오버라이딩 안되기 때문에 하나만 사용해도 의미 같음



getter, setter의 접근 제어자

public이다.

Q


왜 꼭 public 이어야 할까?



A


멤버변수를 private나 protected로 제한하고 값을 읽고 변경할 수 있는 public 메서드를 제공함으로써 간접적으로 멤버변수의 값을 다룰 수 있도록 하는 것이 바람직 하다고 한다.


728x90
반응형