이롭게 현명하게

[JAVA] 자바 접근 제한자 본문

JAVA

[JAVA] 자바 접근 제한자

dev_y.h 2023. 4. 25. 18:37
728x90
반응형


 

목차

 

접근 제한자

클래스의 접근 제한

생성자의 접근 제한

필드와 메소드의 접근 제한

 


 

 

<정리>

접근 지정자의 종류 : private, protected, public, 디폴트(접근 지정자 생략)

<접근 지정자의 목적>

  1. 클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용
  2. 객체 지향 언어의 캡슐화 정책은 멤버를 보호하는 것
  3. 접근 지정은 캡슐화에 묶인 보호를 일부 해제할 목적

public : 패키지에 관계없이 모든 클래스에게 접근  허용

private : 동일 클래스 내에만 접근 허용, 상속받은 서브 클래스에서 접근 불가

protected : 같은 패키지 내의 다른 모든 클래스에게 접근 허용, 상속받은 서브 클래스는 다른 패키지에 있어도 접근 가능

default : 같은 패키지 내의 다른 클래스에게 접근 허용

 


[접근 제한자]

<접근 제한자를 사용하는 이유>

main() 메소드를 가지지 않는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스이다.

라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분하여 필드, 생성자, 메서드를 설계하는 것이 바람직하다.

객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다.

<요약>

클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용

객체 지향 언어의 캡슐화 정책은 멤버를 보호하는 것

접근 지정은 캡슐화에 묶인 보호를 일부 해제할 목적

<접근 제한자(Access Modifier)>

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스,필드,생성자,메소드 없음
protected 필드 ,생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스,필드,생성자,메소드 다른 패키지에 소속된 클래스
private 필드,생성자,메소드 모든 외부 클래스

public : 자유롭게 사용할 수 있는 공개 멤버

protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있는 멤버

private : 외부에 노출되지 않는 멤버

default : 같은 패키지에 소속된 클래스에서만 사용할 수 있는 멤버


[클래스의 접근 제한]

<클래스 선언 시 고려사항>

1. 같은 패키지 내에서만 사용가능

2. 다른 패키지에서도 사용가능

//default 접근 제한

class 클래스 { ... }

// public 접근 제한
public class 클래스 { ... }

<default 접근 제한>

default 접근 제한 : 클래스 선언 시 public 생략

같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없다.

 

<public 접근 제한>

public 접근 제한 : 같은 패키지, 다른 패키지에서도 아무런 제한 없이 사용할 수 있다.

클래스를 다른 개발자가 사용할 수 있도록 라이브러리 클래스로 개발되어야 할 때 사용된다.

 

<protected 접근 제한>

protected 접근 제한 : public과 default 접근 제한의 중간쯤에 해당한다.

같은 패키지에서는 default와 같이 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근을 허용한다.


[생성자의 접근 제한]

객체를 생성하기 위해서는 new 연산자로 생성자를 호출해야 한다.

생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정된다.

클래스에서 생성자를 선언하지 않으면 컴파일러에 의해 자동적으로 기본 생성자가 추가된다.

자동으로 생성되는 기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하다.

클래스가 default 접근 제한을 가지면 기본 생성자도 default 접근제한

클래스가 public 접근 제한을 가지면 기본 생성자도 public 접근제한을 가진다.

접근 제한 생성자 설명
public 클래스(...) 모든 패키지에 아무런 제한없이 생성자를 호출할 수 있다.
생성자가 public 이면 클래스도 public
클래스가 default : 생성자가 public을 가지더라도 클래스 사용이 같은 패키지로 한정
protected 클래스(...) default 접근제한과 마찬가지로 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있다.
다른 패키지에 속한 클래스가 해당 클래스의 자식(child)는 생성자 호출 가능
default 클래스(...) 생성자를 선언할 때 public 또는 private 생략시 가지게 된다.
같은 패키지에서는아무런 제한없이 생성자를 호출
다른패키지에서는 생성자를 호출할 수 없다.
private 클래스(...) 같은 패키지에서 생성자 호출할 수 없다.
다른 패키지에서 생성자 호출할 수 없다.
클래스 외부에서 new 연산자로 객체를 만들 수 없다.
오로지 클래스 내부에서만 생성자를 호출 할 수 있고 객체를만들 수 있다.

[필드와 메소드의 접근 제한]

<필드와 메소드 선언 시 고려사항>

1. 클래스 내부에서만 사용할 것인가

2. 패키지 내에서만 사용할 것인가

3. 다른 패키지에서도 사용할 것인가

 

접근 제한 생성자 설명
public 필드
메소드(...)
모든 패키지에서 아무런 제한 없이 필드와 메소드를 사용할 수 있도록 해준다.
필드와 메소드가 public을 가질 경우 클래스도 public 접근 제한을 가져야한다.
클래스가 default 접근 제한을 가지게 되면 같은 패키지 안에서만 클래스가 사용되기 때문이다.
protected 필드
메소드(...)
default 접근제한과 마찬가지이다.
같은 패키지에 속하는 클래스에서 필드와 메소드를 사용할 수 있도록한다.
다른 패키지에 속한 클래스가 해당 클래스 자식 클래스는 필드와 메소드를 사용할 수 있다.
default 필드
메소드(...)
public 또는 private 를 생략했을 경우
같은 패키지에서는 아무런 제한 없이 필드와 메소드를 사용가능
다른 패키지에서는필드와 메소드를 사용할 수 없다.
private 필드
메소드(...)
private 접근 제한은 동일 패키지이거나 다른 패키지일때 상관없이 필드와 메소드를사용하지 못하도록 제한한다.
오로지 클래스 내부에서만 사용가능

 

 

 

[JAVA] 자바 상속 개념

[상속 개념] 상속 (Inheritance) : 부모가 자식에게 물려주는 행위. 즉 , 부모 클래스의 멤버를 자식 클래스에 물려줄 수 있다. 부모클래스 = 상위클래스 자식 클래스 = 하위 클래스 or 파생 클래스 상

devyihyun.tistory.com


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

 

더보기

[ 참고자료 ]

 

 

 

 

728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 자바 클래스 상속  (0) 2023.04.27
[JAVA] 자바 상속 개념  (0) 2023.04.26
[JAVA] 자바 패키지  (0) 2023.04.24
[JAVA] 자바 final 필드와 상수  (0) 2023.04.21
[JAVA] 자바 정적 멤버와 static  (0) 2023.04.20
Comments