본문 바로가기
study/JAVA

final 필드

by Elfen Lied 2022. 2. 14.
반응형

- final 필드란?

  • 객체마다 가지는 불변의 인스턴스 필드
  • 값을 변경할 수 없는 필드

 

- final 필드의 딱 한번의 초기값 지정 방법

1.필드 선언시 방법

public class Person {
	final String nation = "Korea";
}

처음에 "Korea"가 대입이 되면 final로 인해서 nation은 수정될 수 없게 된다.

즉, Korea 로만 사용해야 함.

 

 

2.생성자에 주는 방법

public class Person {
	final String ssn;
    	String name;

	public Person(String ssn, String name) {
    		this.ssn = ssn;
        	this.name = name;
    	}
}

초기값 없이 선언된 final 필드 생성자에서만 값을 줄 수 있다.

이 방식을 쓰는 이유는

ex) 사람이 태어나서 주민등록번호가 주어지는데 그 때 부여하고 다음에 변경 못하게 하기 위함.

 

name 은 final이 아니기 때문에 언제든 바꿀수 있다.

 

 


- 실습

1. 클래스를 생성한다.

public class Person {
	final String nation = "Korea";
	final String ssn;
	String name;
	
	public Person(String ssn, String name) {
		this.ssn = ssn;
		this.name = name;
	}
}

nation과 ssn은 final로 지정.

nation은 필드에서 값을 할당한다.

생성자를 만든다.

 

 

2. 실행 클래스를 만든다 (main 메서드)

public class PersonExample {
	public static void main(String[] args) {
		Person p1 = new Person("123456-1234567", "아무개");
		
		System.out.println(p1.nation);
		System.out.println(p1.ssn);
		System.out.println(p1.name);
		
		//p1.nation = "usa";
		//p1.ssn = "654321-7654321";
        
		p1.name = "무지개";
		System.out.println(p1.name);
	}
}

Person 객체를 생성하고,

ssn자리에 주민번호와 name 자리에 이름을 입력한다.

그리고 출력해보면 지정한 값이 나온다.

 

다음에 // 주석 처리된 코드를 보면

nation에 usa와 ssn에 다른 주민번호를 재할당 해본다.

그럼 컴파일 에러가 날것이다.

final로 인해서 값을 바꿀수 없기때문이다.

 

반면 name은 final이 아니기 때문에 "무지개"로 재할당 해보면 바뀐것을 확인할 수 있다.

최종적으로 name을 다시 출력해 보면 무지개로 바뀐것을 알 수있다.

반응형

'study > JAVA' 카테고리의 다른 글

어노테이션(Annotation)  (0) 2022.02.22
Getter와 Setter  (0) 2022.02.18
접근 제한자( Access Modifier)  (0) 2022.02.18
상수(static final)  (0) 2022.02.14
싱글톤(Singleton) 생성과 얻는법  (0) 2022.02.14

댓글