👉 캡슐화
클래스의 내부에 선언된 데이터를 보호하기 위해 사용함.
데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서 외부로부터의 접근을 제한하는 것이 필요
=> 데이터 감추기(data hiding)
👉 접근 제어자를 사용하는 이유
외부로부터 데이터를 보호하기 위해서
외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
👉 get,set
get으로 시작하는 메서드 : 단순히 멤버변수의 값을 반환
set으로 시작하는 메서드 : 매개변수에 지정된 값을 검사하여 조건에 맞는 값일 때만 멤버변수의 값을 변경
if 상속을 통해 확장될 것이 예상되는 클래스 -> 멤버에 접근 제한을 주되 자손클래스에서 접근하는 것이 가능하도록 protected 사용!!
👉 다형성(polymorphism)
여러 가지 형태를 가질 수 있는 능력
한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현
조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것
조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
👉 참조변수의 형변환
서로 상속관계에 있는 타입간의 형변환은 양방향으로 자유롭게 수행될 수 있음.
But, 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않음.
So, 참조변수가 가리키는 인스턴스의 타입이 무엇인지 확인하는 것이 중요!