main() 메소드가 실행되기 전에 이미 생성. static 멤버가 포함된 객체를 생성하기 전에 사용 가능.
class Ex{
static int num;
static void add(){ ... }
}
static 멤버 생성
클래스가 로딩되는 시점에 static 멤버는 생성되어 사용 가능.
static 멤버 접근
non-static 멤버와 사용 방법이 동일. ( 객체.static필드 or 객체.static메소드 )
클래스 이름으로 바로 접근 가능( static 멤버는 클래스 당 하나만 생성되기 때문) ( 클래스명.static 멤버 or 클래스명.static메소드 )
※ non-static 메소드는 클래스 이름으로 접근 불가
static 활용
1. 전역 변수와 전역 함수 만들 때
자바의 캡슐화 원칙으로 인해 어떤 변수나 함수도 클래스 바깥에 존재할 수 없다.
but, static 멤버를 가진 클래스를 작성하여 전역함수처럼 사용 가능.
class Math{
public static int add(int a, int b){
return a + b;
}
public class Result{
public static void main(String[] args){
System.out.println(Math.add(10, 8));
}
}
※ 클래스 이름으로 static 멤버 직접 호출
2. 공유 멤버 만들 때
static 메소드 제약 조건
1. static 메소드는 static 멤버만 접근 가능.
static 메소드는 객체 없이도 존재하기 때문에, 객체와 함께 생성되는 non-static 멤버를 사용할 수 없다.
※ 반면, non-static 메소드는 static 멤버를 사용할 수 있다.
2. static 메소드는 this 사용 불가.
객체 없이도 존재하기 때문에 this를 사용할 수 없다.
non-static 멤버
객체가 생길 때 객체마다 생성.
다른 객체들과 공유하지 않고 객체가 사라지면 non-static 멤버도 사라져 접근 불가.
class Ex{
int num;
void add(){ ... }
}
non-static 멤버
static 멤버
공간적 특성
멤버는 객체마다 별도존재 : 인스턴스 멤버(각 객체마다 하나씩 생성)
멤버는 클래스당 하나 생성 : 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성 : 클래스 멤버(클래스당 하나씩 생성)
시간적 특성
객체 생성 시 멤버 생성 : 객체가 생길 때 멤버도 생성 : 객체 생성 후 멤버 사용 가능 : 객체가 사라지면 멤버도 사라진다.
클래스 로딩 시 멤버 생성 : 객체가 생성되기 전 이미 생성 : 객체 생성되기 전부터 사용 가능 : 객체 사라져도 멤버 사라지지 않는다. : 프로그램이 종료될 때 멤버 사라진다.
공유 특성
공유되지 않는다. : 객체 내 각각의 공간 유지
동일한 클래스의 모든 객체들에 의해 공유
final
final 클래스
final이 클래스 앞에 사용되면 클래스를 상속받을 수 없다는 것을 의미.
final 메소드
final로 메소드를 선언하면 오버라이딩할 수 없는 메소드임을 선언.
자식 클래스가 부모 클래스의 특정 메소드를 오버라이딩 하지 못하고 무조건 상속받아 사용하도록 할 때 사용.
final 필드
final로 필드 선언하면 필드는 상수가 된다.
상수 필드는 한 번 초기화되면 값을 변경할 수 없다.
final 키워드를 public static과 함께 선언하면 프로그램 전체에서 사용할 수 있는 상수가 된다.
[Java] static 멤버와 final
static 멤버
객체를 생성하지 않고도 사용할 수 있는 멤버.
클래스당 하나만 생성되는 멤버로 동일한 클래스의 모든 객체들이 공유.
main() 메소드가 실행되기 전에 이미 생성. static 멤버가 포함된 객체를 생성하기 전에 사용 가능.
static 멤버 생성
클래스가 로딩되는 시점에 static 멤버는 생성되어 사용 가능.
static 멤버 접근
※ non-static 메소드는 클래스 이름으로 접근 불가
static 활용
1. 전역 변수와 전역 함수 만들 때
자바의 캡슐화 원칙으로 인해 어떤 변수나 함수도 클래스 바깥에 존재할 수 없다.
but, static 멤버를 가진 클래스를 작성하여 전역함수처럼 사용 가능.
※ 클래스 이름으로 static 멤버 직접 호출
2. 공유 멤버 만들 때
static 메소드 제약 조건
1. static 메소드는 static 멤버만 접근 가능.
static 메소드는 객체 없이도 존재하기 때문에, 객체와 함께 생성되는 non-static 멤버를 사용할 수 없다.
※ 반면, non-static 메소드는 static 멤버를 사용할 수 있다.
2. static 메소드는 this 사용 불가.
객체 없이도 존재하기 때문에 this를 사용할 수 없다.
non-static 멤버
객체가 생길 때 객체마다 생성.
다른 객체들과 공유하지 않고 객체가 사라지면 non-static 멤버도 사라져 접근 불가.
: 인스턴스 멤버(각 객체마다 하나씩 생성)
: 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성
: 클래스 멤버(클래스당 하나씩 생성)
: 객체가 생길 때 멤버도 생성
: 객체 생성 후 멤버 사용 가능
: 객체가 사라지면 멤버도 사라진다.
: 객체가 생성되기 전 이미 생성
: 객체 생성되기 전부터 사용 가능
: 객체 사라져도 멤버 사라지지 않는다.
: 프로그램이 종료될 때 멤버 사라진다.
: 객체 내 각각의 공간 유지
final
final 클래스
final이 클래스 앞에 사용되면 클래스를 상속받을 수 없다는 것을 의미.
final 메소드
final 필드
'Back-End > Java' 카테고리의 다른 글