T.I.L #15 final

개발자지망생·2023년 10월 25일
0

final이란?

final은 여러 다양한 컨텍스트에서 사용되는 키워드로, 변수, 메소드, 클래스 및 인스터스 변수에 적용할 수 있다. final은 코드의 안정성과 무결성을 유지하고, 읽기 전용 객체를 생성하는 데 유용하며, 오버라이딩을 방지하여 원치 않는 동작을 방지하는 데 사용된다.

1. final 변수

final 변수는 한 번 초기화되면 값이 변경되지 않는 상수로 간주된다. 이러한 변수는 주로 상수 값이나 설정 값을 저장하는 데 사용된다. final 변수는 선언과 동시에 초기화해야 한다.

final int 상수값 = 10; // final 변수

2. final 메소드

final 메소드는 하위 클래스에서 오버라이딩(재정의)할 수 없다. 이것은 메소드의 동작이 변경되지 않도록 보장하거나, 보안 및 무결성을 유지하기 위해 사용된다.

class 부모 {
    final void 메소드() {
        // 이 메소드는 하위 클래스에서 오버라이딩 불가
    }
}

3. final 클래스

final 클래스는 다른 클래스가 상속할 수 없는 클래스를 정의한다. String 클래스와 같은 몇몇 자바 표준 라이브러리 클래스는 final로 정의되어 있으며, 하위 클래스를 만들 수 없다.

final class 마지막클래스 {
    // 이 클래스는 상속할 수 없음
}

4. final 인스턴스 변수

final 키워드를 인스턴스 변수에 적용하면 해당 변수는 객체가 한 번 초기화되면 변경할 수 없다. 이는 불변 객체를 생성하거나 변경을 하지하는 데 사용된다.

class 불변클래스 {
    final int 불변변수;

    불변클래스(int 값) {
        this.불변변수 = 값;
    }
}
  1. final 매개변수

메소드의 매개변수에 final 키워드를 사용하면 해당 매개변수를 메소드 내에서 변경할 수 없다. 이는 메소드에서 매개벼수 값을 보호하거나 불변성을 유지하는 데 사용된다.

void 메소드(final int 매개변수) {
    // 매개변수 값을 변경할 수 없음
}

final 추가 설명

1. final 메소드와 클래스의 안정성

final 키워드는 메소드와 클래스를 종단점으로 만들어 준다. final 메소드는 오버라이딩을 방지하므로 하위 클래스에서 메소드를 변경할 수 없으며, 이것은 클래스의 특정 동작을 보장하고 무결성을 유지하는 데 도움이 된다. 마찬가지로, final 클래스는 상속을 막아 클래스의 구현을 변경하지 못하게 한다. 이것은 보안 및 불변성을 유지하는 데 중요하다.

final class 불변클래스 {
    final void 메소드() {
        // 하위 클래스에서 변경 불가
    }
}

2. final 변수와 스레드 안전성

final 변수는 불변 변수로 간주된다. 이것은 다중 스레드 환경에서 스레드 안전성을 보장하는 데 사용된다. 다른 스레드에 의한 변수의 동시 수정을 막고, 공유 데이터의 일관성을 유지한다.

final int 상수값 = 10; // 스레드 안전한 불변 변수

3. final 메소드와 실행 속도 최적화

컴파일러는 final 메소드 호출을 인라인화하여 메소드 호출 오버헤드를 줄일 수 있다. 이것은 코드 실행 속도를 최적화하는 데 도움이 된다.

4. final 클래스와 보안

final 클래스를 사용하면 더 이상 상속을 받을 수 없으므로, 특정 동작이나 속성을 제어하고, 클래스의 구현을 보호하는 데 도움이 된다. 이는 보안적인 측면에서 중요한 역할을 한다.

final은 어디에 쓰일까?

1. 보안 관련 클래스와 메소드

보안이 중요한 애플리케이션에서 final 클래스와 메소드는 중요한 보안 구현을 포함할 수 있다. 이러한 클래스와 메소드는 하위 클래스에서 변경되지 않도록 보호되며, 애플리케이션의 안전성을 유지한다.

2. 불변(Immutable) 클래스

final 키워드를 클래스 또는 클래스의 필드에 적용하여 불변 객체를 생성한다. 이러한 불변 클래스는 객체의 상태가 변경되지 않음을 보장하며, 다중스레드 환경에서 안전하게 공유된다.

3. 상수 및 열거형(Enum) 상수

final 키워드는 상수 값을 나타내는데주로 사용된다. 클래스 내에서정의된 상수 필드는 대문자로 작성되며 final로 선언하여 값을 변경할 수 없게 한다.

4. 메소드오버라이딩 방지

부모 클래스에서 final로 선언된 메소드는 하위 클래스에서 오버라이딩할 수 없다. 이는 부모클래스가 특정 동작을 보장하고 하위 클래스에서 변경되지 않도록 하는 데 사용된다.

5. 싱글톤(Singleton) 패턴

싱글톤 디자인 패턴을 구현할 때 final 키워드를 사용하여 하나의 인스턴스만 생성되도록 보장한다.

6. 메소드 파라미터와 로컬 변수

메소드 내의 파라미터와 로컬 변수를 final로 선언하면 해당 변수가 재할당되지 않음을 보장하고, 메소드 내에서 변경할 수 없도록 한다.

7. 데이터베이스 연동

데이터베이스 연동 코드에서 fianl을 사용하여 데이터베이스 연결, 질의문 등을 수정하지 못하도록 보호할 수 있다.

8. 콜백(Callback) 및 이벤트 처리

콜백 메소드 또는 이벤트 핸들러 메소드를 fianl로 선언하여 하위 클래스에서 변경하지 못하도록 보호한다.

참고한 것 : 자바의 정석 , 구글 서칭

0개의 댓글