오늘 다룰 내용은 제어자
인데요. 사실 그동안 몇 번 다뤘습니다. final
이라던가 접근 제어자
등 몇 번 이야기했습니다. 오늘은 소개했던 것들은 다시 한 번 더 정리하고, 소개하지 않았던 제어자들은 소개하면서 정리해보려고 합니다.
제어자
는 클래스, 변수, 메소드의 선언부에 작성되어서 부가기능을 더하는 키워드들입니다. 크게 접근 제어자와 일반 제어자로 분류할 수 있습니다.
제어자
는 여러가지가 섞여서 사용될 수 있습니다. 단, 접근 제어자는 한 선언에 한 번만 올 수 있습니다. 여러 제어자를 섞을 때 순서가 정해지진 않았지만 일반적으로는 접근 제어자를 가장 먼저 작성합니다.
접근 제어자는 클래스 멤버, 클래스에 사용되어 접근 범위를 지정합니다.
자세한 내용은 포스트를 참조해주세요. 여기서는 간단하게 정리만 하고 넘어갑니다.
제어자에는 크게 세 종류, 정확하게는 네 종류가 있습니다.
접근 제어자가 작성되지 않은 상태는
default
로 간주하며, 접근 제어를default
로 사용하고자 할 때도 따로 쓰지 않습니다.
나머지 제어자로는 static, final, abstract, native, transient, sycronized, volatile, stricfp
가 있습니다.
static
은 정적(고정된)이라는 뜻을 가지고 있습니다. static
제어자는 클래스의 멤버 변수와 메소드에 사용될 수 있으며 이를 클래스 멤버 변수, 클래스 메소드
라고 부릅니다.
static
으로 선언하면 인스턴스의 생성 없이도 해당 멤버 변수와 메소드를 사용할 수 있습니다.
final
은 마지막이라는 뜻을 가지고 있습니다. final
제어자는 클래스, 변수(멤버 변수, 지역 변수), 메소드에 사용될 수 있으며 해당 키워드가 붙으면 첫 번째 초기화 이후 더 이상 값(내용)을 바꿀 수 없습니다.
abstract
는 추상적이라는 뜻을 가지고 있습니다. abstract
는 추상 클래스, 메소드
를 선언하는데 사용합니다.
추상 클래스
는 추상 메소드
를 가지고 있는 클래스임을 알리는데 사용되고, 추상 메소드
는 선언부만 작성한채로 구현은 하지않은 메소드를 의미합니다. 추상 메소드
는 상속 받은 자식 클래스에서 구현합니다.
추상 클래스와 메소드에 대한 내용은 조만간 등장할 내용입니다.
native
제어자는 다른 언어(보통 C/C++)로 작성된 구문을 자바에서 사용하려고할 때 사용하는 제어자입니다. JNI(Java Native Interface)
이라는 것을 이용해서 구현을 하는데, 현재는 자바가 많이 발전하여 자바로 구현하기 까다로운 구문이 없기에 잘 사용되지는 않습니다.
transient
는 직렬화(Serialize)
에서 제외하고 싶을 경우 사용하는 제어자입니다.
직렬화
는 자바의 객체나 데이터를 외부 자바 시스템에서 사용할 수 있도록 Byte 형태로 변환하는 것입니다.
synchronized
제어자는 프로세스(나 스레드)간의 동기화를 지원하여 한 프로세스가 작업중일 때 다른 프로세스가 간섭하지 못하게하여 충돌을 방지하는 제어자입니다.
volatile
제어자는 메모리에 데이터 읽기, 쓰기를 안전하게 하도록 보장하고 싶을 때 사용하는 제어자입니다.
strictfp
제어자는 호환을 위해 부동소수점수를 IEEE 754 표준에 맞게 처리하는 제어자입니다.