보기보기 개발 블로그

eclipse / 자바 Final 본문

Java

eclipse / 자바 Final

bokboks 2023. 3. 23. 06:22

안녕하세요 

저번 포스팅에서 자바 Static 에 이어

이번엔 자바Final 에 대하여 알아보겠습니다.

 

 

eclipse / 자바 Static

안녕하세요 지난 포스팅에서 자바ArrayList에 이어 이번에는 자바 Static에 대하여 알아보겠습니다. eclipse / 자바 ArrayList를 통한 배열 처리 안녕하세요 지난 포스팅에서 자바 객체형 배열 처리에 이

stackbok.tistory.com


package javaexp.a07_multiObj;

public class A04_Final {
	public static void main(String[] args) {

		/*
		 # final 필드
		 1. 최종적인 값을 갖고 있는 필드 = 값을 변경할 수 없는 필드
		 
		 2. final 필드는 딱 한번의 초기값 지정 방법이다.
		 	1)필드 선언시 처리할 수 있고
		 	2) 생성자로 초기값을 지정할 수 있다.
		 	
		 3.객체 단위로 초기값을 설정하고 변경되지 못하게 할 때 , 주로 사용된다.
		 	단, 클래스 안에서 초기값을 설정하면 객체 단위로도 변경이 불가능하다.
		 	cf)
		 	final : 객체별로 데이터를 초기화하고 변경하지 못하게 처리.
		 	static final : 클래스 단위로 초기화하고 변경하지 못하게하여,
		 		객체의 공유데이터 중에 변경이 불가능하게 처리..
		 		이렇게 설정된 데이터는 상수라 개념으로 사용되고, 
		 		대문자라고 선언하면, 구분자는 _(언더바)로 처리한다.
		 */
		Person p01 = new Person("951212-1802715", "홍길동");
		System.out.println(p01.nation);
		System.out.println(p01.ssn);
		System.out.println(p01.name);
//		p01.nation="일본"; final 키워드이기에 변경이 불가능 클래서 선언과 동시에 했기에
//			다른 객체로 생성을 하더라도 변경이 불가능
//		p01.ssn ="951212-1802715"; 에러발생..final 객체 단위로 한번 설정이 되면 변경이 불가능
//		p01.name="마길동"; 일반객체이기에 변경가능
		Person p02 = new Person("123123-1802715", "오길동");
		System.out.println(p02.nation); //클래스 안에서 선언했기에 변경이 불가능
		System.out.println(p02.ssn);	//다른 객체를 통해서는 변경이가능 , 하지만 변경은 불가능
		System.out.println(p02.name); //다른객체로 사용하면 가능!
		
		//ex)
		Player1 pr1 = new Player1("김광형", "SSG", 0.47);
		Player1 pr2 = new Player1("반즈", "롯데", 1.40);
		Player1 pr3 = new Player1("박세웅", "롯세", 1.47);
		pr1.score = 0.51;
		pr1.team = "KIA";
//		pr1.name = "오길동"; final로 된 변수는 객체단위로 한번 설정이 되면 변경이 불가능하다.
		pr1.showInfo();
		pr2.showInfo();
		pr3.showInfo();
		/*
		 # 상수(static final)
		 1. 상수 = static final 필드
		 	final 필드 : 객체마다 가지는 불변의 인스턴스 필드
		 	static final : 객체마다 가지고 있지 않고 클래스 단위로 설정
		 		메소드 영역에 클래스 별로 관리되는 불변의 정적 필드
		 		공용 데이터로서 사용
		 2. 상수 이름을 전부 대문자로 작성을 일반적으로 한다.(네이밍 규칙)
		 ex) static final double PI = 3.14;
		 
		 3. 다른 단어가 결합되면_로 연결
		 ex) static final CUR_NATION = "한국";
		 
		 cf)
		 final class 클래스명{} : 상속하지 못하는 클래스 지정.
		 	ex)class 하위클래스 extends final클래스명{} (X)
		 final void call(){}: 하위에 재정의 하지 못하는 메서드 지정.
		 ==> 하위 클래스에서는 위 메서드를 재정의하지 못한다.
		 모든객체 마다
		 */
		System.out.println("분야:"+Player1.KIND);
//		Player1.KIND="축구선수";
	}
}
class Player1{
	static final String KIND="야구선수";
	final String name;
	String team;
	double score;
	Player1(String name,String team,double score){
		this.name = name;
		this.team = team;
		this.score = score;
	}
	void showInfo() {
		System.out.println("#선수의 정보#");
		System.out.println("이름 :"+name);
		System.out.println("소속팀 :"+team);
		System.out.println("성적 :"+score);
		
	}
}
class Person{
	//초기값 설정 클래스 내에서 바로 선언
	final String nation="한국";
	final String ssn; // 생성자에 의해 초기값 설정
	String name;
	Person(String ssn,String name){
		this.ssn = ssn;
		this.name = name;
	}
}

 

이상으로 자바 Final 에 대하여 알아봤습니다

감사합니다.