접근제어자란?

--> 클래스의 멤버 혹은 클래스의 접근제한을 지정하는 역할을 담당!!


이 접근제어자는 지금까지 공부하면서도 종종 사용하였습니다.

접근제어자는 "public", "private", 'default", "protected" 이렇게 4가지가 잇습니다.

접근제어자들은 클래스, 멤버변수, 메소드, 생성자에 붙어서 사용이 가능합니다.


1. public

지금까지 우리가 종종 보았던 public이란 단어를 기억하시나요

이클립스에서 자바파일을 생성하면 public class 클래스이름{} 이런 형식으로 나타나는 것을 보았죠?

여기서 사용되는 public이 접근제어자 였습니다. 


public 이란 자신을 다 공개하는것 입니다.

즉, 모두의 접근을 허락한다는 것이죠.


2. private

private은 같은 클래스 내에서만 접근을 허락합니다.


3. dafault

dafault는 같은 클래스, 같은 패키지 내에서만 접근을 허락합니다

또한 default를 사용할 결우에는 접근제어자를 쓸 자리에 아무것도 안써주시면 됩니다.


4, protected

protected는 같은클래스, 같은패키지, 다른 패키지에서 상속을 받아 자손클래스에서의 사용을 허락합니다.



글로는 확 느낌이 오지 않을 수 있으니 코드를 보면 조금 더 이해가 가실겁니다.


먼저 디렉토리구조부터 보여드릴께요




ModifierCheck.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.dreamstorage.ModifierDemo;
 
import com.dreamstorage.ModifierPackage.OtherPakageModifier;
/*
 * 각 접근제어자의 접근범위를 하나씩 따져 보세요.
 */
 
public class ModifierCheck {
 
    public ModifierCheck(){
        this._public();
        this._private();
        this._default();
        this._protected();
    }
    
    public void _public(){
        System.out.println("public");
    }
    private void _private(){
        System.out.println("private");
    }
    void _default(){
        System.out.println("default");
    }
    protected void _protected(){
        System.out.println("protected");
    }
    // 같은 클래스내의 모든 메소드나 모든 변수는 접근제어자가 어떤 것이든 모두 접근이 가능하다.
}
 
class PackageModifierCheck extends SamePackageModifier{
    
    public PackageModifierCheck(){
        
        SamePackageModifier spm = new SamePackageModifier();    
        spm._public();
        //SPK._private();
        spm._default();
        spm._protected();
        // 같은 패키지의 경우 private는 접근이 불가하다.
        
        this._public();
        //this._private();
        this._default();
        this._protected();
        // 같은 패키지에서 상속관계를 가지는 경우 역시 private는 접근이 불가능하다.
    }
 
}
 
class OtherPackageModifierCheck extends OtherPackageModifier{
    public OtherPackageModifierCheck(){
        OtherPackageModifier OPM = new OtherPackageModifier();
        OPM._public();
        //OPM._private();
        //OPM._dafault();
        //OPM._protected();
        //다른 패키지에 있는 메소드나 멤버변수의 접근은 public이외에는 불가능하다.
        
        this._public();
        //this._private();
        //this._default();
        this._protected();
        //다른 패키지의 클래스를 상속받는 경우는 public, protected이외에는 접근이 불가능하다.
    }
}
 
 
cs


SamePackageModifier.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.dreamstorage.ModifierDemo;
 
public class SamePackageModifier {
    public void _public(){
        System.out.println("public");
    }
    private void _private(){
        System.out.println("private");
    }
    void _default(){
        System.out.println("default");
    }
    protected void _protected(){
        System.out.println("protected");
    }
}
cs


OtherPackageModifier.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.dreamstorage.ModifierPackage;
 
public class OtherPackageModifier {
    public void _public(){
        System.out.println("public");
    }
    private void _private(){
        System.out.println("private");
    }
    void _default(){
        System.out.println("default");
    }
    protected void _protected(){
        System.out.println("protected");
    }
}
cs


위의 소스를 보고 한번 하나씩 따져보세요.

위의 소스들은 생활코딩의 egoing님의 예제소스를 이용하였습니다.


이제 마지막으로 표를 만들어서 확인해 봅시다.


 제어자

같은클래스 

같은 패키지,
같은 패키지(상속) 

다른패키지

 다른패키지

(상속)

 public

 O

O

O

O

 protected

 O

O

X

O

 default

 O

O

X

X

 private

 O

X

X

X


이번엔 클래스의 접근 제어자 입니다

이건 간단히 글로 설명해보겠습니다(절대 귀차니즘이 아닙니다...)

클래스의 접근제어자는 public, default 이렇게 두가지를 사용 할 수 있습니다.

default는 클래스멤버에 사용하던 접근제어자 처럼 아무것도 쓰지않으면 그것이 바로 default가 됩니다.

접근제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용이 가능하고, default인 경우네는 같은 패키지에서만 사용이 가능합니다.


참고로 하나의 자바파일에는 public클래스는 하나만 존재합니다.

public클래스의 이름은 자바파일의 이름가 같아야 하기 떄문입니다.


접근제어자는 여기까지~


댓글 大 환영~


'프로그래밍 > Java' 카테고리의 다른 글

[Java] 21. 제어자(Modifier) - final  (0) 2015.05.18
[Java] 20. 제어자(Modifier) - static  (0) 2015.05.16
[Java] 18. super와 super()  (0) 2015.05.12
[Java] 17. 오버라이딩(Overriding)  (0) 2015.04.21
[Java] 16. 상속(Inheritance)  (0) 2015.04.08