[Java]접근제어자(Access Modifier)

develop.u·2023년 2월 3일
0

스터디

목록 보기
1/1

❓접근제어자란

🔹 클래스의 멤버인 변수와 메소드들의 접근 권한을 지정하는 역할
🔹 public, protected, default, private가 있다.

❗접근제어자를 사용하는 이유

🔹외부에서 데이터에 직접적인 접근을 허용하지 않도록 함으로써 정보 은닉을 구체화 하기 위해
🔹클래스 내부에 선언된 데이터를 보호하기 위해

객체지향에서의 정보 은닉(data hiding)
사용자가 굳이 알 정보가 없는 정보는 사용자로부터 숨겨야 한다는 개념
👉🏻 이를 통해 사용자는 언제나 최소한의 정보만으로 프로그램을 사용할 수 있다.

✔️ 접근 허용 범위

public

🔹접근 제한이 없다.
🔹어디서든 접근 가능하다.

protected

🔹같은 패키지, 같은 클래스, 자식 클래스에서 접근 가능하며 이외에는 private처럼 취급된다.

default

🔹같은 클래스, 같은 패키지 내에서만 접근 가능하다.

private

🔹private 접근제어자를 사용하여 선언된 클래스 멤버는 외부에서 직접 접근할 수 없다.
🔹private 멤버는 해당 멤버를 선언한 클래스(같은 클래스 내)에서만 접근할 수 있다.
👉🏻 외부에서 접근하기 위해서는 해당 객체의 public 메소드를 통해서만 접근할 수 있다.
(ex. getter, setter)

접근제어자의 접근 범위

public > protected > default > private


✏️문제✏️

1. 다른 클래스, 다른 패키지에서도 private 변수에 접근할 수 있도록 해주는 메서드는?

2. protected로 구현된 메소드는 반드시 자식클래스가 override를 해야한다?

3. abstract메서드의 접근 제어자는 private일 수 (있다/없다)

4. [ ]에 들어갈 수 있는 접근제어자는?

package study;

public class ChanPark {
	[   ] String firstname = "chan";
    [   ] String lastname = "park";
}
----------------------------------
package study.AccessModifier;

import study.ChanPark

public class ChanHoPark extends ChanPark{
	
    public static void main(String[] args){
    	ChanHoPark chp = new ChanHoPark();
        System.out.println(chp.lastname);
    }
}

결과 : park

5. public 메서드는 private 멤버와 프로그램 사이의 ( ) 역할을 수행한다고 할 수 있습니다. ( )안에 답을 넣으시오.

6. 코드를 보고 질문에 답하시오

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();
    }
}

6-1. 위 코드는 캡슐화된 코드인가?

6-2. Main 클래스 실행 결과는?

7. 코드를 보고 질문에 답하시오.

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 }

7-1. 위 코드는 정상적으로 실행되는가?

7-2. 7-1번의 이유는?

8. 접근제어자의 접근 범위를 순서대로 작성하시오.

[ ] > [ ] > [ ] > [ ]


✍🏻답✍🏻

1. 다른 클래스, 패키지에서도 private 변수에 접근할 수 있도록 해주는 메서드는?

답 : getter, setter

2. protected로 구현된 메소드는 반드시 자식클래스가 override를 해야한다?

답 : x
이유 : protected 접근제어자는 자식클래스에서 접근 가능할 뿐이지, 꼭 오버라이드 해야하는 건 아니다.

3. abstract메서드의 접근 제어자는 private일 수 (있다/없다)

답 : 없다
이유 : abstract 메서드는 자식클래스에서 구현하기 위해 접근해야 하기 때문에

4. [ ]에 들어갈 수 있는 접근제어자는?

package study;

public class ChanPark {
	[   ] String firstname = "chan";
    [   ] String lastname = "park";
}
----------------------------------
package study.AccessModifier;

import study.ChanPark

public class ChanHoPark extends ChanPark{
	
    public static void main(String[] args){
    	ChanHoPark chp = new ChanHoPark();
        System.out.println(chp.lastname);
    }
}

결과 : park

답 : public, protected
이유 : 다른 패키지이지만 ChanPark 클래스를 상속받아서 자식클래스가 되었으므로 protected도 가능하다

5. public 메서드는 private 멤버와 프로그램 사이의 ( ) 역할을 수행한다고 할 수 있습니다. ( )안에 답을 넣으시오.

답 : 인터페이스, 연결자, 접근자, 다리.. 접근을 하도록 도와주는 역할을 가리키는 말이면 다 맞는 거 같다.

6. 코드를 보고 질문에 답하시오

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();
    }
}

6-1. 위 코드는 캡슐화된 코드인가?
답 : x
이유 : 멤버변수가 private로 지정되어 있지 않기 때문

6-2. Main 클래스 실행 결과는?
답 :
++++30++++
----30----

7. 코드를 보고 질문에 답하시오.

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 }

7-1. 위 코드는 정상적으로 실행되는가?
답 : 에러

7-2. 7-1번의 이유는?
답 : 16번에서 에러, private로 지정되어 있어서 호출 불가능

8. 접근제어자의 접근 범위를 순서대로 작성하시오.

답 : public > protected > default > private

0개의 댓글

관련 채용 정보