제어자(Modifier)와 캡슐화

‍김다솔·2021년 4월 14일
0

제어자(Modifier)

  • 클래스와 클래스 범버에 부가적인 의미 부여
  • 접근 제어자 : public, protected, private(default)
  • 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp
  • 순서 상관 없음

static

클래스의, 공통적인, 객체 생성없이 사용 가능없이 사용 가능

  • 멤버변수
  • 메서드 : 인스턴스 멤버(iv, im) 사용 불가

final

변경될 수 없는

  • 확장될 수 없는 마지막 자식 클래스
  • 오버라이딩(Overriding)할 수 없는 메서드
  • 상수(Contant)

abstarct

추상의, 미완성의

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

AbstractTest a = new AbstractTest(); // ERROR:추상 클래스의 인스턴스 생성 불가
  • 추상 클래스의 인스턴스 생성 불가
  • 추상 클래스를 상속 받아서 완전한 클래스로 만든 후에 객체 생성 가능

접근 제어자

  • private : 같은 클래스(파일) 내에서만 접근 가능
  • (default) : 같은 패키지(폴더) 내에서만 접근 가능
  • protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
  • public : 접근 제한 없음

클래스 앞에는 public, (default)만 붙일 수 있고, 멤버 앞에는 모두 붙일 수 있다.

접근 제어자는 최대한 좁히는 게 좋다.

캡슐화와 접근 제어자

class Time {
	private int hour;
	private int minute;
	private int second;

	// 메서드를 통해 멤버 변수에 간접 접근
	public int getHour() {
		return hour;
	}

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

	// Alt+Shift+M
	private boolean isNotValidHour(int hour) {
		return hour < 0 || hour > 23;
	}
}

public class c7_7_210414 {
	public static void main(String[] args) {
		Time t = new Time();
		t.getHour();
		t.setHour(25);
	}
} 	
  • 외부로부터 데이터를 보호하기 위해 접근 제어자 사용
  • 외부에는 불필요한 부분을 감추고 내부적으로만 사용
profile
💻🎧⚽

0개의 댓글

관련 채용 정보