백엔드 수업 #06 클래스 - 13 접근 제한자

sookyoung.k·2022년 11월 22일
0

(12는 생략합니다 패키지 얘기라서...)

main() 메소드가 없는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스라고 한다. 때문에 라이브러리 클래스를 설계할 때는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메소드를 설계하는 것이 바람직하다!

접근 가능 혹은 접근 불가의 기능을 구현하기 위해서 접근 제한자(Access Modifier) 사용

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
dafault 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스
  • public: 공개한다! 외부 클래스가 자유롭게 사용할 수 있는 공개 멤버 만듦 (공공장소 생각하면 될 것 같음)

  • protected: 같은 패키지 혹은 자식 클래스에서 사용할 수 있는 멤버 만듦

  • private: 개인적인 것! 외부에 노출되지 않는 멤버 만듦 (프라이버시 존나 중요. 클래스를 하나의 개인으로 생각하자면 지 혼자만 다 해먹는 것임. 은둔형 외톨이라 남을 거부함)

  • default: 위 세 가지 접근 제한자 적용되지 않은 멤버는 default 접근 제한을 갖는다. 같은 패키지에 소속된 클래스에서만 사용할 수 있는 멤버를 만듦

클래스의 접근 제한

같은 패키지 내에서만 사용할 것인지, 다른 패키지 내에서도 사용할 수 있도록 할 것인지 결정하기

클래스에 적용할 수 있는 접근 제한은 public, default 두 가지

default 접근 제한

class 선언 시 public을 생략하면 default 접근 제한을 갖게 된다.

  • 같은 패키지 내에서는 제한 없이 사용이 가능하지만 다른 패키지에서는 사용 못하게 제한

public 접근 제한

  • 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용 가능

생성자의 접근 제한

객체 생성: new 연산자로 생성자 호출

생성자가 어떤 접근 제한을 갖느냐에 따라서 호출 가능 여부가 결정된다.

접근 제한자 생성자 설명
public 클래스(...) 모든 패키지에서 아무런 제한 없이 생성자 호출 가능!
클래스가 defaut 접근 제한을 갖는다면 클래스 사용이 같은 패키지로 한정되기 때문에
생성자가 public이어도 같은 패키지 내에서만 생성자 호출 가능
protected 클래스(...) 같은 패키지에 속하는 클래스에서 생성자 호출 가능!
다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 생성자 호출 가능!
dafault 클래스(...) 다른 패키지에서는 생성자 호출 불가
private 클래스(...) 오직 클래스 내부에서만 생성자를 호출하고 객체 생성 가능

필드와 메소드의 접근 제한

필드와 메소드 선언 시에도 클래스 내부에서만 사용할 것인지, 패키지 내에서만 사용할 것인지, 아니면 다른 패키지에서도 사용할 수 있도록 할 것인지 결정해야 한다.

접근 제한자 생성자 설명
public 필드
메소드(...)
모든 패키지에서 아무런 제한 없이 필드와 메소드 사용 가능
필드와 메소드가 public 접근 제한을 가질 경우 클래스도 동일해야 한다
protected 필드
메소드(...)
같은 패키지에 속하는 클래스에서 필드와 메소드를 사용할 수 있게 함
default와 비슷하지만 protected는 다른 패키지에 속한 클래스라도
해당 클래스의 자식 클래스일 경우 필드와 메소드 사용 가능!
dafault 필드
메소드(...)
public이나 pirvate 생략했다면 default 접근 제한을 갖는다
같은 패키지에서는 제한 없이 필드 메소드 사용 가능하지만
다른 패키지에서는 사용 불가
private 필드
메소드(...)
패키지가 동일하든 동일하지 않든 상관 없이 필드 메소드 사용 불가
오직 클래스 내부에서만 사용 가능

이 부분... 잘 기억해 둡시다 ㅠ 코드 만들면서 자주 실수 한다 접근 제한자 쓰는거 까먹음 맨날 ㅠ

profile
영차영차 😎

0개의 댓글