[JAVA] 객체 지향 프로그래밍 Ⅱ 정리 - (2) : 접근자

DongGyu Jung·2022년 1월 20일
0

자바(JAVA)

목록 보기
13/60
post-thumbnail

🏃‍♂️ 들어가기 앞서..

본 게시물은 스터디 활동 중에 작성한 게시물로 자바의 정석-기초편 교재를 학습하여 정리하는 글입니다.
※ 스터디 Page : 〔투 비 마스터 : 자바〕

*해당 교재의 목차 순서와 구성을 참고하여 작성하며
각 내용마다 부족할 수 있는 내용이나 개인적으로 궁금한 점은
추가적인 검색을 통해 채워나갈 예정입니다.



🔖 제어자 ( modifier )

[ 클래스 / 변수 / 메서드 ]의
" 선언부 "에 함께 사용되어 부가적인 의미를 부여한다.

  • 접근 제어자 : public protected, private , (default)
  • etc : static , final , abstract , native , transient , synchronized , volatile, strictfp
    (강조된 3가지를 제외하고는 자주 사용되진 않는다.)

제어자는
"클래스""멤버변수""메서드"에 주로 사용되고
" 하나의 대상에 대해 여러 제어자 조합 사용 가능하다. "

단,
접근 제어자의 경우
네 가지 중 하나만 한 번에 사용할 수 있다.
( ex. publicprivate 동시 사용 X )

📢 static - "클래스의" , "공통"

사용 : 멤버변수 / 메서드 / 초기화 블럭

각기 다른 값을 유지하는 인스턴스 변수와는 다르게
클래스 변수(static 멤버변수)는 모든 인스턴스가 공유하기 때문에
인스턴스 관계없이 같은 값을 가진다.
그렇기 때문에
< 클래스 멤버변수 & 메서드 & 초기화 블럭 >에
static이 붙게되면
" 인스턴스를 생성하지 않고도 사용할 수 있다. "

인스턴스 멤버를 사용하지 않는 메서드라면
static메서드로 선언하는 것이 편리하고 속도도 빠르다.

📢 final - "마지막" , "불변적"

사용 : 클래스 / 메서드 / 멤버변수 / 지역변수

거의 모든 대상에 사용될 수 있는 제어자로

  • " 변수 " 사용 : 값 변경이 불가능한 상수로 (지역변수/멤버변수 )
  • " 메서드 " 사용 : 오버라이딩 불가능한 메서드로
  • " 클래스 " 사용 : 자손 클래스 정의 등 확장 불가능한 클래스로

📢 abstract - "추상적" , "미완성"

사용 : 클래스 / 메서드

선언부만 작성 하고
" 실제 수행내용은 구현하지 않은 " 추상 메서드를 선언할 때 사용한다.



🔒 접근( access ) 제어자

" 외부에서 접근하지 못하도록 제한 하는 역할 "
( 클래스 내부에 선언된 데이터 보호 차원 & .gitignore의 역할 유사 )


기본값은 말그대로 default인데 실제로 붙이지는 않는다.
( 접근제어자가 지정되어 있지 않은 상태가 default라고 할 수 있다. )

접근범위 = public > protected > (default) > private

  • public : 접근 제한 X

  • (default) : 같은 패키지 내에서만 접근 가능

  • private : 같은 클래스 내에서만 접근 가능
    (인스턴스 생성하여 멤버변수 직접 접근&변경 대비 )

  • protected : 같은 패키지 & 타 패키지 자손클래스에서 접근 가능
    (만약 상속으로 확장될 것 같다면 private 대신 protected를 사용한다.)

💊 캡슐화 & 접근제어자

위에서 설명했듯이
데이터를 외부에서 함부로 건드리지 못하도록 접근을 제한하는데
이것을
" 데이터 감추기(data hiding) "이라 하고
객체지향개념의 " 캡슐화(encapsulation) "에 해당한다.

물론 데이터 보호뿐만 아니라
외부에서 접근할 필요없는
내부 작업을 위한 임시 멤버변수 나 부분작업 처리 메서드 등 같은 멤버들을 감추는 용도이기도 한다.
( 위와 같은 멤버 private지정 ▶ 외부 노출 방지 ▶ 복잡성 감소 : " 캡슐화(encapsulation) "에 해당 )

보통
" 멤버변수 값 조회 메서드 " : get멤버변수명 형식으로 작성
" 멤버변수 값 변경 메서드 " : set멤버변수명 형식으로 작성

0개의 댓글