본문 바로가기

백엔드개발자 준비하기

[백엔드개발자 준비하기] 접근지정자

[접근지정자] : 변수, 메소드 앞에 붙음(생성자도 일종의 메소드)
-클래스의 멤버 각각에 외부에서 접근할 수 있는 범위를 지정하는 것
-public : 접근제한 없음
-protected : 동일 패키지와 상속 받은 클래스 내부, 다른 패키지 안에 있어도 상속받은 클래스면 사용가능
-default : 동일 패키지 내에서만 접근 가능, 보통 생략되어있음
-private : 동일 클래스 내에서만

 

주로 사용하는 것은 public과 private

-변수가 돈, 메소드가 은행원, 클래스가 은행일때
-변수를 꺼내려고 메소드에게 요청하면 메소드가 클래스에서 동작하여 변수에 있던 값을 가져다 줌

 

예시

[J11_Student]

public class J11_Student {

	private String name;
	private int age;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	public void printInfo() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
	}
}

[J11_StudentMain]

// 다른 클래스가 public이어야 import가능
import j11_접근지정자.default1.J11_StudentDefault;

public class J11_StudentMain {

	public static void main(String[] args) {
		J11_Student s1 = new J11_Student();
//		s1.name = "박은빈";
		
		s1.printInfo();
		
		// 해당 생성자도 public 이어야 생성가능 
		J11_StudentDefault s2 = new J11_StudentDefault();
		
		// 변수, 메소드 등 모든 것을 public으로 바꾸어야 호출 가능
		s2.printInfo();
		
		// 외부에서 변수에 직접접근
//		s2.name = "박은빈";
		
		// 외부에서 변수에 직접접근, 멤버변수를 private으로 지정해두면 접근 불가
//		System.out.println("이름 : " + s2.name);
		// 메소드가 대신 접근, 메소드는 private로 설정하면 안됨
		System.out.println("이름 : " + s2.getName());
	}
}

다른패키지

[J11_StudentDefault]

public class J11_StudentDefault {

	// 멤버변수는 무조건  private : 외부로부터 정보를 은닉
	private String name;
	private int age;
	
	public J11_StudentDefault() {
		
	}
	
	public J11_StudentDefault(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void printInfo() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
	}
	
	// Getter : 값을 들고오는 것
	public String getName() {
		// 같은 클래스 내부에서는 접근 가능
		return name;
	}
	
	// Setter : 값을 대입하는 것
	// 변수를 직접입력할 수 없기 때문에 메소드가 대신 입력해줌 
	public void setName(String name) {
		this.name = name;
	}
	
	// 건들면 안되는 메소드 같은 것들도 모두 private 로 지정해둠 : 캡슐화
	
}