본문 바로가기

프로그래밍/JAVA

JAVA 접근 제한자

JAVA에는 접근 제한자, 또는 접근 제어자 라고 불리곤 하는 특별한 요소들이 있습니다. 이들은 프로그램에서 실제로 작동되는 코드가 아니면서도, class 안에서나 외부에서 영향을 많이 끼치는 녀석들입니다. 접근 제한자는 말그대로 무언가를 어디까지 접근할 수 있게 하겠냐를 정의해주는데요. 각각 접근 제한자의 사용법과, 어디까지 제한하는지 그리고 어떤 것들을 제한해줄수 있는지 알아봅시다.



JAVA 접근 제한자 사용법 

접근 제한자들을 알아보기 전에, 각종 접근 제한자를 실제로 사용하는 법에 대해 알아 봅시다. 접근 제한자들은 final 혹은 static 처럼 변수 또는 함수명 앞에 붙어서 사용됩니다.

1
2
3
4
5
6
7
8
9
10
 
public class classOne {
    public classOne() {
        
    }
    private void log() {
        System.out.println("LOG!");
    }
}
 
cs

위 예제에서는 private 라는 접근 제한자를 이용한 함수를 하나 만든 모습입니다. 앞으로 소개할 접근 제한자들은 모두 위와 같이 이용해주면 된답니다. ( 단 일부 경우를 제외합니다. )



접근 제한자의 종류

접근 제한자에는 4가지가 있습니다. 간단히 접근 제한자를 표로 정리하자면 다음과 같습니다.


 자기자신
클래스

 같은
패키지

 상속관계
클래스

 다른
패키지

public

O

O

O

O

protected

O

O

O

X

default

O

O

X

X

private

O

X

X

X


public

먼저 public은 어디에서나 접근이 가능합니다. 어디서든 이 객체를 만들고 이 함수에 접근할 수 있습니다.


protected

protected 접근제한자는 같은 패키지에 소속된 class, 그리고 상속관계에 있는 class에서만 접근할 수 있게 합니다.


default

default는 이름처럼, 그냥 아무것도 쓰지 않았을때 지정되는 제한자입니다. 같은 패키지에 있는 class만 접근할 수 있게 됩니다.


private

private는 접근 가능한 영역을 가장 좁게 제한합니다. 해당 제한자를 붙인 무언가는 클래스 내에서만 사용할 수 있게 됩니다. 주로 class에서 밖에 나타낼 이유가 없는 멤버, 혹은 값을 함부로 변경하지 못하게 검사해야 되는 멤버들에 붙입니다.



사용 불가능한 접근 제한자

클래스와 변수들 그리고 함수들에게 모두 접근 제한자를 붙일 수 있는 것은 아닙니다. 일부 제한되는 것들이 있는데요. 그럼 알아봅시다.


class에서의 protected, private 제한자

클래스에서는 public(참조가능) 제한자 또는 같은 java 파일 안에서만 쓰이게 해주는 default 제한자만 사용이 가능합니다.


지역변수, 함수에서의 모든 제한자

지역변수/함수 에서는 그 무엇도 사용할 수 없습니다. 왜냐하면, 지역 요소는 애초에 그 안에서만 사용할 수 있게 구성되어 있기 때문이죠. (소멸)





간단 예제

classOne.java

1
2
3
4
5
6
7
8
9
10
11
12
 
public class classOne {
    private String name = "";
    
    public String getName() {
        return name;
    }
    public void setName(String s) {
        name = s;
    };
}
 
cs


mainClass.java

1
2
3
4
5
6
7
8
9
10
 
public class mainClass {
    static public void main(String args[]) {
        classOne o = new classOne();
        //o.name //접근 불가능.
        o.setName("잼잼");
        System.out.println(o.getName());
    }
}
 
cs


대표적으로 private가 사용되는 방식을 나타내 보았습니다. 주요 변수들은 private로 함부로 건드리지 못하게 해둔 뒤 public인 get 메서드와 set 메서드를 열어두는 방법인데요. 이런식으로 해 두면 나중에 클래스 내부가 복잡해졌을때도 꼬이지 않게 잘 할 수 있답니다.

잘 작동 합니다.



이번 글에서는 이렇게 간단히 JAVA의 기능들 중 접근 제한자에 대해 알아보았습니다. 잘 사용해서 내부에서 쓰이는 것들은 내부에서만 보이도록 처리해 봅시다. 그럼 이만 글을 마치겠습니다. 안녕!