2018-2-27 TIL Access-level Modifier
접근 수준 지시자(Access-level Modifier)
접근수준지시자를 선언하는 경우는 다음의 두가지 경우이다. 클래스의 정의, 클래스의 인스턴스 변수와 메소드
- 클래스 정의 대상 : public, default
-
인스턴스 변수와 메소드 대상 : public, protected, private, default
- 클래스가 public으로 선언이 되면, 위치에 상관없이 어디서든 해당 클래스의 인스턴스를 생성할 수 있다.
public class AAA { // declare public class ... }
- 클래스가 default로 선언이 되면, 동일 패키지 내에서만 인스턴스 생성이 가능하다.
class ZZZ { // declare default class ... }
- 하나의 소스파일에 하나의 클래스만 public으로 선언한다.
- 소스파일의 이름과 public으로 선언된 클래스의 이름을 일치시킨다.
인스턴스 멤버 대상의 public, protected, private, default선언
class AAA {
public int num;
// 인스턴스 변수의 public선언
protected int num2;
// 인스턴스 변수의 protected선언
private int num3;
// 인스턴스 변수의 private선언
int num4;
// 인스턴스 변수의 default선언
public void md1(){...}
// 인스턴스 메소드의 public 선언
protected void md2(){...}
// 인스턴스 메소드의 protected선언
private void md3(){...}
// 인스턴스 메소드의 private선언
void md4(){...}
// 인스턴스 메소드의 default선언
}
인스턴스 멤버의 public과 default가 가지는 의미
- public : 어디서든 접근가능하다.
- default : 동일 패키지내에서만 접근 가능하다.
인스턴스 멤버의 private선언이 갖는 의미
class Duck {
private int numLeg = 2;
// 클래스 내부에서만 접근 가능
public void md1(){
System.out.println(numLeg); //접근가능
md2(); //호출가능
}
private void md2(){
System.out.println(numLeg); // 접근가능
}
void md3(){
System.out.println(numLeg); // 접근가능
md2(); // 호출가능
}
}
- private로 선언된 변수 numLeg는 동일 클래스에 정의된 메소드에서만 접근이 가능하다. 마찬가지로 private로 선언된 메소드 md2도 Duck클래스에 정의된 메소드에서만 호출이 가능하다.
접근제어자 허용범위
- public > protected > default > private
캡슐화
- 캡슐화는 클래스안에 무엇을 넣을까에 대한 이론이다.
객체지향의 관점에서 캡슐은 클래스에 해당이 된다.
- 하나의 목적을 이루기 위해 관련 있는 모든 것을 하나의 클래스에 담는것
package yoon;
class SinusCap {
void sniTake(){
System.out.println("콧물이 싹~ 납니다. ");
}
void sneTake(){
System.out.println("재채기가 멎습니다.");
}
void snuTake(){
System.out.println("코가 뻥 뚫립니다.");
}
void take(){
sniTake();
sneTake();
snuTake();
}
}
class ColdPatient {
void takeSinus(SinusCap cap){
cap.take();
}
}
public class OneClassEncapsulation {
public static void main (String [] args){
ColdPatient suf = new ColdPatient();
suf.takeSinus(new SinusCap());
}
}
//result
콧물이 싹~ 납니다.
재채기가 멎습니다.
코가 뻥 뚫립니다.
- 캡슐화는 절대로 클래스를 크게 만들라는 뜻이 아니다. 캡슐화에서 말하고자하는 것은 크기가 아닌 내용이다.
Written on February 27, 2018