ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java 자바] 6. 클래스 ⑥ 접근 제한자 (public, protected, default, private), Getter/Setter, 어노테이션
    Programming/Java 2022. 7. 31. 16:29
    반응형

    6-13. 접근 제한자

    클래스, 필드, 메서드 등의 선언부에서 접근 허용 범위를 지정하는 역할의 키워드

     

    [ 접근 제한자의 종류 ]

    접근 제한자 적용 대상 클래스 내부 동일 패키지 상속(타 패키지) 다른 클래스
    public 클래스, 필드, 생성자, 메소드 접근 가능 접근 가능 접근 가능 접근 가능
    protected 필드, 생성자, 메소드 접근 가능 접근 가능 접근 가능 접근 불가능
    (default) 클래스, 필드, 생성자, 메소드 접근 가능 접근 가능 접근 불가능 접근 불가능
    private 필드, 생성자, 메소드 접근 가능 접근 불가능 접근 불가능 접근 불가능

    6-13-1. 클래스의 접근 제한

    클래스에 사용 가능한 접근 제한자는 public, (default) 두 가지
    - 같은 패키지 내에서만 사용할 것인지, 다른 패키지에서도 사용 가능하게 할 것인지 설정 가능
    - public을 생략할 경우, 자동으로 default 타입의 클래스로 생성됨

    // default 접근 제한
    // 같은 패키지 내에서만 사용 가능한 클래스
    class 클래스명 { ... }
    
    // public 접근 제한
    // 다른 패키지에서도 사용 가능한 클래스
    public class 클래스명 { ... }

     

    6-13-2. 생성자의 접근 제한

    생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정됨

    - public, protected, default, private 접근 제한을 가질 수 있음

    - 클래스의 접근 제한자에 따라 컴파일러가 생성하는 기본 생성자의 접근 제한자가 달라짐

       (public 클래스의 경우 public 접근 제한을 가진 기본 생성자가 생성됨)

    접근 제한자 생성자 설명
    public 클래스(...) 모든 패키지에서 아무런 제한 없이 생성자 호출 가능 
    - 생성자가 public일 경우 반드시 클래스도 public이어야 정상적
    ❗️ 클래스가 default일 경우 생성자가 public이더라도 같은 패키지에서만 생성자 호출 가능
    protected 클래스(...) 기본적으로 같은 패키지에 속하는 클래스에서는 생성자 호출 가능
    + 다른 패키지에 속한 클래스가 자식 클래스라면 생성자 호출 가능
    (default) 클래스(...) 같은 패키지에 속하는 클래스에서만 생성자 호출 가능
    private 클래스(...) 오로지 클래스 내부에서만 생성자 호출 가능

    6-13-3. 필드와 메소드의 접근 제한

    필드와 메소드를 선언할 때 어떻게 사용할 것인지를 결정해 접근 제한자 설정 필요

    - 생성자와 동일하게 public, protected, default, private 타입의 접근제한자 사용 가능

    6-14. Getter와 Setter 메소드

    일반적으로 객체 지향 프로그래밍에서는 객체의 데이터를 외부에서 마음대로 읽고 변경하지 못하도록 직접 접근하는 것을 막음
    - 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호
    - 데이터는 외부에서 접근할 수 없도록 막고, 메소드는 공개해 외부에서 메소드를 통해 데이터로 접근하도록 하는 것
    - 메소드를 활용하면 매개값 검증을 통해 유효한 값만 데이터로 저장 가능

    - 이를 위해 가장 많이 사용하는 것이 getter, setter 메소드
    - 필드 선언 후, [source → Generate Getters and Setters] 에서 자동 생성 가능

    // Car.java
    public class Car {
      private int speed;
    	
      public int getSpeed() {
        return speed;
      }
    
      public void setSpeed(int speed) {
        this.speed = speed;
      }
    }
    
    // CarTest.java
    public class CarTest {
      public static void main(String[] args) {
        Car c1 = new Car();
    		
        c1.speed();	// 오류 발생
        c1.setSpeed(100);
        System.out.println(c1.getSpeed());
      }
    }

    6-15. 어노테이션 (Annotation)

    메타데이터로, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보

    - 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공
    - 소프트웨어 개발 툴의 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공

    - 실행 시(런타임 시) 특정 기능을 실행하도록 정보 제공

     

    [ 대표적인 예시 ]

    @Override
    • 선언한 메서드가 오버라이드 되었다는 것을 나타냄
    • 만약 상위클래스에서 해당 메서드를 찾을 수 없다면 컴파일 에러 발생시킴
    @Deprecated
    • 해당 메서드가 더 이상 사용되지 않음을 표시
    • 만약 사용할 경우 컴파일 경고를 발생시킴
    반응형

    댓글

Designed by Tistory.