일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- by any chance
- by until
- counldn't have
- I'm glad
- java
- keep -ing
- ISTQB
- if조건절
- 변수
- gameQA
- continue to
- happen to
- 명절 표현
- for ing
- UE4
- 코로나19
- sort함수
- C++
- 명세기반테스트
- metascore
- 게임QA
- html
- end up ing
- relif
- 형변환
- Realtime Rendering
- 제5인격
- it's a good thing
- might have p.p
- know
- Today
- Total
Records rather than Memories
접근 제어자 본문
추상 클래스, final, 접근 제어자, 인터페이스 등은 프로그래밍에 있어서 자유에 반대되는 규제에 해당하는 것이다.
즉, 자유에 질서를 부여 함으로서 자유에 가치를 올리는 것.
접근 제어자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package org.opentutorials.javatutorials.accessmodifier;
class A {
public String y(){
return "public void y()";
}
private String z(){
return "public void z()";
}
public String x(){
return z();
}
}
public class AccessDemo1 {
public static void main(String[] args) {
A a = new A();
System.out.println(a.y());
// 아래 코드는 오류가 발생한다.
//System.out.println(a.z());
System.out.println(a.x());
}
}
|
cs |
y() 메소드는 public : 누구든지 클래스의 메소드를 호출해서 사용할 수 있다.
z() 메소드는 private : 클래스 내부적으로는 사요가능 하지만 외부의 클래스에서는 사용 불가능.
public String x(){
return z();
} // 여기서 x()라는 메소드는 z()메소드와 같은 클래스 이므로 사용 가능하다.
접근 제어자를 사용하는 이유
- 은행을 예로 들면 창구는 public, 금고는 private이다. 각각 영역을 나누고 접근 가능한 영역을 나누어야 할 필요가 있다.
위의 예제로 돌아가면 a가 고객이고 x라는 창구를 이용해 z라는 금고를 이용하는 것이다.
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
|
package org.opentutorials.javatutorials.accessmodifier;
class Calculator{
private int left, right;
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
private int _sum(){
return this.left+this.right;
}
public void sumDecoPlus(){
System.out.println("++++"+_sum()+"++++");
}
public void sumDecoMinus(){
System.out.println("----"+_sum()+"----");
}
}
public class CalculatorDemo {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sumDecoPlus();
c1.sumDecoMinus();
}
}
|
cs |
여기서 sum() 이라는 메소드는 사용자에게 직접적으로 제공할 필요가 없다.
따라서 내부에 있는 메소드에 접근하는 것을 통제한다.
- 또한 setOprand했을 때 10, 20이 저장 되는데 left, right가 private로 지정되어있다.
- 그 이유는 c1.left = 100이라는 명령어로 left의 값을 초기화 시켜버릴 수 있기 때문에 private로 지정해 건드릴 수 없게 한다.
*사용할 수 있도록 유도된 인터페이스만 사용 가능하게 한다.
public | protected | default | private | |
같은 패키지, 같은 클래스 | 허용 | 허용 | 허용 | 허용 |
같은 패키지, 상속 관계 | 허용 | 허용 | 허용 | 불허용 |
같은 패키지, 상속 관계 x | 허용 | 허용 | 허용 | 불허용 |
다른 패키지, 상속 관계 | 허용 | 허용 | 불허용 | 불허용 |
다른 패키지, 상속 관계 x | 허용 | 불허용 | 불허용 | 불허용 |
클래스의 접근 제어자
위 내용은 클래스 멤버에 대한 내용이다. 클래스 접근 제어자는 총 2개로 public과 default 이다.
- public 클래스는 다른 패키지 클래스에서도 사용가능
- defulat 클래스는 같은 패키지안에서만 사용 가능
* 중요한 것은 public 클래스가 포함된 소스코드는 클래스 명과 소스코드 파일명이 같아야 한다. 다시 말해 하나의 소스코는 반드시 하나의 public 클래스만 존재 할 수 있다는 의미이다.
'Software > JAVA' 카테고리의 다른 글
final (0) | 2019.10.23 |
---|---|
abstract (0) | 2019.10.23 |
패키지 (0) | 2019.10.22 |
overloading (0) | 2019.10.21 |
overriding (0) | 2019.10.21 |