접근제어자
접근제어자란?
한 클래스 안에 변수, 메소드가 있다
이것을 얼마만큼 공개할 것이지 사용범위를 결정하는 것
왜 접근제어자를 사용할까?
OOP의 캡슐화라는 특징 때문이다
캡슐화란?
클래스 내부의 정보를 외부로부터 숨겨서 위험을 최소화하는 것이다
캡슐화가 언제 중요할까?
프로그램을 만들어서 배포를 했다고 하자
이때 외부에서 그 프로그램을 가져다 쓰면서 동작하는 핵심 값을 바꿔버리는 경우가 발생할 수 있다
외부에서 접근하면 안되는 값이 접근해서 문제가 발생한 것!
그래서 접근제어자를 통해 이러한 값들을 보호해줘야 하는 것이다
외부에서 가져다 쓰는 것을 의존한다 라고 한다
의존하는 것이 많으면 결합도가 올라가는데 결합도는 낮을수록 좋다
왜 결합도가 낮은 것이 좋은가?
한 클래스의 내용을 변경할 때 의존관계에 있는 클래스의 내용도 변경해주어야 한다
그런데 의존관계가 너무 많이 설정되어 있다면? 즉 결합도가 높다면?
팀플을 하는데 한 사람이 일을 다하고 있다고 하자
다른 팀원들이 모두 그에게 의존하고 있는 것이다
그런데 일을 다 하는 한 사람이 아프다거나 잠수를 타버리게 된다면? 그 프로젝트는 망하게 되어 버리는 것이다 ㅎㅎ
각자 할 일을 맡고 있어야 의존성이 낮아져서 한 사람에게 무슨 일이 생겨도 프로젝트 자체에 큰 문제가 생기지 않는다
프로그래밍에서도 마찬가지로 결합도가 높은 프로그램은 한 부분을 바꾸면 다른 부분도 모두 바꿔야 하기 때문에 효율성이 좋지 않다
그래서 필요하지 않은 것들은 의존관계를 끊어내면서 결합도를 낮추는 것이 접근제어자이다
접근제어자의 종류 4가지
private: 같은 클래스 내부에서만 접근가능하다
default: 같은 패키지 내의 클래스들만 접근가능하다
protected: 같은 패키지 내의 클래스들만 접근가능한데 외부 패키지라면 상속된 경우 접근가능하다
public: 항상 접근 가능하다