[Java] final

2024. 7. 9. 17:52· Java
목차
  1. 1. final
  2. 1-1. final 변수
  3. 1-2. 상수
  4. 1-3. final 변수와 참조

1. final

  • final 키워드가 붙으면 더 이상 변경 불가능 함!
  • 클래스, 메서드 포함 여러곳에 사용 가능

 

1-1. final 변수

1-1-1. final 지역 변수 (매개변수)

public static void main(String[] args) {
	
	// final 지역 변수
	final int data1;
	data1 = 10;
	
	~~data1 = 20;~~ // final 변수 값을 변경하면 컴파일 오류 발생!
	
	// final 지역 변수
	final int data2 = 10;
	
	~~data2 = 20;~~ // final 변수 값을 변경하면 컴파일 오류 발생!	
}

                   // final 매개 변수
static void method(final int parameter) {

	~~parameter = 20;~~ // final 변수 값을 컴파일 변경하면 오류 발생!
}
  • data1
    • 선언 이후 초기화, 최초 1회만 값 설정 가능
  • data2
    • 선언과 동시에 초기화
  • parameter
    • 메서드 호출 시점에 대입된 값이 메서드 종료 까지 계속 유지됨

 

1-1-2. final 멤버 변수 (필드)

  • 초기화 방법 1 - 생성자 통해 초기화
public class Test {
	final int value;
	
	// 생성자로 한번만 초기화 가능	
	public Test(int value) {
		this.value = value;
	}
}

public class Main {
	public static void main(String[] args) {
		
		// 생성자로 final 멤버 변수 초기화		
		Test test1 = new Test(10);
	}
}
  • 초기화 방법 2 - 필드에서 초기화
public class Test {
	// static 변수에도 final 선언가능
	static final int CONST_VALUE = 10;
	// 필드 초기화
	final int value = 10;
}
📌 final

모든 인스턴스에 대해 같은 (여기서는 10) 필드 값을 가짐
힙 영역에 모든 객체마다 value 저장하므로 메모리 낭비
또한 같은 값 계속 생성 ⇒ (개발자 입장) 중복 ⇒ static (final) 사용!
📌 static final ⇒ “바뀌지 않는 공용 변수 선언”

static final 로 선언 ⇒ static 영역에 존재 + final (값 변화 x)
static 영역 : 딱 1개만 존재하는 영역 ⇒ 메모리 낭비 해결!

 

1-2. 상수

  • 변하지 않고 일정한 수
  • 장점
    • 중앙 관리 가능 ⇒ 코드 1개 (상수 값) 만 수정하면 모두 반영됨
    • 매직 넘버 문제 해결 가능 ⇒ 매직 넘버(: 어떤 문맥으로 사용되었는지 모르는 수)
  • static final 키워드
  • 대문자 사용, 구분은 _ (언더스코어) → (관례)
static final int FULL_SCORE = 100;
static final int ZERO_SCORE = 0;
  • 필드 직접 접근
    • 상수는 고정된 값 자체를 사용
    • 직접 접근해도 값 변경 불가능 ⇒ 캡슐화가 깨지지 않음
    public class Constant {
    	
    	static final double PI_VALUE = 3.14;
    	
    }
    
    public class Main {
    	public static void main(String[] args) {
    		// 필드 직접 접근
    		System.out.println("파이 값 = " + Constant.PI_VALUE);
    	}
    }
    	
    

 

1-3. final 변수와 참조

  • final - 기본형 변수 : 값 변경 x
  • final - 참조형 변수 : 마찬가지로 참조 값 변경 x ( = “참조하는 대상 변경 x”)
public class Data {
	int value;
}

public class Main {
	public static void main(String[] args) {
		
		// data : final 참조변수
		final Data data = new Data();
		
		~~data = new Data();~~    // final 참조변수이므로 새 참조값 할당 불가! => 에러
		
		// 참조 대상의 값은 변경 가능!
		data.value = 10;      // 참조 대상을 변경하는 것 x => 대상 내부의 필드 값 변경 가능!
	}
}

저작자표시 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[Java] 입출력(I/O), 스트림, 버퍼  (5) 2024.07.28
[Java] 자바 메모리 구조  (0) 2024.07.09
[Java] static  (0) 2024.07.09
[Java] 객체 지향 프로그래밍 - 추상화 (Abstraction)  (0) 2024.07.09
[Java] 객체 지향 프로그래밍 - 다형성 (Polymorphism)  (0) 2024.07.09
  1. 1. final
  2. 1-1. final 변수
  3. 1-2. 상수
  4. 1-3. final 변수와 참조
'Java' 카테고리의 다른 글
  • [Java] 입출력(I/O), 스트림, 버퍼
  • [Java] 자바 메모리 구조
  • [Java] static
  • [Java] 객체 지향 프로그래밍 - 추상화 (Abstraction)
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[Java] final
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.