접근 제어 개념

객체에 포함된 멤버 변수 중에는 중요한 변수와 별로 중요하지 않은 변수가 있다. 예를 들어 Student 객체의 이름(name)은 외부에 공개해도 상관없지만 점수(score)를 공개하는 것은 문제가 될 수 있다. 이렇게 외부에 공개할 정보와 그렇지 않은 정보를 구분하여 외부로부터의 접근을 제어하기 위해 접근 제어를 사용하는 것이다.

 

접근 제어와 관련한 예약어 중에서 public은 해당 요소(클래스, 멤버 변수, 메소드)에 대한 모든 접근을 허용한다는 의미이며, 반대로 private은 모든 접근을 차단한다는 의미이다.

 

간단한 예제를 통해 public과 private의 의미를 확인해볼 것이다.

// 1. 클래스 선언부
public class Student {
	
    // 2. 멤버 변수
    public String name = "둘리";
    private int score = 83;
    
    // 3. 생성자 메소드
    Student() {	
    	System.out.println("---> Student 객체 생성");
    }
    
    // 4. 멤버 메소드
    public void printInfo() {
    	System.out.println(name + "의 점수 : " + score);
    }
}

 

score는 private 멤버 변수라 접근할 수 없음으로 위 처럼 에러가 발생하고, name 멤버 변수는 public 변수이기 때문에 접근이 가능하다.

Student 클래스의 생성자를 private으로 바꾸는 순간 Student클래스로부터 객체를 생성하는 모든 소스에 문제가 발생하게 된다. 이는 외부 클래스에서 Student 클래스의 생성자에 접근할 수 없게 되었기 때문이다.

 

물론 디자인 패턴 중에서 싱글톤 패턴(Singleton Pattern)같은 아주 특수한 상황에서 가끔 private 생성자를 사용하기도 한다. 하지만 이는 정말 특수한 경우이고 일반적으로는 생성자 앞에 private을 설정하지 않는다.

 

접근 제한과 관련된 예약어 중에는 protected와 default라는 것도 있다. 이 중에서 protected는 상속과 관련된 접근 제한 예약어로서 프로그램의 가독성을 떨어뜨리기 때문에 거의 사용하지 않는다. default는 패키지와 관련된 접근 제한이다.

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 메소드 Method  (0) 2023.10.19
[JAVA] 패키지  (0) 2023.10.19
[JAVA] 클래스 Class (3)  (0) 2023.10.18
[JAVA] 클래스 Class (2)  (0) 2023.10.18
[JAVA] 클래스 Class (1)  (0) 2023.10.18

+ Recent posts