Modifier

자바의 Modifier

static 예약어

인스턴스 변수와 클래스 변수

사진

  • 인스턴스 변수

    • 클래스로부터 객체가 생성될 때마다 각 객체의 변수들이 생성됨
    • 한 객체의 값이 변경되어도 다른 객체의 값에 영향을 미치지 않음
    • 객체별로 다른 변수값을 지정해야 할 때 사용
  • 클래스 변수

    • 클래스로 생성된 모든 객체가 하나의 클래스 변수를 공유함
    • 객체가 생성될 때 메모리 영역을 할당하지 않고, 클래스가 로딩되는 최초에 메모리에 한 번만 할당됨
    • static 예약어를 사용한 변수가 클래스 변수에 해당됨
    • 객체를 생성하지 않고도 클래스 이름을 통해 클래스 변수에 접근 가능

클래스 메서드

  • static 예약어를 사용한 메서드
  • 객체를 생성하지 않고도 호출이 가능함
  • 다만, 인스턴스 변수의 경우 인스턴스를 생성해야 메모리가 잡히기 때문에 클래스 메서드에서 인스턴스 변수를 사용할 수 없음
  • 또한, 클래스 메서드에서는 클래스 메서드만 호출이 가능함. static 예약어가 붙지 않은 일반 메서드는 호출이 불가능함

final 예약어

최초 초기화 이후 값을 변경할 수 없는 상수로 만듦

변수와 final

static 예약어와 final 예약어를 결합하여 사용함으로써, 클래스 변수의 값을 변경할 수 없도록 함

  • 상수의 이름은 일반 인스턴스 변수와 구분하기 위해 대문자로 선언, 단어와 단어 사이는 _로 연결
  • static과 final

    • static final int cnt = 100;

      • 클래스 내부의 모든 부분에 영향을 주고 싶은 상수일 경우
    • final int cnt = 100;

      • 객체마다 다른 상수값을 주고 싶은 경우
      • 생성자에서 초기화해야함

메서드와 final

메서드에 final 예약어를 붙일 경우 메서드 재정의(Overriding)을 금지할 수 있음

클래스와 final

클래스 선언 시 final 예약어를 붙일 경우 상속을 금지할 수 있음

abstract 예약어

추상 메서드

메서드 시그니처(리턴 타입, 메서드명, 매개변수)만 정의하고 블록({}) 부분은 정의되지 않은 메서드

추상 클래스

추상 메서드를 포함하고 있는 클래스의 경우 추상 클래스로 선언되어야 함

추상 클래스와 상속

추상 메서드를 가진 추상 부모 클래스를 상속받는 자식 클래스의 경우, 자식 클래스 내부에서 추상 메서드를 재정의 해야함

Java
// 부모 추상 클래스
abstract class SuperClass {
    public void methodA() {
        System.out.println("methodA() 실행");
    }
    public abstract void methodB(); // 추상 메서드
}

// 자식 클래스
class Subclass extends SuperClass {
    public void methodB() { // 자식 클래스가 추상 메서드를 재정의
        System.out.println("methodB() 실행");
    }
}

클래스와 Modifier

클래스 정의 접근 제한 Modifier

Modifier 설명
public 어디서든 인스턴스 생성이 가능
(default) 동일 패키지에 속한 클래스 내에서만 인스턴스 생성 가능

멤버 변수 Modifier

구분 Modifier 설명
접근 권한 public 모든 클래스에서 접근 가능
protected 동일 패키지에 속한 클래스와 하위 클래스에서만 접근 가능
(default) 동일 패키지에 속한 클래스에서만 접근 가능
private 변수가 선언된 클래스 내에서만 접근 가능
활용 방법 final 변수를 상수로 이용하는 경우
static 클래스에 소속된 클래스 변수

멤버 메서드 Modifier

구분 Modifier 설명
접근 권한 public 모든 클래스에서 접근 가능
protected 동일 패키지에 속한 클래스와 하위 클래스에서 접근 가능
(default) 동일 패키지에 속한 클래스에서만 접근 가능
private 클래스 내에서만 접근 가능
활용 방법 final Overriding이 불가능한 메서드 정의
static 클래스에 소속된 클래스 메서드, 클래스 생성시 만들어짐
abstract 하위 클래스에 의해 구현되는 추상 메서드
synchronized Thread 동기화를 위한 메서드

접근 제한자(Access Modifier)

접근 관련 modifier를 통해 정보 은닉을 구현할 수 있음.

종류 동일 클래스 동일 패키지 하위 클래스 모든 클래스
public O O O O
protected O O O X
(default) O O X X
private O X X X

정보 은닉을 고려한 메서드 구현

  • 멤버 변수들은 대부분 private로 선언하여 외부에서는 숨겨진 형태로 만듦
  • public으로 지정한 메서드를 통해 접근하도록 클래스를 구현
  • ex)

    • private 변수에 저장된 값을 리턴하는 Getter 메서드
    • private 변수에 값을 저장하는 Setter 메서드
Java
public class Employee {
    private String name;
    private int age;
    private String dept;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }
}