원본 영역에서 사용할 수 있는 변수
저장 영역이 다른 변수
int field = 0; // 일반 변수(필드)
static int sField= 1234; // 원본영역에서 사용할수 있는 변수
public static void main(String[] args) {
// 일반 변수와 메서드 사용하기
// 객체화 해서 사용해야 한다
Sub sub = new Sub();
System.out.println(sub.field);
System.out.println(sub.multi(6, 2));
// static member 는 원본에서 직접 가져와야 한다.
// 원본이 있는 Sub 클래스에서 바로 사용 가능
System.out.println(Sub.sField);
System.out.println(sub.plus(4, 3));
System.out.println(sub.minus(10,5));
//static 을 복사본에서도 쓸 수 있다.
//원칙적으로 잘못된 방법이지만 가능하게 해 준것
// 복사본 -> 원본을 찾음 -> 원본에서 값을 가져옴
System.out.println(sub.sField);
System.out.println(sub.minus(3, 3));
System.out.println(sub.plus(4, 3));
final 은 한번 지정 되면 프로그램 종료 시 까지 변경이 불가능 하다.
final 은 생성자에서만 초기화 가능 하다.
final 은 한번 초기화 되면 못 바꾼다.
final 은 초기화를 해줘야만 한다.
필드에 기본값을 주지 않으면 생성자 에서라도 무조건 초기화 해줘야 한다.
Static final 의 경우 객체화 초기화가 되지 않아 불변의 값 으로 간주 한다.
우리는 이런 필드를 상수(Constant) 라고 하며 모두 대문자로 표기 한다.
Java 에서는 접근을 허용 하거나 제한 할 수 있다.
(남들이 사용할 수 있는 코드도 있지만 내부적으로 만 사용할 경우도 있기 때문)
이처럼 특정 부분의 접근을 제한하는 것을 캡슐화라고 한다.