• 서로 관련있는 클래스 파일(컴파일된 .class파일)을 저장하는 디렉토리
• 자바 응용 프로그램은 하나 이상의 패키지로 구성된다.
• private : 외부로부터 완벽 차단
• 디폴트(접근지정자를 생략한 경우) : 동일 패키지에는 허용
• protected : 동일 패키지와 자식 클래스에 허용
• public : 모든 클래스에 허용
• 클래스나 일부 멤버를 다른 클래스에서 접근하도록 허용하기 위해서 사용
• 객체 지향 언어의 캡슐화는 멤버를 보호하는 것이다.
-> 접근 지정자는 캡슐화에 묶여있는 객체 보호의 일부를 해체할 목적으로 사용한다.
• 패키지에 관계 없이 모든 클래스에게 접근 허용
• 동일 클래스 내에서만 접근 허용
• 상속 받은 서브 클래스에서도 접근 불가능
• 같은 패키지 내의 모든 클래스에게 접근 허용
• 상속 받은 서브 클래스는 접근 허용
• 상속 받은 서브 클래스가 다른 패키지에 있어도 접근 가능
• 같은 패키지 내의 다른 클래스에게 접근 허용
• 멤버들은 객체마다 독립적으로 별도로 존재한다. (인스턴스 멤버)
• 필드와 메소드는 객체 생성 후 비로소 사용이 가능하다.
• 멤버들은 다른 객체에 의해 공유되지 않는다.
• 멤버는 객체 내에 각각의 공간을 유지한다.
• 객체가 사라지면 멤버도 사라진다.
• 객체마다 생기는 것이 아니라 클래스마다 하나만 생성된다.
• 클래스 멤버라고도 한다.
• 객체를 생성하지 않고도 사용이 가능하다.(객체가 생성되기 전에 이미 생성됨)
• 클래스가 로딩될 때 공간을 할당받는다.
• 동일한 클래스의 모든 객체가 공유한다.
• 객체가 사라져도 멤버는 사라지지 않는다.
• 프로그램이 종료될 때 사라진다.
1. 전역 변수와 전역 함수를 만들 때 활용
• 전역 변수와 전역 함수는 static으로 클래스에 작성
• 예) Math 클래스 (모든 필드와 메소드가 static으로 선언)
public class Math {
public static int abs(int a);
public static double cos(double a);
public static int max(int a, int b);
public static double random();
}
2. 공유 멤버를 작성할 때 활용
• static 필드나 메소드는 하나만 생성한다.
• 클래스의 모든 객체들이 공유하여 사용
• static 메소드는 객체가 생성되지 않아도 실행될 수 있지만
• non-static 메소드는 객체가 생성되어야 사용할 수 있기 때문
• non-static 메소드는 static 멤버를 사용할 수 있다.
• this는 현재 객체를 가리키는 키워드이다.
• static 메소드는 객체가 생성되지 않아도 실행할 수 있기 때문이다.
• 클래스 상속 불가능
final class FinalClass {
........
}
class SubClassOfFinalClass extends FinalClass {
........ // 컴파일 오류 발생!
}
• 오버라이딩 불가능
public class SuperClass {
protected final int finalMethod() {
.....
}
}
class SubClass extends SuperClass {
@Override
protected int finalMethod() {
.... // 컴파일 오류 발생!
}
}
• 상수를 선언할 때 사용
• 상수 필드는 선언 시에 초기 값을 초기화하여야 한다.
• 상수는 실행 중에는 변경할 수 없다.
class Circle {
public static final double PI = 3.14;
void changePi() {
PI = 3.1415; // 컴파일 오류 발생!
}
}