자유와 규제
규제 : 추상 클래스, final, 접근 제어자, 인터페이스와 같은 규칙을 통해 체계적인 프로그래밍을 할 수 있다.
키워드 private으로 시작되는 메소드는 클래스 밖에서는 접근할 수 없다. 이 private 의 자리에 오는 것들을 접근 제어자 (access modifier)라고 한다. 아래의 코드에서 System.out.println(a.x());
은 클래스 내부에서는 z()
에 접근을 하면서 외부에서도 접근이 가능하여 정상 동작하게 된다.
class A {
public String y () {
return "public void y()";
}
private String z() {
return "putblic void z()";
}
public String x() {
return z();
}
.
.
.
public class AccessDemo1 {
public static void main(String[] args) {
A a = new A();
System.out.println(a.y());
System.out.println(a.z());
System.out.println(a.x());
.
.
//오류
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method z() from the type A is not visible
애플리케이션이 로직을 보호하기 위해 객체를 사용하는 입장 (사용자)에서 객체 내부적으로 사용하는 변수나 메소드에 접근을 차단하는 것이 필요하다. 또한 사용자에게 객체를 조작할 수 있는 수단만을 제공함으로써 결과적으로 객체의 사용에 집중할 수 있도록 돕기 위함도 있다. 몰라도 되는 것은 몰라도 된다.
접근제어자는 클래스의 멤버 (메소드, 변수)의 접근 권한을 지정한다.
접근 제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용할 수 있고, default인 경우는 같은 패키지에서만 사용 가능하다.
public class의 클래스명과 소스코드의 파일명이 같아야 한다. 즉 하나의 소스 코드에는 하나의 public class만이 존재할 수 있다.