자바(Java) 클래스와 함수의 재정의를 방비하는 final 키워드에 대해 알아보자 |
환경: Eclipse Mars, JDK 1.7 |
final 키워드는 주로 클래스나 함수의 재정의를 막기 위해서 사용됩니다. 또는 로컬변수와 함수에 사용해서 값을 변경하지 못하도록 합니다. final 이 의미하는 단어의 뜻처럼 더 이상 변경하면 안 된다는 것을 명시하는 것입니다. 그래서 상수로 사용할 변수 앞에 final 을 붙이는 것입니다. 프로그래머의 실수를 줄이기 위해 프로그램하는 과정에서 값을 변경하지 못하도록 방지하는 것이죠.
¤ final 클래스에 사용 |
▼ 먼저 final 을 사용하는 3가지 경우 중 클래스 앞에 붙일 경우 하위 클래스에서 상속을 받지 못합니다. extends 를 이용해서 상속을 하게 되면 아래 그림처럼 Derived cannot 라고 에러가 납니다.
final class Base {
public void m1() {}
}
public class Derived extends Base {
public void m1() {}
}
¤ final 함수에 사용 |
▼ 다음은 함수에 사용하는 경우입니다. 클래스에 final 을 사용하지 않았기 때문에 상속은 가능하지만 함수를 재정의 할 수 없습니다. 상위 클래스에 있는 m2 함수와 m4 함수를 재정의(Overriding) 못하는 것이죠. 재정의를 하게 되면 Cannot override 라고 에러가 납니다.
class Base {
public void m1() {}
public final void m2() {}
public static void m3() {}
public static final void m4() {}
}
public class Derived extends Base {
public void m1() {}
public void m2() {}
public static void m3() {}
public static void m4() {}
}
¤ 변수(variable)에 사용 final 사용 |
▼ 마지막으로 변수에 사용하는 경우입니다. 위에서도 이야기 했듯이 주로 상수 정의할 때 많이 이용합니다. 초기에 세팅 한 값이 로직이 진행되는 동안 실수로라도 변경되면 안 되는 경우에 적용합니다. 만약 재정의 하려고 하면 cannot be assigned 라고 에러가 나게 됩니다.
class Position {
public final int x = 1;
public int y = 2;
public int z = 3;
}
public class Derived {
Position p = new Position();
public void change(){
p.x = 10;
p.y = 10;
p.z = 10;
}
}
¤ final 변수를 사용할 수 있는 경우 |
▼ 이번에는 final 을 사용할 수 있는 경우 입니다. 이것은 특별한 경우인데 클래스 객체를 생성할 때 값을 동적으로 세팅하는 것은 가능합니다. final 변수에 값이 비어 있어야겠죠. 이것은 변경되지 말아야 할 회원정보 같은 데이터를 다룰 때 많이 이용합니다. 생성자에서 값을 세팅해 두면 다음 부터 변경할 수 없는 것이죠.
class Position {
public final int x;
public final int y;
public final int z;
Position(int x1, int y1, int z1){
x = x1;
y = y1;
z = z1;
}
}
public class Derived {
public static void main(String[] args) {
Position p = new Position(1, 2, 3);
System.out.println(p.x);
}
}
'자바(JAVA)' 카테고리의 다른 글
자바(Java) AWT – Label 오브젝트 사용법과 예제 (0) | 2022.12.28 |
---|---|
자바 Java 윈도우 위치 찾기 명령어 (1) | 2022.12.25 |
자바(Java) 문자열 구분을 위한 Split 함수 사용하는 방법 (0) | 2022.10.24 |
자바(Java) 데이터 형변환 char -> String 여러가지 방법 (5) | 2022.07.22 |
자바(Java) 자료구조 클래스 LinkedList 구현하는 방법 (0) | 2020.06.27 |
자바(Java) AWT – Button 컨트롤 사용법과 예제 (1) | 2020.06.04 |
자바(Java) AWT – CheckboxGroup 이용해서 옵션기능구현 (0) | 2020.05.24 |
JSP Servlet 구현하기, POST 로 값 전송하기 (0) | 2019.11.16 |