기본 콘텐츠로 건너뛰기

public, private 차이


public, private
기본중에 기본
근데 아직도 뭔가 헷갈린다.

private : 내부만 접근
public : 외부에서도 접근

내부외부라는 말이 좀 애매하다.

암튼 예로
클래스를 하나 만들자
멤버 변수를 설정할때
한놈은 private, 한놈은 public

public class ch1 {
    public int a;
    private int b;
}

이클래스를 가지고
가장 간단하고 확실하게 테스트 해보자

public class test {
    public static void main(String [] args){
        ch1 c = new ch1();

        c.a = 10;
        c.b = 20;

        System.out.println(c.a);
        System.out.println(c.b);

    }
}

위대로 컴파일 해대면 바로 오류난다.
Error:(9, 10) java: b has private access in ch1
라고..

c는 ch1을 가지고 새로운 객체를 만들었지만,
private으로 선언된 변수는
자기 멤버변수라고해도 맘대로 접근을 할수가 없다.

그렇다면 c.b를 건드리려면 어케 해야되나

public class ch1 {

    public int a;
    private int b;

    public void setB (int val){
        this.b=val;
    }
    public int getB (){
        return this.b;
    }
}
이럴때 쓰라고 만든게
게터세터다.
private한것들은 이처럼 클래스 자체 메소드를 활용해야만 쓸 수 있다.

이렇게 되면
최초 클래스를 생성한 쪽에서만 내부 사정을 알고
이걸 사용하는 사용자 입장에서는 메뉴얼대로 실행만 하면된다.

즉 setB에다가 val이 0보다 작으면 안된다던지
암튼 val을 가지고 지지고볶고 하는걸 ch1을 사용하는 사용자가
내부적으로 어떻게 동작하는지 숨길수 있게하는
oop의 특징중 하나인 은닉화가 가능해진다.


댓글