타입스크립트를 항상 리액트훅에서만 사용하다가 이번에 자바스크립트에서 타입스크립트를 사용하게 되었는데, 내가 사용했던 타입스크립트는 타입스크립트가 아니였구나 싶었다. 그러던중에 public, private, protected 키워드를 알게되었고 차이점이 애매해서 조금더 공부해보았다.
클래스 기반 객체 지향 언어가 지원하는 접근 제한자(Access modifier) public,private,protected를 지원하며 의미 또한 동일하다.
접근 제한자를 명시하지 않았을 때
각각 접근 제한자에 따른 접근 가능성을 표로 나타내면,
접근가능성 | public | protected | private |
---|---|---|---|
클래스 내부 | O | O | O |
자식 클래스 내부 | O | O | X |
클래스 인스턴스 | O | X | X |
위와 같이 된다.
아래 코드를 보면서 좀 더 이해해보자.
Employee
에는 public 과 private , protected 프로퍼티들이 선언되어있다.
empName
은 public 으로 선언되어있으므로 자식 클래스의 내부와 클래스 인스턴스 그리고 클래스 내부 모두 접근가능하다.
따라서 자식 클래스인 SalesEmployee 클래스 내부에서도 가능하고 그 자식 클래스의 인스턴스인 new SalesEmployee() 에서도 접근이 가능하다.
protectedValue 는 Employee
내부에서와 자식클래스 내부에서만 접근이 가능하다. 그렇기 때문에 자식인 SalesEmployee()의 메소드 인 test 안에서 protectedValue를 사용할 수 있다. 하지만 외부인 인스턴스에서는 사용할 수 없다. 그렇기 때문에 new SalesEmployee().protectedValue는 컴파일 오류가 생긴다.
privateValue 는 자식 클래스에서도 쓰지못하는 프로퍼티다. SalesEmployee 안의 test 메소드에서 privateValue는 컴파일 오류가 난다.
이러한 접근 제한자들은 클래스들의 캡슐화를 위해서 사용된다. 클래스의 메소드를 안전하게 은닉하고 싶을 때 사용되는 것 같다.
깔~~끔한 정리군요! private는 언제 주로 활용되는지 의문점이 생기네요