본문 바로가기

JAVA/JAVA

자바 개념 - final 키워드 설명 및 예제

반응형

final 키워드


<순서>

1. 변수이름 앞에 사용

2. 메소드이름 앞에 사용

3. 클래스이름 앞에 사용



<변수이름 앞에 사용>

일반적으로 변수라고 하는 것은 프로그램 실행 중에 변수의 값이 변할 수 있다는 것을 말한다.

하지만 변수가 처음 정해진 값 이외에 다른 값을 가지면 안되는 경우가 있다면 변수 이름 앞에 final을 붙여서

상수처럼 사용 할 수 있다.

객체마다 메모리 잡을 필요가 없기때문에 static 붙여준다. 접근명시자 또한 public으로 해줌


형태 

1. 변수앞에 final 붙임

2. 변수명은 대문자를 써서 상수인 것을 표시함

3. 고정값이기 때문에 메모리를 객체마다 잡을 필요 없어서 static을 붙여준다.


형태 예

int age =20;

public final static String ADDR = "suwon";

예) 

int age = 20;

....

age = 50; //이처럼 프로그램 진행시 변할 수 있는데


final int MAX = 100; // 이처럼 지정하면 값이 밑에처럼 200으로 변할때 에러가 난다.

max = 200;


<메소드이름 앞에 사용>

재정의 금지 !!

상속과 연관이 있는 사상

상속된 자식클래스에서 overriding 할 수 없도록 하고 싶을때 사용 final 사용

우리가 만든 클래스는 묵시적으로 Object의 후손이 된다.

Object 클래스에 wait() 메소드에 final로 설정되었으므로 재정의 할 수 없다.

만약에 재정의 할 의도가 없었다면 다른 이름으로 메소드를 만들어야 한다.


형태 


형태 예

final public void pro(){

System.out.println("pro");

}

public void info(){

System.out.println("info");

}


안좋은 형태 예

public void wait(){

System.out.println("wait");

}



<클래스이름 앞에 사용>


상속 금지 !!

그 클래스 자체가 완전하여 더이상 확장을 금지 시키고자 한다면 클래스 이름 앞에 final을 붙여서 상속을 금지 시킬 수 있다.


형태

final class Human{

public void pro(){

System.out.println("pro");

}

}


class Student extends Human{

public void info(){

System.out.println("info");

}

}


class  FinalTest04{

public static void main(String[] args) {

Student s = new Student();

s.info();

s.pro();

}


위에 예제처럼 하면 에러메시지가 이렇게 뜬다.

FinalTest04.java:7: error: cannot inherit from final Human

class Student extends Human

반응형