티스토리 뷰
자바에는 접근 지시 제어자가 있습니다.
자바의 접근 지시 제어자로
1. private
2. protected
3. public
4. default
위의 네가지가 있습니다.
|
접근 지시 제어자 |
설명 |
|
private |
해당 클래스에서만 접근이 가능합니다. |
|
protected |
동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 해당 변수, 메소드에 접근이 가능합니다. |
|
public |
어떤 클래스에서 해당 변수, 메소드에 접근이 가능합니다. |
|
default |
별도의 접근 지시 제어자를 설정하지 않은 경우이며, 해당 패키지 내에서 해당 변수, 메소드에 접근이 가능합니다. |
|
접근지시제어자 |
해당 클래스 |
해당 패키지 |
상속받은 클래스 |
그 외 |
|
private |
O |
X |
X |
X |
|
default |
O |
O |
X |
X |
|
protected |
O |
O |
O |
X |
|
public |
O |
O |
O |
O |
접근 지시 제어자를 사용하는 이유는 외부로 부터 데이터의 보호를 할 수 있기 때문에 사용합니다.
객체지향프로그래밍에서는 접근지시제어자를 통해 캡슐화라고 합니다.
위의 접근지시제어자을 사용하는 실습을 통해 공부하도록 하겠습니다.
AAA객체를 생성하여 사용할 main 클래스
public class ExampleAccessModifier{
public static void main(String[] args) {
// main에서는 AAA클래스의 객체를 만들고 사용하는 AAA클래스 입장에서의 '외부' 이다.
// 외부에서 AAA클래스를 기반으로 한 객체를 만들어 사용
// new 키워드를 활용하여 AAA클래스의 객체 (인스턴스)를 만든다.
// new 키워드를 활용하여 객체를 생성하면 Heap 메모리 공간에 AAA클래스의 객체가 할당이 되고,
// 메모리 주소값을 발생시킨다.
// 이 때 발생된 메모리 주소값이 참조 변수 (aaa)에 대입된다.
// * 할당 : 실제 물리적인 메모리 영역을 차지
AAA aaa = new AAA();
System.out.println(aaa);
// 접근연산자 (.) -> 참조변수 aaa가 가지고 있는 메모리주소에
// 대응되는 인스턴스의 내부 아이템 (멤버변수, 메소드)를 사용할 수 있게 해주는 연산자
aaa.showInfo();
aaa.str1 = "qwe";
aaa.showInfo();
aaa.setNum1(10);
aaa.showInfo();
int a = aaa.getNum1();
System.out.println(a);
}
}
AAA 클래스를 통해 접근지시제어자에 대해 공부하겠습니다.
// 클래스 AAA는 어디에서든 사용할 수 있다.
public class AAA {
// 접근 지시 제어자
// private : 클래스 내부에서만 사용 가능
// public : 클래스 외부, 내부에서 모두 사용 가능
// 1) 정보은닉 : 모든 클래스의 멤버변수는 항상 private으로 만든다.
// getter / setter를 이용하여 외부에서의 접근을 조절한다.
// num1은 private 형태이기 때문에 내부에서만 사용 가능한 멤버 변수
private int num1 = 0;
// str1은 public 형태이기 때문에 외부, 내부에서 전부 사용 가능한 멤버 변수
public String str1 = "AAA_STR1";
// showInfo() 메소느는 내부와 외부에서 모두 사용 가능한 메소드
public void showInfo() {
System.out.println("num1 : " + this.num1);
System.out.println("str1 : " + this.str1);
}
// getter / setter
// getter : 멤버변수를 외부에 가져다주는 메소드
// setter : 멤버변수를 외부에서 대입하게 해주는 메소드
// 필요한 이유 : 모든 멤버변수는 private 형태로 내부에서만 접근이 가능하게 되어 있기 때문에
// 상황에 따라 외부에 데이터를 공개하거나 외부에서 데이터를 대입해 주기 위해 만들어 놓는다.
// 결과적으로 외부에서의 멤버변수 (정보)에 대한 접근을 안전하게 처리할 수 있다.
// 무조건 getter / setter는 public 형태로 만든다.
// alt + shift + s => r
public int getNum1() {
return this.num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
// this 키워드 : 자기 자신을 참조
// 보통 클래스 내부의 멤버 변수를 사용할 때 쓴다.
public void setDatas(int num1, String str1) {
this.num1 = num1;
this.str1 = str1;
// num1 = _num1;
// str1 = _str1;
}
// 변수의 지역성
// 같은 코드블럭(중괄호 {}) 안에서는 동일한 이름의 변수를 만들 수 없고,
// 지역변수, 매개변수는 중괄호를 벗어나면 사라진다.
// 멤버변수는 객체가 사라질 때 사라진다.
public void foo() {
int a; // 만들어지는 시점? foo() 메소드가 호출되었을 때 만들어진다.
// 사라지는 시점? foo() 메소드가 종료되었을 때 사라진다.
// 지역변수 foo() 메소드 지역에서만 사용 할 수 있기 때문이다.
{
// int a;
// Error 위에 이미 int a가 선언되었기 때문에 중복된 변수이다.
a = 10; // ok 위에 선언된 int a를 사용 할 수 있다.
int b = 20;
}
// System.out.println(b); 지역을 벗어났기 때문에 Error
}
// 매개변수도 지역변수와 동급으로 처리된다.
public void goo(int g) {
// int g = 10; // Error 매개변수와 같은 이름으로 지역변수를 만들 수 없다.
}
}
반응형
LIST
'프로그래밍 > Java' 카테고리의 다른 글
| 자바 ! static 변수와 메소드 (정적변수, 메소드) (0) | 2017.04.22 |
|---|---|
| 자바 ! 캡슐화 (정보은닉, 접근지시제어자) (0) | 2017.04.21 |
| 자바 ! 객체지향 프로그래밍 (0) | 2017.04.18 |
| 자바 ! 반복문 (for, while, do~while) (0) | 2017.04.17 |
| 자바 ! 조건문 ( if문 , switch~case문) (1) | 2017.04.14 |
댓글
