JAVA

[JAVA] 접근 제어자

개발 공주 2023. 5. 31. 18:56
728x90

📌 제어자는 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여해 줍니다.

  • 접근 제어자 : public, protected, default, private
  • 그 외 제어자 : static, final, abstract

❗️ 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근 제어자는 단 하나만 사용할 수 있습니다.

 

접근 제어자

📌 멤버 또는 클래스에 사용, 외부에서 접근하지 못하도록 제한합니다.

  • 클래스, 멤버변수, 메서드, 생성자에 사용되고, 지정되어 있지 않다면 default 입니다.
    • public : 접근 제한이 전혀 없습니다.
    • protected : 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능합니다
    • default : 같은 패키지 내에서만 접근이 가능합니다.
    • private : 같은 클래스 내에서만 접근이 가능합니다.

📌 사용가능한 접근 제어자

  • 클래스 : public, default
  • 메서드 & 멤버변수 : public, protected, default, private
  • 지역변수 : 없음

📌 접근 제어자를 이용한 캡슐화 (은닉성)

  • 접근제어자는 클래스 내부에 선언된 데이터를 보호하기 위해서 사용합니다.
  • 유효한 값을 유지하도록, 함부로 변경하지 못하도록 접근을 제한하는 것이 필요합니다.

📌 생성자의 접근 제어자

  • 생성자에 접근 제어자를 사용함으로 인스턴스의 생성을 제한할 수 있습니다.
  • 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치합니다.

Getter 와 Setter (중요)

📌 객체의 무결성 즉, 변경이 없는 상태를 유지하기 위해 접근 제어자를 사용합니다.

  • 이때 외부에서 필드에 직접 접근하는 것을 막기 위해 필드에 private, default 등의 접근 제어자를 사용할 수 있습니다.
  • 그렇다면 우리는 어떻게 객체의 private 필드를 읽어오거나 저장할 수 있을까?
  • 우리는 Getter 와 Setter 를 사용하여 이를 해결할 수 있습니다. 

Getter

📌 외부에서 객체의 private 한 필드를 읽을 필요가 있을 때 Getter 메서드를 사용합니다.

private double speed;  // 자동차 속도 , km/h
private char gear = 'P'; // 기어의 상태, P,R,N,D
private boolean lights; // 자동차 조명의 상태
  • 자동차 클래스의 필드에 이처럼 private 접근 제어자로 지정한 필드가 있을 때 Getter 메서드를 통해 값을 가져올 수 있습니다.
public String getModel() {
    return model;
}

public String getColor() {
    return color;
}

public double getPrice() {
    return price;
}
  • 메서드 이름의 규칙은 : get + 필드이름(첫 글자 대문자) 입니다.
  • 사용하는 방법은 인스턴스 메서드 호출과 동일합니다.
  •  

Setter

📌 외부에서 객체의 private 한 필드를 저장/수정할 필요가 있을 때 Setter 메서드를 사용합니다.

private double speed;  // 자동차 속도 , km/h
private char gear = 'P'; // 기어의 상태, P,R,N,D
private boolean lights; // 자동차 조명의 상태
  • 자동차 클래스의 필드에 이처럼 private 접근 제어자로 지정한 필드가 있을 때 Setter 메서드를 통해 값을 저장하거나 수정할 수 있습니다.
public void setModel(String model) {
    this.model = model;
}

public void setColor(String color) {
    this.color = color;
}

public void setPrice(double price) {
    this.price = price;
}
  • 메서드 이름의 규칙은 : set + 필드이름(첫 글자 대문자) 입니다.
  • 사용하는 방법은 인스턴스 메서드 호출과 동일합니다.

제어자의 조합

  • 사용가능한 제어자
    • 클래스 : public, default, final, abstract
    • 메서드 : public, protected, default, private, final, abstract, static
    • 멤버변수 : public, protected, default, private, final, static
    • 지역변수 : final

⚠️ 제어자 사용시 주의 사항

  • 메서드에 static과 abstract를 함께 사용할 수 없다.
  • 클래스에 abstract와 final을 동시에 사용할 수 없다.
  • abstract메서드의 접근 제어자가 private일 수 없다.
  • 메서드에 private와 final을 같이 사용할 필요는 없다.

 

 

'JAVA' 카테고리의 다른 글

[JAVA] 클래스간의 관계  (0) 2023.06.01
[JAVA] 상속 개념 및 예시  (0) 2023.05.31
[JAVA] this 와 this()  (0) 2023.05.31
[JAVA] 생성자  (0) 2023.05.31
[JAVA] 지역변수 및 상수  (0) 2023.05.31