development/Java
[Java] final , static final
Happyoon ~
2021. 11. 7. 02:12
728x90
반응형
final 예약어는 지역변수를 선언할 때 사용하면 해당 지역변수를 수정할 수 없도록 만든다.
한번 값이 고정되면 값을 바꿀 수 없도록 하는 것으로, 모든 영역에서 상수로 사용되는 static final과 유사하지만 조금의 차이가 있다.
식별자는 관례상 모두 대문자로 만드는 것이 일반적이다.
사용 예시
final int num2 = 20;
final String MY_NAME = "김구라";
final Phone p1 = new Phone();
예시1
MainClass13.java - final을 다양한 type의 자료형에 사용해보기
package test.main;
import test.mypac.Phone;
public class MainClass13 {
public static void main(String[] args) {
int num1 = 10;
/*
* final 예약어를 지역변수를 선언할 때 사용하면 수정불가
* 즉, 상수를 만드는 역할을 한다.
*/
final int num2 = 20;
//변수는 저장된 값을 바꿀 수 있지만
num1 = 999;
//상수는 값이 한번 결정되면 바꿀 수가 없다.
//num2 = 999;
//상수의 식별자(상수의 이름)은 관례상 모두 대문자로 만드는 것이 일반적이다.
final String MY_NAME = "김구라";
//수정 불가
//MY_NAME = "원숭이";
final Phone p1 = new Phone();
//p1에 담긴 참조값 수정 불가
//p1 = new Phone();
}
}
"특정 필드가 static final인 클래스 살펴보기"
문자열이나 숫자를 상수화 시키면 의미가 없거나 복잡한 문자열, 숫자에 "이름을 붙인 효과"를 얻을 수 있다.
예시2
Util.java - static final 필드와 이를 활용한 메소드 만들어보기
package test.mypac;
public class Util {
//어떤 클래스의 특정 필드가 static final 로 만들어진 것들도 있다.
//문자열을 상수화 시키면 의미가 없거나 복잡한 문자열에 이름을 붙인 효과를 볼수 있다.
public static final String PUSAN="pusan1234aaaa";
public static final String INCHEON="Incheon1234aaaa";
//숫자를 상수화 시키면 의미없는 숫자에 이름을 붙인 효과를 볼수 있다.
public static final int LEVEL_1=1000;
public static final int LEVEL_2=1100;
public static final int LEVEL_3=1200;
public void send(String dest) {
if(dest.equals(PUSAN)) {
System.out.println("부산으로 전송 합니다.");
}else if(dest.equals(INCHEON)) {
System.out.println("인천으로 전송합니다.");
}
}
public void alter(int level) {
if(level == LEVEL_1) {
System.out.println("1 단계 1000 수준으로 변경합니다.");
}else if(level == LEVEL_2) {
System.out.println("2 단계 1100 수준으로 변경합니다.");
}else if(level == LEVEL_3) {
System.out.println("3 단계 1200 수준으로 변경합니다.");
}
}
}
MainClass14.java - Util 클래스를 활용하여 static final의 효과 알아보기
package test.main;
import javax.swing.JFrame;
import test.mypac.Util;
public class MainClass14 {
public static void main(String[] args) {
Util u = new Util();
u.send("pusan1234aaaa");
//같은 동작을 상수를 활용하면 좀 더 가동성도 좋고 편리하게 코딩할 수 있다.
u.send(Util.PUSAN);
u.alter(1000);
//같은 동작을 상수를 활용하면 좀 더 가동성도 좋고 편리하게 코딩할 수 있다.
u.alter(Util.LEVEL_1);
//out은 static final이기 때문에 수정 불가
//System.out = null;
JFrame f = new JFrame();
f.setBounds(100,100,500,500);
f.setTitle("나의 프레임");
f.setVisible(true);
//프레임을 닫았을 때 기본 동작 설정
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Util.PUSAN은 static final 필드로 상수이므로 값이 pusan1234aaaa와 동일하다.
따라서 둘다 "부산을 전송 합니다."의 동일한 출력이 나온다.
Util.LEVEL_1 역시 1000과 값이 동일하므로 "1단계 1000 수준으로 변경합니다."의 출력이 나온다.
같은 동작을 이렇게 상수를 활용하면 가독성이 좋고 편리하게 코딩할 수 있다.
우리가 출력할 때 많이 보던 System.out은 static final이므로 수정이 불가하다.
반응형