default | private | protected | public | |
---|---|---|---|---|
같은 클래스 | Y | Y | Y | Y |
같은 패키지 같은 클래스 | Y | N | Y | Y |
다른 패키지 같은 클래스 (상속) | N | N | Y | Y |
다른 패키지 다른 클래스 | N | N | N | Y |
객체 지향 언어의 장점 중 캡슐화와 관련 있는 접근 지정자의 권한이다.
다른 클래스 , 패키지에서도 private 변수에 접근할 수 있도록 해주는 메서드는?
getter, setter로 약속해서 사용하긴 하지만 지정되어 있지는 않음
protected로 구현된 메소드는 반드시 자식클래스가 override를 해야한다?
No, 다른 패키지에 있다면 상속 받아서 사용 가능
( 같은 패키지 내에 있다면 바로 사용 가능 )
abstract메서드의 접근 제어자는 private일 수 있다/없다
자식 클래스에서 재정의를 해야되기 때문에 사용할 수 없다
접근제어자를 사용하는 궁극적 목표는 캡슐화이다 그렇다면 spring을 이용한 개발 중 사용했던 캡슐화의 대표적 예시는?
Dto, Model, domain, JPA Entity
(객체지향 언어의 모든 클래스는 캡슐화를 장점으로 두고 있기 때문에 문제가 잘못 된 것 같다.)
static으로 정의된 데이터를 어디서든 사용할 수 있다/없다
메모리에 적재되기 때문에 사용할 수 있다.
네모에 들어갈 수 있는 접근제어자는?
public, protected
서로 다른 패키지기 때문에 default는 오답
public 메소드는 private 멤버와 프로그램 사이의 ( ) 역할을 수행한다고 할 수 있습니다.
( )안에 답을 넣으시오.
인터페이스
class Calculator{
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()+"----");
}
}
class Main {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sumDecoPlus();
c1.sumDecoMinus();
}
}
8-1. 위 코드는 캡슐화된 코드인가?
멤버변수가 private로 감싸져 있어야 한다.
8-2. Main 클래스 실행 결과는?
++++30++++
----30----
1 class Hello{
2 protected static void hello(){
3 System.out.println("HELLO!");
4 }
5 }
6
7 class Hi{
8 private static void hi(){
9 System.out.println("HI!");
10 }
11 }
12
13 class Main02{
14 public static void main(String[] args) {
15 Hello.hello();
16 Hi.hi();
17 }
18 }
9-1. 위 코드는 정상적으로 실행되는가?
16번 줄에서 에러
9-2. 3번의 이유는?
같은 패키지 내에서 private로 지정되어 있기 때문에 16번 줄에서 에러
만약 다른 패키지라면 15번줄 protected도 에러