📝 끄적끄적/🖥️ 자바의 정석

[자바의 정석] 제어자, 캡슐화

현주먹 2023. 9. 24. 22:35

제어자(modifier)

영어로 따지면 형용사다.

클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여

 

접근 제어자

  • public, protected, (default), private
    • default는 아무것도 아님.

그 외

  • static, fina, abstract, synchronized, volatile, strictfp ….

하나의 대상에 여러 제어자를 같이 사용 가능하다.(접근 제어자는 하나만)

public class ModifierTest {
	public static final int WIDTH = 200;
}

 

static - 클래스의, 공통적인

 

final - 마지막의, 변경될 수 없는

final class FinalTest { //조상이 될 수 없는 클래스
	final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수(상수)

	final void getMaxSize() { //오버라이딩할 수 없는 메서드(변경불가)
		final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수(상수)
		return MAX_SIZE;
	}
}

 

abstract - 추상의, 미완성의

추상화에서 배울 것이다.

abstract class AbstractTest { //추상 클래스(추상 메서드를 포함한 클래스)
	abstract void move(); //추상 메서드(구현부가 없는 메서드)
}

AbstractTest a = new AbstractTest(); //에러. 추상 클래스의 인스턴스 생성불가

추상 클래스는 미완성 설계도다.

즉 이걸로 객체를 만들 수 없다.

그럼 어떻게 만드냐

→ 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체를 생성해야 한다.

 

접근 제어자(access modifier)

  • private
    • 같은 클래스 내에서만 접근이 가능하다.
  • (default)
    • 같은 패키지 내에서만 접근이 가능하다.
  • protected
    • 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
  • public
    • 접근 제한이 전혀 없다.

접근 범위(넓 > 좁)

public > protected > (default) > private

 

클래스에는 public, (default)

멤버(멤버 변수, 메서드)에는 4개 다 사용가능

 

캡슐화

 접근 제어자를 사용하는 이유

  • 외부로부터 데이터를 보호하기 위해서
  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
public class Time {
	public int hour;
}

이렇게 멤버 변수를 public으로 선언하게 되면

`Time t = new Time();`
`t.hour = 23;`

이렇게 외부에서 데이터를 변경할 수 있기 때문에 아래처럼 사용하는것이다.

public class Time {
	private int hour;

	public void setHour(int hour) {
		this.hour = hour;
	}
}