티스토리 뷰
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이므로 수정이 불가하다.
반응형
'development > Java' 카테고리의 다른 글
[Java] 추상 클래스 Abstract Class #2 / 내부 클래스 inner class, 로컬 내부 클래스 local inner class, 익명의 클래스 (0) | 2021.11.07 |
---|---|
[Java] 추상 클래스 Abstract Class #1 (0) | 2021.11.07 |
[Java] 접근 지정자 / public, protected, default, private (0) | 2021.11.03 |
[Java] 상속 Inheritance #3 / 매개변수를 갖는 부모 클래스의 생성자 (0) | 2021.11.03 |
[Java] 상속 Inheritance #2 / Override (0) | 2021.11.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 고득점 키트
- 백준
- jsp
- 프로그래머스
- jQuery
- 문자열
- 자바스크립트
- web
- 스프링
- Case When
- 단계별로풀어보기
- javascript
- append
- CSS
- 파이썬
- Django
- 덱
- baekjoon
- 큐
- bootstrap
- html
- python
- 브루트 포스
- 자바
- brute force
- R
- 정렬
- 장고
- Oracle
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함