티스토리 뷰

자바에는 접근 지시 제어자가 있습니다.


자바의 접근 지시 제어자로


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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함