티스토리 뷰
자바에는 접근 지시 제어자가 있습니다.
자바의 접근 지시 제어자로
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 |
댓글