Java/Java icia 11일차

static , final , final static의 차이의 정리

swkn 2023. 3. 8. 17:47

Static

객체 생성 없이 사용할 수 있는 필드와 메소드를 생성하고자 할때 활용한다.

 

사용하기 위해신 필드나 메소드 선언시 앞에 static 키워드를 붙인다

 

private static int number = 100;

여기에 number1씩 증가시키는 ++number를 사용하면 static이기 때문에 호출될때마다 101 , 102 ... 로 올라간다

만약 static이 아니라면 증가메소드가 실행할때 올라가고 다시 값을 바꾸지 않는 이상 100으로 돌아가게 된다.

 

( ++number전치연산자이기때문에 1을 증가시키고 출력된다.

  number++후치연산자이므로 출력된 후에 1을 증가시키게 된다. )

 

static의 특징은 인스턴스 필드 , 메소드 , this 키워드를 사용불가하다.

인스턴스 성질은 객체 생성 후 사용할 수 있기 때문에 정적 메소드는 사용할 수 없기 때문이다.

 

Final

Final을 붙인 해당 변수는 최종적인 값이므로 , 수정이 불가능하다

 

선언할 시 동시에 값을 넣을 수 있고 , 생성자에 의해 값을 줄 수도 있다.

 

final int time = 21;

 

 

Static final

고정 + 최종적인 의 의미

 

상수를 선언하고자 할때 사용한다.

 

예를 들어

static final double PI = 3.141592;

상수 pi 값은 고정되어 있으므로 불변의 값을 가진다.

해당값은 객체마다 저장될 필요가 없고 ( Static의 성질) + 여러 값을 가질 수 없다 ( Final ) 의 특징

 

private final static DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yy/MM/dd hh:mm:ss");

public BoardDTO () {
		this.bno = "B"+number++;
		this.postDate = DTF.format(LocalDateTime.now());
	}

DTF의 값을 yy/MM/dd hh:mm:ss의 값으로 포맷하고 , 

 

BoardDTO가 생성될때 LocalDateTime.now()로 현재시간이 들어가게 된다.

 

현재시간은 변경할 필요도 , 변경할 수 없기 때문에 Final Static이 붙는 것이다.