크리스의 개발일기

[JAVA] 접근제한자(public, private, protected, default)란? 본문

JAVA

[JAVA] 접근제한자(public, private, protected, default)란?

ChrisJang 2020. 11. 16. 09:05

접근 제한자란?

멤버들은 객체 자신들만의 속성이자 특징이므로 대외적으로 공개되는 것이 결코 좋은 것은 아닙니다.

그런 이유로 프로그래머가 객체의 멤버들에게 접근 제한을 걸 수가 있는데 자바에서는 이를 접근 제한자라 합니다.

 

제한자 종류

○ public      : 외부의 모든 클래스 및 생성자, 메소드, 필드로부터 접근을 완전히 허용
(모든것이 접근가능)

 protected : 같은 패키지에 속해있는 클래스에서 생성자와 메소드, 필드(객체)만 호출 할 수 있고, 다른 패키지에 있는 생성자, 메소드, 필드는 호출하지 못하지만 상속관계에 있는 클래스라면 예외로 호출이 가능하다

(클래스 선언불가)

 default    : 앞에 public이나 protected, private를 추가하지 않았다면 기본적으로 default 접근 제한자가 되어 다른 패키지와의 클래스 선언과 생성자/메소드/필드의 호출이 불가능하다. 물론 동일 패키지안에서는 모든게 허용이 된다
(앞에 생략되있는 접근제한자)

 private    : 동일한 패키지든 다른 패키지든 전부 접근이 불가하도록 하는 최고로 강력한 접근 제한자이고
현재 객체 내에서만 허용

 (전부 접근 불가)

 

https://jwprogramming.tistory.com/149


접근제한자 사용

- 클래스       : public, default

- 생성자       : public, protected, default, private

- 멤버변수    : public, protected, default, private

- 멤버메소드 : public, protected, default, private

- 지역변수    : 접근제한자 사용 불허

 

캡슐화란?

항상 은닉화를 전제로 합니다. 관련이 있는 데이터 그리고 동작들을 하나로 묶어 요약하고 사용자에게는 내부적인 접근을 허용하지 않는 대신에 사용의 편의성을 제공해 주는 것입니다.

데이터 보호의 장점    : 은닉화를 통해 데이터의 접근을 제어할 수 있습니다.

유지 보수성의 장점    : 객체에 대한 수정 작업으로 인해 객체 활용도에 문제가 발생한다면

                                   제품 하나에 대한 upgrade가 상당히 부담스러울 것입니다. 자바에서는

                                   각 기능을 하나의 모듈(부품)처럼 활용하여 객체간의 이식성이 높고

                                   독립적인 면을 유지하는 장점이 있습니다.

사용자 편의성의 장점 : 전기 압력밥솥이 어떤 원리와 어떤 과정으로 밥을 지어내는지는

                                  알 필요 없이 그냥 사용법만 익혀서 사용합니다.

ex) 돈을 입금할 때, 은행원에게 모든 동작을 넘겨줍니다. 그러면 사용자는 내부 동작을 생각할 필요 없이 목적한 일을 할 수 있습니다.

 

Sample Code

 

class Variable{
    private int a;  //은닉화
    //캡슐화
    public void setA(int n){
        a = n;
    }
    public int getA(){
        return a;
    }
}
public class MethodTest2 {
    public static void main(String[] args) {
        Variable v = new Variable();       
        //System.out.println(v.a); //호출불가
      
        v.setA(100);
        System.out.println(v.getA());
    }
}



출처: 

https://gyrfalcon.tistory.com/entry/JAVA-접근-제한자 [Minsub's Blog]
hunit.tistory.com/162

Comments