Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)의 비접근 수정자 7가지 종류와 특징 완벽 정리

자바는 접근 범위(가시성) 제어 외에도 다양한 기능을 제공하기 위해 여러 가지 수정자를 지원합니다. 이러한 수정자들을 비접근 수정자(Non-Access Modifier)라고 부르며, 총 7가지가 있습니다. 각각의 특징과 용도를 살펴보겠습니다.

1. static

static으로 선언된 멤버는 클래스의 모든 인스턴스가 공유하는 멤버입니다. static 멤버는 클래스 수준의 멤버로 분류되며, 객체마다 별도로 생성되지 않고 클래스 메모리 영역에 단 하나만 저장됩니다.

2. final

final은 변수, 메서드 또는 클래스에 대한 추가적인 변경을 제한하는 데 사용됩니다.

  • final로 선언된 변수는 한 번 값이 할당되면 더 이상 수정할 수 없습니다.
  • final 메서드는 하위 클래스에서 재정의(오버라이드)할 수 없습니다.
  • final 클래스는 상속이 불가능하여 하위 클래스를 생성할 수 없습니다.

3. abstract

abstract는 클래스 또는 메서드에만 사용할 수 있는 수정자로, 변수나 생성자에는 적용할 수 없습니다. abstract로 선언된 추상 메서드는 반드시 하위 클래스에서 구현(구체화)해야 하며, abstract로 선언된 추상 클래스는 직접 인스턴스화할 수 없습니다.

4. synchronized

synchronized는 여러 스레드가 특정 메서드나 코드 블록에 동시에 접근하는 것을 제어하는 데 사용됩니다. synchronized로 선언된 메서드나 블록에는 한 번에 오직 하나의 스레드만 진입할 수 있어, 멀티스레드 환경에서 데이터 일관성을 유지하는 데 도움이 됩니다.

5. transient

transient는 직렬화(Serialization) 과정에서 사용됩니다. transient로 선언된 변수는 객체를 직렬화할 때 직렬화 대상에서 제외되며, 따라서 저장되거나 전송되지 않습니다.

6. volatile

volatile은 멀티스레드 프로그래밍에서 사용됩니다. 필드를 volatile로 선언하면 해당 값을 각 스레드 자신의 스택이 아닌 메인 메모리에서 직접 읽어야 한다는 신호가 됩니다. volatile 필드는 모든 스레드가 공유하고 여러 스레드에 의해 자주 갱신되므로, 항상 최신 값을 읽도록 보장하는 역할을 합니다.

7. strictfp

strictfp는 부동소수점 연산과 관련된 수정자입니다. 이 키워드를 사용하면 어떤 플랫폼에서 실행하더라도 동일한 부동소수점 연산 결과를 얻을 수 있습니다. 즉, 운영체제나 하드웨어가 달라도 일관된 계산 결과를 보장하여 플랫폼 간 호환성을 높여줍니다.

이처럼 자바의 비접근 수정자는 접근 권한이 아닌 동작 방식과 특성을 제어하는 중요한 역할을 합니다. 상황에 맞게 적절히 활용하면 더 안전하고 효율적인 코드를 작성할 수 있습니다.