JAVA 접근 제어자 (private)

shin_stealer·2020년 12월 5일
0

접근 제어자

목록 보기
1/1

접근 제어자란 무엇일까.

'접근' 사전적 의미

'제어' 사전적 의미

가까이 다가감 + 목적에 알맞은 작용을 하도록 조절

= 가까이 다가가는 것을 목적에 알맞도록 조절하는 것.

자바에서 접근 제어자란

다른 클래스에서 클래스, 변수, 메소드의 접근을
허락할지, 안할지를 조절한다.

자바에서 접근 제어자는 크게 4가지로 나뉘며 다음과 같은 특징이 있다.

public - 패키지에 관계없이 모든 클래스에서 접근 가능.

private - 오직 선언된 클래스 내부에서만 접근 가능.

protected - 같은 패키지와 상속 받은 클래스가 접근 가능.

default - 접근 제어자를 지정하지 않으면 기본값으로 설정 됨.
같은 패키지에서만 접근이 가능.

이것이 왜 필요할까?

정보를 숨기기 위해 필요하다.

객체 지향에서 정보 은닉이란,
다른 사용자가 굳이 알 필요 없는, 혹은 공개가 되어서는 안되는 정보를
숨겨야한다는 개념이다.

접근 제어자를 사용하면 외부 클래스에서의 직접적인 접근을 허용하지 않는도록 변수를 설정하여 직접적인 접근을 방어할 수 있다.

ex) 은행 계좌를 들어보면


public class MyAccount {
	private static int AccountNumber = 0000;
    
    public String account_user_name = "Steve";
    public int money = 1000;
}

상기 코드를 보면 MyAccount라는 클래스에
계좌 유저 이름은 Steve 이고
돈은 1000이 있는 것을 알 수 있다.

그리고 두 변수의 접근 제어자가 public 인 것을 볼 수 있다.


public class Stealer {

     // 해킹 도구
    String hacking_name;
    // 해킹 도구
    int hacking_money;
    
}

상기 코드는 도둑 클래스로
도둑은 해킹도구를 가지고 있다고 치자.

class CodeRunner{
	public static void main(String[] args){
        
        MyAccount myAccount = new MyAccount();
        Stealer stealer = new Stealer();
        
        stealer.hacking_name = myAccount.account_user_name;
        System.out.println(stealer.hacking_name);
        
        stealer.hacking_money = myAccount.money;
        System.out.println(stealer.hacking_money);
	}
}

코드를 실행하게 되면,
public으로 선언된 변수들을 도둑이 해킹할 수 있는 것을 볼 수 있다.

하지만, 계좌에 선언되 있던 public 변수를 private으로 바꾸게 되면,


public class MyAccount {
	private static int AccountNumber = 0000;
    
    private String account_user_name = "Steve";
    private int money = 1000;
}

결과는 아래와 같다.

에러 메세지가 뜨게되는데,
내용을 보면 money라는 변수가 private 이기 때문에 접근이 불가하다는 것을 알 수 있다.

이와 같이,
public으로 선언된 변수는 외부 클래스(도둑) 에서도 접근이 가능하지만,
private으로 선언했을 때에는 접근이 불가하다는 것을 알 수 있다.

아주 극단적인 예시를 들어보았다.

profile
I am a Blacksmith.

0개의 댓글