"파이널"의 두 판 사이의 차이
(→특징) |
(→이용 방법) |
||
6번째 줄: | 6번째 줄: | ||
===이용 방법=== | ===이용 방법=== | ||
====클래스==== | ====클래스==== | ||
− | [[클래스]](class)에서 파이널(final)을 사용하게되면 그 클래스는 최종상태가 되어 더이상 상속이 불가능하다. <ref name="코딩팩토리">〈[https://coding-factory.tistory.com/525 자바 final의 의미와 사용법]〉, 《개인사이트》, 2020-04-23 </ref> 즉, 선언된 클래스 그대로 사용해야한다. 상속이 불가능하기 때문에 서브클래스도(subclass)도 생성할 수 없다. <ref name="Oh! My Library">〈[https://library1008.tistory.com/1 Java final 키워드]〉, 《개인블로그》, 2015-02-14</ref> 주로 상수 클래스나 Util형식의 클래스를 final로 선언해서 사용한다. <ref name="Frank's blog">〈[https://blog.advenoh.pe.kr/java/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-final%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4/ 자바에서 final에 대한 이해]〉, 《개인블로그》, 2018-09-11</ref> | + | [[클래스]](class)에서 파이널(final)을 사용하게되면 그 클래스는 최종상태가 되어 더이상 상속이 불가능하다. <ref name="코딩팩토리">〈[https://coding-factory.tistory.com/525 자바 final의 의미와 사용법]〉, 《개인사이트》, 2020-04-23 </ref> 즉, 선언된 클래스 그대로 사용해야한다. 상속이 불가능하기 때문에 서브클래스도(subclass)도 생성할 수 없다. <ref name="Oh! My Library">〈[https://library1008.tistory.com/1 Java final 키워드]〉, 《개인블로그》, 2015-02-14</ref> 주로 상수 클래스나 Util형식의 클래스를 final로 선언해서 사용한다. <ref name="Frank's blog">〈[https://blog.advenoh.pe.kr/java/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-final%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4/ 자바에서 final에 대한 이해]〉, 《개인블로그》, 2018-09-11</ref> 이 방법은 보안이나 효율성 측면에서 장점이 있다. <ref name="도더니">〈[https://makemethink.tistory.com/184 final그게뭔데, 어떻게 쓰는건데]〉, 《개인사이트》, 2019-12-13 </ref> |
;예제 | ;예제 | ||
37번째 줄: | 37번째 줄: | ||
====변수==== | ====변수==== | ||
− | 변수 | + | * 원시 타입 |
+ | 로컬 원시 변수에 파이널(final)로 선언하면 한번 초기화된 변수는 변경할 수 없는 상수값이 된다. <ref name="Frank's blog"></ref> | ||
+ | |||
+ | ;예제 | ||
+ | public void Test() { | ||
+ | // final로 선언되어 변경 불가능 | ||
+ | final int x = 5; | ||
+ | } | ||
+ | |||
+ | * 객체 타입 | ||
+ | 객체 변수에 파이널(final)로 선언하면 해당 변수에 다른 참조값을 지정할 수 없다. 또한 원시 타입과 동일하게 한번 초기화된 변수는 값을 변경할 수 없다. 단, 객체 자체가 변경이 불가능하다는 의미는 아니다. 객체의 속성은 변경이 가능하다. <ref name="Frank's blog"></ref> | ||
+ | |||
+ | ;예제 | ||
+ | public void Test() { | ||
+ | // final로 선언된 객체 | ||
+ | final Coding coding = new Coding(); | ||
+ | // final로 선언되어 다른 객체로 변경 불가능 | ||
+ | coding = new Coding(); | ||
+ | // 객체 필드는 변경 가능 | ||
+ | coding.setWeight(5); | ||
+ | } | ||
+ | |||
+ | * 메서드 인자 | ||
+ | |||
+ | * 맴버 변수 | ||
2020년 8월 18일 (화) 12:28 판
파이널(final)이란 객체 지향 프로그래밍(OOP)에서 더이상 확장하거나 변경할 수 없는 마지막 단계의 클래스나 메소드 또는 변수에 사용하는 제어자이다. '파이널'이라고 읽는다.
개요
특징
이용 방법
클래스
클래스(class)에서 파이널(final)을 사용하게되면 그 클래스는 최종상태가 되어 더이상 상속이 불가능하다. [1] 즉, 선언된 클래스 그대로 사용해야한다. 상속이 불가능하기 때문에 서브클래스도(subclass)도 생성할 수 없다. [2] 주로 상수 클래스나 Util형식의 클래스를 final로 선언해서 사용한다. [3] 이 방법은 보안이나 효율성 측면에서 장점이 있다. [4]
- 예제
// 클래스를 final로 선언 final class Coding { String coding_language = "JAVA"; } // 상속 불가능 class test_Coding extends Coding{ }
메소드
메소드(method)에서 파이널(final)을 사용하게 되면 상속받은 클래스에서 오버라이딩(overriding)이 불가능하다. [2] 즉, 상속받은 클래스에서 부모의 final 메서드를 재정의할 수 없다. 자신이 생성한 메서드를 변경할 수 없게끔 하고싶을때 사용하며 시스템의 코어부분에서 많이 구현되고 있다. [1]
- 예제
// 메소드를 final로 선언 class Coding { String coding_language = "JAVA"; public final void print() { System.out.println( coding_language + "는 프로그래밍 언어이다."); } } // final로 선언된 메소드 사용 class test_Coding extends Coding{ String coding_language = "C"; // 오버라이딩 불가능 public void print() { } }
변수
- 원시 타입
로컬 원시 변수에 파이널(final)로 선언하면 한번 초기화된 변수는 변경할 수 없는 상수값이 된다. [3]
- 예제
public void Test() { // final로 선언되어 변경 불가능 final int x = 5; }
- 객체 타입
객체 변수에 파이널(final)로 선언하면 해당 변수에 다른 참조값을 지정할 수 없다. 또한 원시 타입과 동일하게 한번 초기화된 변수는 값을 변경할 수 없다. 단, 객체 자체가 변경이 불가능하다는 의미는 아니다. 객체의 속성은 변경이 가능하다. [3]
- 예제
public void Test() { // final로 선언된 객체 final Coding coding = new Coding(); // final로 선언되어 다른 객체로 변경 불가능 coding = new Coding(); // 객체 필드는 변경 가능 coding.setWeight(5); }
- 메서드 인자
- 맴버 변수
각주
- ↑ 1.0 1.1 〈자바 final의 의미와 사용법〉, 《개인사이트》, 2020-04-23
- ↑ 2.0 2.1 〈Java final 키워드〉, 《개인블로그》, 2015-02-14
- ↑ 3.0 3.1 3.2 〈자바에서 final에 대한 이해〉, 《개인블로그》, 2018-09-11
- ↑ 〈final그게뭔데, 어떻게 쓰는건데〉, 《개인사이트》, 2019-12-13
참고자료
- 코딩팩토리, 〈자바 final의 의미와 사용법〉, 2020-04-23
- Frank's blog, 〈자바에서 final에 대한 이해〉, 2018-09-11
같이 보기