///////
Search

접근 제한자

날짜
2022/09/23
텍스트

접근 제한자

접근 제한자의 종류 및 범위

접근 제한자는 4가지의 종류가 있으며 접근 가능 범위는 다음 표와 같다.
default 는 변수나 메서드 선언 시 아무것도 적지 않았을 때의 경우이다.
class Sample { int Value; // default int Value; void Method() { // default void Method() } }
Java
복사
클래스에는 publicdefault 가 사용 가능하다.
변수와 메서드에는 public , protected , default , private 모두 사용 가능하다.
default 의 경우 같은 패키지 내에서만 사용 가능하다.
package edu.lion.car; public class SCar { int year = 2000; // 변수가 default로 선언되었다. SCar(){ // 생성자가 default로 선언되었다. System.out.println("삼성차 생성자"); } }
Java
복사
import edu.lion.car.SCar; public class JvmTest { public static void main(String[] args) { SCar sar = new SCar(); // 여기서 컴파일 에러가 난다. // SCar의 생성자가 public이 아니라서 // 같은 package 가 아니면 객체생성 불가능 System.out.println(sar.year); // class SCar의 year 변수가 // default로 선언되었기 때문에 에러가 난다. } }
Java
복사
class Scarint year 와 생성자 SCar() 가 default로 선언되었기 때문에 다른 패키지에서는 사용이 불가능하다.
사용하고 싶다면 public 으로 선언해주어야 한다.

매개 변수를 통해서 잘못된 값이 넘어오는 것을 막기 위해 private 를 사용하는 것.
매개 변수가 값을 함부로 변경하지 못하게 변수를 private 로 선언한다.
private 에 접근하기 위해서 gettersetter 를 사용한다.
gettersetter 예시
class Car{ public int getSpeed() { // 값을 부르는 Getter return speed; } public void setSpeed(int speed) { // 값을 수정할 수 있는 Setter this.speed = speed; } }
Java
복사
예제 코드
class Circle{ private double rad = 0; // private로 선언되었기 때문에 final double PI = Math.PI; // Circle 클래스 내부에서만 사용 가능하다. public double getRad() { // rad를 위한 Getter return rad; } public void setRad(double r) { // rad를 위한 Setter if(r < 0){ rad = 0; return; } this.rad = r; } public Circle(double r) { setRad(r); } public double getArea(){ return rad * rad * PI; } }
Java
복사
public class PrivateTest { public static void main(String[] args) { Circle c = new Circle(1.5); System.out.println("1.5일 때 " + c.getArea()); c.setRad(2.5); System.out.println("2.5일 때 " + c.getArea()); c.setRad(-3.3); System.out.println("-3.3일 때 " + c.getArea()); c.rad = -4.5; // Circle 클래스의 rad는 private 이므로 컴파일 오류가 난다. System.out.println("-4.5일 직접 접근할 때 " + c.getArea()); } }
Java
복사
위 코드처럼 Circle 클래스의 rad 에 음수가 오는 것을 막기 위해서 radprivate 로 선언했다.
그리고 rad 에 접근하기 위해 gettersetter 를 만들었다.
PrivateTest 의 주석처럼 c.rad = -4.5; 는 컴파일 오류가 난다.

접근제한자 관련 실무 Tip

1.
모든 변수는 무조건 private로 선언.
잘못된 값이 매개변수를 통해서 넘어오는 것을 막기 위해서.
2.
변수에 대해 gettersetter 를 만들어서 사용한다.
private 값에 접근하기 위한 메서드
3.
하나의 파일에서 public class 는 하나만 사용 가능하다.
4.
Class 와 생성자는 접근제한자를 별도로 설정해야 한다.
Class 가 public 이어도 생성자(메서드)는 접근 제한자를 따로 설정해 주어야 사용할 수 있다.
package edu.lion.car; public class HCar { HCar(){ // default 생성자 System.out.println("현대차 생성자"); } }
Java
복사
import edu.lion.car.HCar; public class JvmTest { public static void main(String[] args) { HCar har; // HCar의 생성자 HCar()가 default이므로 har = new HCar(); // 여기에서 컴파일 오류가 난다. } }
Java
복사