접근제어자(Access Modifier)

한바울·2023년 2월 3일
0

스터디

목록 보기
1/4

JAVA 특징

  • 코드의 재사용성 높음
    • 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성
  • 코드의 관리가 용이
    • 코드의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경 가능
  • 신뢰성이 높은 프로그래밍 가능
    • 제어자와 메소드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지

객체 지향 언어

  • 장점
    • 상속, 캡슐화, 다형성
    • 코드의 재사용 및 유지보수에 용이함
  • 단점
    • 인터프리터 방식 (절차지향 언어) 보다 비교적 느린 속도
    • 높은 설계 역량 요구
    • 코드의 잠재적인 복잡성 때문에 다소 이해하기 어려울 수 있음(추상화, 상속, 인터페이스 등)

접근 지정자 권한

defaultprivateprotectedpublic
같은 클래스YYYY
같은 패키지
같은 클래스
YNYY
다른 패키지
같은 클래스
(상속)
NNYY
다른 패키지
다른 클래스
NNNY

객체 지향 언어의 장점 중 캡슐화와 관련 있는 접근 지정자의 권한이다.

스터디 개인 문제

  1. 다른 클래스 , 패키지에서도 private 변수에 접근할 수 있도록 해주는 메서드는?
    getter, setter로 약속해서 사용하긴 하지만 지정되어 있지는 않음

  2. protected로 구현된 메소드는 반드시 자식클래스가 override를 해야한다?
    No, 다른 패키지에 있다면 상속 받아서 사용 가능
    ( 같은 패키지 내에 있다면 바로 사용 가능 )

  3. abstract메서드의 접근 제어자는 private일 수 있다/없다
    자식 클래스에서 재정의를 해야되기 때문에 사용할 수 없다

  4. 접근제어자를 사용하는 궁극적 목표는 캡슐화이다 그렇다면 spring을 이용한 개발 중 사용했던 캡슐화의 대표적 예시는?
    Dto, Model, domain, JPA Entity
    (객체지향 언어의 모든 클래스는 캡슐화를 장점으로 두고 있기 때문에 문제가 잘못 된 것 같다.)

  5. static으로 정의된 데이터를 어디서든 사용할 수 있다/없다
    메모리에 적재되기 때문에 사용할 수 있다.

  6. 네모에 들어갈 수 있는 접근제어자는?

    public, protected
    서로 다른 패키지기 때문에 default는 오답

  7. 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도 에러

profile
몰두하는 사람

0개의 댓글