
제어자에는
접근 제어자와 기타 제어자가 있습니다.
What ?
기타 제어자
💡 클래스, 메서드 그리고 변수에 사용 가능한 기타 제어자가 정해져 있습니다.
How ?
기타 제어자
public class Example {
public static int test = 7;
private volatile boolean isTrue;
public synchronized void start() {
isTrue = true;
}
}
종류
static
💡 필드, 메서드, 초기화 블록, 중첩 클래스 선언부에 사용합니다.
💡 객체 단위의 변수가 아닌 클래스 공통의 속성을 제어하고 규정하기 위해 사용합니다.
💡 해당 클래스의 모든 객체가 값을 공유합니다.
💡 메모리에 한 번만 로드되며, 모든 객체가 공유합니다.
💡 객체가 아닌 클래스 이름으로 접근합니다.
💡 정의된 멤버는 클래스에 속하며, 객체를 생성하지 않고도 사용할 수 있습니다
인스턴스변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수는 인스턴스에 관계 없이 같은 값을 가진다.
💡 static 예시
public class Example {
static int count = 0; // 클래스 변수
static void displayCount() { // 클래스 메서드
System.out.println("Count: " + count);
}
}
Example.displayCount(); // 객체 없이 호출 가능
final
💡 클래스, 메소드, 필드, 지역 변수 선언부에 사용합니다.
💡 값이나 동작을 변경할 수 없게 만드는 제어자입니다.
💡 final 예시
public final class ImmutableClass {
// 클래스 선언은 상속이 불가
}
public class Parent {
public final void display() {
// 메서드 선언은 재정의 불가
}
}
public class Constants {
public static final double PI = 3.14159;
// 필드, 변수는 값 변경 불가(상수)
}
abstarct
💡 클래스, 메소드 선언부에 사용합니다.
💡 구체적이지 않고 설계만 정의되어 있습니다.
💡 구현은 서브클래스에서 이루어집니다.
💡 abstract 예시
/* 추상 클래스는 인스턴스화할 수 없고,
추상 메서드를 포함하거나 상속으로 사용 */
public abstract class Animal {
// 추상 메서드
public abstract void makeSound();
}
// 추상 메서드는 서브클래스에서 구현
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
synchronized
💡 메서드, 코드 블록 선언부에 사용합니다.
💡 동시에 하나의 스레드만 접근 가능해 동기화와 일관성을 보장합니다.
💡 성능에 영향을 줄 수 있으므로 필요할 때만 사용합니다.
💡 synchronized 예시
public class Counter {
private int count = 0;
// 동기화 메서드
public synchronized void increment() {
count++;
}
}
transient
💡 필드(변수) 선언부에 사용합니다.
💡 직렬화시 민감한 정보나 불필요한 데이터를 제외할 때 사용합니다.
💡 필드는 객체가 직렬화될 때 저장되지 않습니다.
💡 네트워크 전송 또는 파일 저장 시 데이터를 보호할 수 있습니다.
💡 synchronized 예시
import java.io.Serializable;
public class User implements Serializable {
private String username;
private transient String password; // 직렬화 제외
// 생성자와 기타 메서드
}
적용 대상
| 종류 | 적용 대상 |
| static | 필드, 메서드, 중첩 클래스 |
| abstract | 클래스, 메서드 |
| final | 클래스, 메서드, 변수 |
| synchronized | 메서드, 코드 블록 |
| native | 메서드, |
| strictfp | 클래스, 메서드 |
| volatile | 필드 |
| transient | 필드 |
Why ?
접근 제어자
💡 이를 통해 핵심 비즈니스 로직이나 창의적인 부분에 집중해 개발할 수 있습니다.