JAVA - 접근 제한자 & Encapsulation

석재호·2022년 2월 2일
0

JAVA

목록 보기
8/12
post-thumbnail
  • 제한자

    • 클래스, 변수, 메서드 선언부에 함께 사용되어 부가적인 의미 부여
    • 종류
      • 접근 제한자 : public, protected, default(=package), private
      • 그 외 제한자
        • static : 클래스 레벨의 요소 설정
        • final : 요소를 더 이상 수정할 수 없게 함
        • abstract : 추사 메서드 및 추상 클래스 작성
        • synchronized : 멀티스레드에서의 동기화 처리
          ...
    • 하나의 대상에 여러 제한자를 조합 가능하나 접근 제한자는 하나만 사용 가능
    • 순서는 무관하나 일반적으로 접근 제한자를 제일 앞에 사용
  • final : 더 이상 수정할 수 없음

    • 용도

      • final class : 더 이상 확장 할 수 없음 -> 상속 금지 -> Override 방지
        ex) 이미 완벽한 클래스 : String, Math, ...
      • final method : 더 이상 재정의 불가 -> Overriding 금지
      • final variable : 더 이상 값을 바꿀 수 없음 -> 상수화


      method override시 부모의 제한자 범위와 같거나 넓은 범위로만 가능하다.

  • Encapsulation

    • 외부에서 변수에 직접 접근하게 되면 정보가 보호되지 못한다.

    • 이를 방지하기 위해 변수는 private로 접근 막기

    • 공개되는 method를 통한 접근으로 수정 : getter / setter

    • 객체의 생성 제어와 Singleton 디자인 패턴

      • 객체의 생성을 제한해야 한다면
        • 여러 개의 객체가 필요 없는 경우 -> 수정 가능한 멤버 변수가 없고 기능만 있는 경우(stateless한 객체)
        • 객체를 계속 생성/삭제 하는데 많은 비용이 들어 재사용이 유리한 경우

      -Singleton 디자인 패턴

      • 외부에서 생성자에 접근 금지 -> 생성자의 접근 제한자를 private로 설정
      • 내부에서는 private에 접근 가능하므로 직접 객체 생성 -> 멤버 변수 이므로 private 설정
      • 외부에서 private member에 접근 가능한 getter 생성 -> setter 불필요
      • 객체 없이 외부에서 접근할 수 있도록 getter와 변수에 static 추가
      • 외부에서는 언제나 getter를 통해서 객체를 참조하므로 하나의 객체 재사용
profile
개발자 준비 중

0개의 댓글