접근 제한자
- 프로그램을 제작하다 보면 클래스에 선언한 변수나 메서드를 접근하지 못하도록 막아야 할 경우가 있다
- 이러한 접근의 제한을 두기 위해 제공하는 것이 접근 제한 자이며 상황에 맞는 접근 제한자를 사용하면 된다
- 접근 제한자는 클래스의 정보 보호를 위한 캡슐화의 개념에 적용되므로 아주 중요한 개념이다
- 클래스 : public default
- 생성자 : public protected default private
- 멤버 변수 : public protected default private
- 멤버 메서드 : public protected default private
- 지역 변수 : 접근 제한자 불가
지역 변수는 메서드 내부에서만 사용기 위해서 선언하는 변수이기 때문에 어차피 외부에서 접근이 불가
클래스의 접근 제한자
- 클래스의 접근 제한자는 저장하는 파일의 파일명을 결정하는데 사용한다
- 하나의 자바 파일에 여러 개의 클래스를 만들 경우 파일 명으로 사용하는 이름은 public이 있는 클래스의 이름이며 public은 오로지 하나의 클래스에만 붙일 수 있다
생성자, 메서드, 멤버 변수
public 접근 제한자
- public은 아무 제약없이 자유롭게 접근이 가능한 접근 제한 자이다
protected 접근 제한자
- protected는 패키지가 다르고 참조할 경우에만 접근이 불가능하다
default 접근 제한자
- default는 패키지가 다르면 상속이나 참조를 통해 접근이 불가능하다
private 접근 제한자
- private는 어떠한 상황에서든지 모두 접근이 불가능하다
1. 접근 제한자는 클래스 내부의 변수와 메서드의 보호를 위해 제공된다
2. public, private, default, protected가 존재하며 상황에 맞게 사용하면 된다
3. 접근 제한자는 객체 지향 언어에서의 중요한 개념은 캡슐화에 직결되므로 아주 중요한 개념이다
AccessableTest.java
----------------------------------------------------------------------------------------------------------
import com.test.BClass;
public class AccessableTest {
public static void main(String [ ] args) {
new Class1( );
new Class2( );
new Class3( );
new Class4( );
}
}
// 같은 패키지의 클래스를 객체생성해서 참조할 경우
class Class1 {
public Class1( ) {
ACLass a = new AClass( );
a.publicValue = 10;
a.publicMethod( );
a.protectedValue = 20;
a.protectedMethod( );
a.defaultValue = 30;
a.defaultMethod( );
a.privateValue = 40;
a.privateMethod( );
}
}
// 같은 패키지의 클래스를 상속 받아서 사용할 경우
class Class2 extends AClass {
public Class2( ) {
publicValue = 10;
publicMethod( );
protectedValue = 20;
protectedMethod( );
defaultValue = 30;
defaultMethod( );
privateValue = 40;
privateMethod( );
}
}
// 다른 패키지의 클래스를 객체 생성해서 참조할 경우
class Class3 {
public Class3( ) {
BClass b = new BClass( );
b.publicValue2 = 10;
b.publicValue2 = 10;
b.protectedValue2 = 20;
b.protectedMethod( );
b.defaultValue2 = 30;
b.defaultMethod( );
b.privateValue2 = 40;
b.privateMethod( );
}
}
// 다른 패키지의 클래스를 상속 받아서 사용할 경우
class Class4 extends BClass {
public Class4( ) {
publicValue2 = 10;
publicMethod2( );
protectedValue2 = 20;
protectedMethod2( );
defaultValue2 = 30;
defaultMethod2( );
privateValue2 = 40;
privateMethod2( );
}
}
----------------------------------------------------------------------------------------------------------
AClass.java
----------------------------------------------------------------------------------------------------------
public int publicValue;
protected int protectedValue;
int defaultValue;
private int privateValue;
public void publicMethod( ) {
System.out.println("public 메서드");
}
protected void protectedMethod( ) {
System.out.println("protected 메서드");
}
void dafaultMethod( ) {
System.out.println("default 메서드");
}
private void privateMethod( ) {
System.out.println("private 메서드");
}
----------------------------------------------------------------------------------------------------------
BClass.java
----------------------------------------------------------------------------------------------------------
package com.test;
public int publicValue2;
protected int protectedValue2;
int defaultValue2;
private int privateValue;
public void publicMethod2( ) {
System.out.println("public 메서드");
}
protected void protectedMethod2( ) {
System.out.println("protected 메서드");
}
void defaultMethod2( ) {
System.out.println("default 메서드");
}
private void pirvateMethod( ) {
System.out.println("private 메서드");
}
----------------------------------------------------------------------------------------------------------
'자바' 카테고리의 다른 글
Static (0) | 2020.06.22 |
---|---|
캡슐화(Encapsulation) (0) | 2020.06.22 |
다형성(Polumorphism) (0) | 2020.06.20 |
상속(inheritance) (0) | 2020.06.17 |
생성자(constructor) (0) | 2020.06.16 |